diff --git a/core/src/main/java/google/registry/reporting/icann/IcannReportingStagingAction.java b/core/src/main/java/google/registry/reporting/icann/IcannReportingStagingAction.java index 38350dbee..0e1160e06 100644 --- a/core/src/main/java/google/registry/reporting/icann/IcannReportingStagingAction.java +++ b/core/src/main/java/google/registry/reporting/icann/IcannReportingStagingAction.java @@ -21,9 +21,6 @@ import static google.registry.request.Action.Method.POST; import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; import static javax.servlet.http.HttpServletResponse.SC_OK; -import com.google.appengine.api.taskqueue.QueueFactory; -import com.google.appengine.api.taskqueue.TaskOptions; -import com.google.appengine.api.taskqueue.TaskOptions.Method; import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -33,9 +30,12 @@ import google.registry.bigquery.BigqueryJobFailureException; import google.registry.config.RegistryConfig.Config; import google.registry.reporting.icann.IcannReportingModule.ReportType; import google.registry.request.Action; +import google.registry.request.Action.Service; import google.registry.request.Parameter; import google.registry.request.Response; import google.registry.request.auth.Auth; +import google.registry.util.Clock; +import google.registry.util.CloudTasksUtils; import google.registry.util.EmailMessage; import google.registry.util.Retrier; import google.registry.util.SendEmailService; @@ -86,6 +86,8 @@ public final class IcannReportingStagingAction implements Runnable { @Inject @Config("gSuiteOutgoingEmailAddress") InternetAddress sender; @Inject @Config("alertRecipientEmailAddress") InternetAddress recipient; @Inject SendEmailService emailService; + @Inject Clock clock; + @Inject CloudTasksUtils cloudTasksUtils; @Inject IcannReportingStagingAction() {} @@ -119,11 +121,14 @@ public final class IcannReportingStagingAction implements Runnable { response.setPayload("Completed staging action."); logger.atInfo().log("Enqueueing report upload."); - TaskOptions uploadTask = - TaskOptions.Builder.withUrl(IcannReportingUploadAction.PATH) - .method(Method.POST) - .countdownMillis(Duration.standardMinutes(2).getMillis()); - QueueFactory.getQueue(CRON_QUEUE).add(uploadTask); + cloudTasksUtils.enqueue( + CRON_QUEUE, + CloudTasksUtils.createPostTask( + IcannReportingUploadAction.PATH, + Service.BACKEND.toString(), + null, + clock, + Duration.standardMinutes(2))); return null; }, BigqueryJobFailureException.class); diff --git a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java index 16c9f615a..b92757080 100644 --- a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java +++ b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java @@ -15,29 +15,32 @@ package google.registry.reporting.icann; import static com.google.common.truth.Truth.assertThat; -import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued; -import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.protobuf.util.Timestamps; import google.registry.bigquery.BigqueryJobFailureException; import google.registry.reporting.icann.IcannReportingModule.ReportType; import google.registry.request.HttpException.BadRequestException; import google.registry.testing.AppEngineExtension; +import google.registry.testing.CloudTasksHelper; +import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.FakeSleeper; -import google.registry.testing.TaskQueueHelper.TaskMatcher; import google.registry.util.EmailMessage; import google.registry.util.Retrier; import google.registry.util.SendEmailService; import java.util.Optional; import javax.mail.internet.InternetAddress; +import org.joda.time.DateTime; +import org.joda.time.Duration; import org.joda.time.YearMonth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -51,6 +54,7 @@ class IcannReportingStagingActionTest { private YearMonth yearMonth = new YearMonth(2017, 6); private String subdir = "default/dir"; private IcannReportingStagingAction action; + private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(); @RegisterExtension final AppEngineExtension appEngine = @@ -72,6 +76,8 @@ class IcannReportingStagingActionTest { action.sender = new InternetAddress("sender@example.com"); action.recipient = new InternetAddress("recipient@example.com"); action.emailService = mock(SendEmailService.class); + action.cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils(); + action.clock = new FakeClock(DateTime.parse("2021-01-02T11:00:00Z")); when(stager.stageReports(yearMonth, subdir, ReportType.ACTIVITY)) .thenReturn(ImmutableList.of("a", "b")); @@ -79,9 +85,15 @@ class IcannReportingStagingActionTest { .thenReturn(ImmutableList.of("c", "d")); } - private static void assertUploadTaskEnqueued() { - TaskMatcher matcher = new TaskMatcher().url("/_dr/task/icannReportingUpload").method("POST"); - assertTasksEnqueued("retryable-cron-tasks", matcher); + private void assertUploadTaskEnqueued() { + cloudTasksHelper.assertTasksEnqueued( + "retryable-cron-tasks", + new TaskMatcher() + .url("/_dr/task/icannReportingUpload") + .method(HttpMethod.POST) + .scheduleTime( + Timestamps.fromMillis( + action.clock.nowUtc().plus(Duration.standardMinutes(2)).getMillis()))); } @Test @@ -157,7 +169,7 @@ class IcannReportingStagingActionTest { new InternetAddress("recipient@example.com"), new InternetAddress("sender@example.com"))); // Assert no upload task enqueued - assertNoTasksEnqueued("retryable-cron-tasks"); + cloudTasksHelper.assertNoTasksEnqueued("retryable-cron-tasks"); } @Test