mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 03:57:51 +02:00
Make a few quality-of-life improvements in CloudTasksUtils (#1521)
* Make a few quality-of-life improvements in CloudTasksUtils 1. Update the method names. There are too many overloaded methods and it is hard to figure out which one does which without checking the javadoc. 2. Added a method in the task matcher to specify the delay time in DateTime, so the caller does not need to convert it to Timestamp. 3. Remove the expilict dependency on a clock when enqueueing a task with delay, the clock is now injected directly into the util instance itself.
This commit is contained in:
parent
88f274a601
commit
d355da362f
31 changed files with 119 additions and 123 deletions
|
@ -96,7 +96,7 @@ public final class CommitLogCheckpointAction implements Runnable {
|
||||||
// Enqueue a diff task between previous and current checkpoints.
|
// Enqueue a diff task between previous and current checkpoints.
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
QUEUE_NAME,
|
QUEUE_NAME,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
ExportCommitLogDiffAction.PATH,
|
ExportCommitLogDiffAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
|
|
@ -304,7 +304,7 @@ public class RdeIO {
|
||||||
if (key.mode() == RdeMode.FULL) {
|
if (key.mode() == RdeMode.FULL) {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
RDE_UPLOAD_QUEUE,
|
RDE_UPLOAD_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
RdeUploadAction.PATH,
|
RdeUploadAction.PATH,
|
||||||
Service.BACKEND.getServiceId(),
|
Service.BACKEND.getServiceId(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
@ -315,7 +315,7 @@ public class RdeIO {
|
||||||
} else {
|
} else {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
BRDA_QUEUE,
|
BRDA_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
BrdaCopyAction.PATH,
|
BrdaCopyAction.PATH,
|
||||||
Service.BACKEND.getServiceId(),
|
Service.BACKEND.getServiceId(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
|
|
@ -21,6 +21,7 @@ import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
import google.registry.config.CredentialModule.DefaultCredential;
|
import google.registry.config.CredentialModule.DefaultCredential;
|
||||||
import google.registry.config.RegistryConfig.Config;
|
import google.registry.config.RegistryConfig.Config;
|
||||||
|
import google.registry.util.Clock;
|
||||||
import google.registry.util.CloudTasksUtils;
|
import google.registry.util.CloudTasksUtils;
|
||||||
import google.registry.util.CloudTasksUtils.GcpCloudTasksClient;
|
import google.registry.util.CloudTasksUtils.GcpCloudTasksClient;
|
||||||
import google.registry.util.CloudTasksUtils.SerializableCloudTasksClient;
|
import google.registry.util.CloudTasksUtils.SerializableCloudTasksClient;
|
||||||
|
@ -46,8 +47,9 @@ public abstract class CloudTasksUtilsModule {
|
||||||
@Config("projectId") String projectId,
|
@Config("projectId") String projectId,
|
||||||
@Config("locationId") String locationId,
|
@Config("locationId") String locationId,
|
||||||
SerializableCloudTasksClient client,
|
SerializableCloudTasksClient client,
|
||||||
Retrier retrier) {
|
Retrier retrier,
|
||||||
return new CloudTasksUtils(retrier, projectId, locationId, client);
|
Clock clock) {
|
||||||
|
return new CloudTasksUtils(retrier, clock, projectId, locationId, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Provides a supplier instead of using a Dagger @Provider because the latter is not serializable.
|
// Provides a supplier instead of using a Dagger @Provider because the latter is not serializable.
|
||||||
|
|
|
@ -20,7 +20,6 @@ import google.registry.request.Action;
|
||||||
import google.registry.request.Action.Service;
|
import google.registry.request.Action.Service;
|
||||||
import google.registry.request.Parameter;
|
import google.registry.request.Parameter;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import google.registry.util.CloudTasksUtils;
|
import google.registry.util.CloudTasksUtils;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
@ -35,7 +34,6 @@ public final class CommitLogFanoutAction implements Runnable {
|
||||||
|
|
||||||
public static final String BUCKET_PARAM = "bucket";
|
public static final String BUCKET_PARAM = "bucket";
|
||||||
|
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject CloudTasksUtils cloudTasksUtils;
|
@Inject CloudTasksUtils cloudTasksUtils;
|
||||||
|
|
||||||
@Inject @Parameter("endpoint") String endpoint;
|
@Inject @Parameter("endpoint") String endpoint;
|
||||||
|
@ -43,18 +41,15 @@ public final class CommitLogFanoutAction implements Runnable {
|
||||||
@Inject @Parameter("jitterSeconds") Optional<Integer> jitterSeconds;
|
@Inject @Parameter("jitterSeconds") Optional<Integer> jitterSeconds;
|
||||||
@Inject CommitLogFanoutAction() {}
|
@Inject CommitLogFanoutAction() {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for (int bucketId : CommitLogBucket.getBucketIds()) {
|
for (int bucketId : CommitLogBucket.getBucketIds()) {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
queue,
|
queue,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTaskWithJitter(
|
||||||
endpoint,
|
endpoint,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(BUCKET_PARAM, Integer.toString(bucketId)),
|
ImmutableMultimap.of(BUCKET_PARAM, Integer.toString(bucketId)),
|
||||||
clock,
|
|
||||||
jitterSeconds));
|
jitterSeconds));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,6 @@ import google.registry.request.ParameterMap;
|
||||||
import google.registry.request.RequestParameters;
|
import google.registry.request.RequestParameters;
|
||||||
import google.registry.request.Response;
|
import google.registry.request.Response;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import google.registry.util.CloudTasksUtils;
|
import google.registry.util.CloudTasksUtils;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
@ -98,7 +97,6 @@ public final class TldFanoutAction implements Runnable {
|
||||||
|
|
||||||
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
|
||||||
|
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject CloudTasksUtils cloudTasksUtils;
|
@Inject CloudTasksUtils cloudTasksUtils;
|
||||||
@Inject Response response;
|
@Inject Response response;
|
||||||
@Inject @Parameter(ENDPOINT_PARAM) String endpoint;
|
@Inject @Parameter(ENDPOINT_PARAM) String endpoint;
|
||||||
|
@ -159,7 +157,7 @@ public final class TldFanoutAction implements Runnable {
|
||||||
params = ArrayListMultimap.create(params);
|
params = ArrayListMultimap.create(params);
|
||||||
params.put(RequestParameters.PARAM_TLD, tld);
|
params.put(RequestParameters.PARAM_TLD, tld);
|
||||||
}
|
}
|
||||||
return CloudTasksUtils.createPostTask(
|
return cloudTasksUtils.createPostTaskWithJitter(
|
||||||
endpoint, Service.BACKEND.toString(), params, clock, jitterSeconds);
|
endpoint, Service.BACKEND.toString(), params, jitterSeconds);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -334,7 +334,8 @@ public class LoadTestAction implements Runnable {
|
||||||
tasks.add(
|
tasks.add(
|
||||||
Task.newBuilder()
|
Task.newBuilder()
|
||||||
.setAppEngineHttpRequest(
|
.setAppEngineHttpRequest(
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils
|
||||||
|
.createPostTask(
|
||||||
"/_dr/epptool",
|
"/_dr/epptool",
|
||||||
Service.TOOLS.toString(),
|
Service.TOOLS.toString(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
|
|
@ -233,14 +233,14 @@ public final class RdeStagingReducer extends Reducer<PendingDeposit, DepositFrag
|
||||||
if (mode == RdeMode.FULL) {
|
if (mode == RdeMode.FULL) {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
"rde-upload",
|
"rde-upload",
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
RdeUploadAction.PATH,
|
RdeUploadAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(RequestParameters.PARAM_TLD, tld)));
|
ImmutableMultimap.of(RequestParameters.PARAM_TLD, tld)));
|
||||||
} else {
|
} else {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
"brda",
|
"brda",
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
BrdaCopyAction.PATH,
|
BrdaCopyAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
|
|
@ -134,7 +134,7 @@ public final class RdeUploadAction implements Runnable, EscrowTask {
|
||||||
}
|
}
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
RDE_REPORT_QUEUE,
|
RDE_REPORT_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
RdeReportAction.PATH, Service.BACKEND.getServiceId(), params));
|
RdeReportAction.PATH, Service.BACKEND.getServiceId(), params));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ public class GenerateInvoicesAction implements Runnable {
|
||||||
if (shouldPublish) {
|
if (shouldPublish) {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
ReportingModule.BEAM_QUEUE,
|
ReportingModule.BEAM_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTaskWithDelay(
|
||||||
PublishInvoicesAction.PATH,
|
PublishInvoicesAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
@ -159,7 +159,6 @@ public class GenerateInvoicesAction implements Runnable {
|
||||||
jobId,
|
jobId,
|
||||||
ReportingModule.PARAM_YEAR_MONTH,
|
ReportingModule.PARAM_YEAR_MONTH,
|
||||||
yearMonth.toString()),
|
yearMonth.toString()),
|
||||||
clock,
|
|
||||||
Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES)));
|
Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES)));
|
||||||
}
|
}
|
||||||
response.setStatus(SC_OK);
|
response.setStatus(SC_OK);
|
||||||
|
|
|
@ -125,7 +125,7 @@ public class PublishInvoicesAction implements Runnable {
|
||||||
private void enqueueCopyDetailReportsTask() {
|
private void enqueueCopyDetailReportsTask() {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
BillingModule.CRON_QUEUE,
|
BillingModule.CRON_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
CopyDetailReportsAction.PATH,
|
CopyDetailReportsAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(PARAM_YEAR_MONTH, yearMonth.toString())));
|
ImmutableMultimap.of(PARAM_YEAR_MONTH, yearMonth.toString())));
|
||||||
|
|
|
@ -34,7 +34,6 @@ import google.registry.request.Action.Service;
|
||||||
import google.registry.request.Parameter;
|
import google.registry.request.Parameter;
|
||||||
import google.registry.request.Response;
|
import google.registry.request.Response;
|
||||||
import google.registry.request.auth.Auth;
|
import google.registry.request.auth.Auth;
|
||||||
import google.registry.util.Clock;
|
|
||||||
import google.registry.util.CloudTasksUtils;
|
import google.registry.util.CloudTasksUtils;
|
||||||
import google.registry.util.EmailMessage;
|
import google.registry.util.EmailMessage;
|
||||||
import google.registry.util.Retrier;
|
import google.registry.util.Retrier;
|
||||||
|
@ -86,7 +85,6 @@ public final class IcannReportingStagingAction implements Runnable {
|
||||||
@Inject @Config("gSuiteOutgoingEmailAddress") InternetAddress sender;
|
@Inject @Config("gSuiteOutgoingEmailAddress") InternetAddress sender;
|
||||||
@Inject @Config("alertRecipientEmailAddress") InternetAddress recipient;
|
@Inject @Config("alertRecipientEmailAddress") InternetAddress recipient;
|
||||||
@Inject SendEmailService emailService;
|
@Inject SendEmailService emailService;
|
||||||
@Inject Clock clock;
|
|
||||||
@Inject CloudTasksUtils cloudTasksUtils;
|
@Inject CloudTasksUtils cloudTasksUtils;
|
||||||
|
|
||||||
@Inject IcannReportingStagingAction() {}
|
@Inject IcannReportingStagingAction() {}
|
||||||
|
@ -123,11 +121,10 @@ public final class IcannReportingStagingAction implements Runnable {
|
||||||
logger.atInfo().log("Enqueueing report upload.");
|
logger.atInfo().log("Enqueueing report upload.");
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
CRON_QUEUE,
|
CRON_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTaskWithDelay(
|
||||||
IcannReportingUploadAction.PATH,
|
IcannReportingUploadAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
null,
|
null,
|
||||||
clock,
|
|
||||||
Duration.standardMinutes(2)));
|
Duration.standardMinutes(2)));
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
|
@ -144,7 +144,7 @@ public class GenerateSpec11ReportAction implements Runnable {
|
||||||
if (sendEmail) {
|
if (sendEmail) {
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
ReportingModule.BEAM_QUEUE,
|
ReportingModule.BEAM_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTaskWithDelay(
|
||||||
PublishSpec11ReportAction.PATH,
|
PublishSpec11ReportAction.PATH,
|
||||||
Service.BACKEND.toString(),
|
Service.BACKEND.toString(),
|
||||||
ImmutableMultimap.of(
|
ImmutableMultimap.of(
|
||||||
|
@ -152,7 +152,6 @@ public class GenerateSpec11ReportAction implements Runnable {
|
||||||
jobId,
|
jobId,
|
||||||
ReportingModule.PARAM_DATE,
|
ReportingModule.PARAM_DATE,
|
||||||
date.toString()),
|
date.toString()),
|
||||||
clock,
|
|
||||||
Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES)));
|
Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES)));
|
||||||
}
|
}
|
||||||
response.setStatus(SC_OK);
|
response.setStatus(SC_OK);
|
||||||
|
|
|
@ -133,7 +133,7 @@ final class GenerateEscrowDepositCommand implements CommandWithRemoteApi {
|
||||||
}
|
}
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
RDE_REPORT_QUEUE,
|
RDE_REPORT_QUEUE,
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTask(
|
||||||
RdeStagingAction.PATH, Service.BACKEND.toString(), paramsBuilder.build()));
|
RdeStagingAction.PATH, Service.BACKEND.toString(), paramsBuilder.build()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -641,7 +641,7 @@ public class RegistrarSettingsAction implements Runnable, JsonActionRunner.JsonA
|
||||||
// there's an update besides the lastUpdateTime
|
// there's an update besides the lastUpdateTime
|
||||||
cloudTasksUtils.enqueue(
|
cloudTasksUtils.enqueue(
|
||||||
SyncRegistrarsSheetAction.QUEUE,
|
SyncRegistrarsSheetAction.QUEUE,
|
||||||
CloudTasksUtils.createGetTask(
|
cloudTasksUtils.createGetTask(
|
||||||
SyncRegistrarsSheetAction.PATH, Service.BACKEND.toString(), ImmutableMultimap.of()));
|
SyncRegistrarsSheetAction.PATH, Service.BACKEND.toString(), ImmutableMultimap.of()));
|
||||||
}
|
}
|
||||||
String environment = Ascii.toLowerCase(String.valueOf(RegistryEnvironment.get()));
|
String environment = Ascii.toLowerCase(String.valueOf(RegistryEnvironment.get()));
|
||||||
|
|
|
@ -33,7 +33,7 @@ class CommitLogFanoutActionTest {
|
||||||
|
|
||||||
private static final String ENDPOINT = "/the/servlet";
|
private static final String ENDPOINT = "/the/servlet";
|
||||||
private static final String QUEUE = "the-queue";
|
private static final String QUEUE = "the-queue";
|
||||||
private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper();
|
private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(new FakeClock());
|
||||||
|
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
final AppEngineExtension appEngineExtension =
|
final AppEngineExtension appEngineExtension =
|
||||||
|
@ -58,7 +58,6 @@ class CommitLogFanoutActionTest {
|
||||||
action.endpoint = ENDPOINT;
|
action.endpoint = ENDPOINT;
|
||||||
action.queue = QUEUE;
|
action.queue = QUEUE;
|
||||||
action.jitterSeconds = Optional.empty();
|
action.jitterSeconds = Optional.empty();
|
||||||
action.clock = new FakeClock();
|
|
||||||
action.run();
|
action.run();
|
||||||
List<TaskMatcher> matchers = new ArrayList<>();
|
List<TaskMatcher> matchers = new ArrayList<>();
|
||||||
for (int bucketId : CommitLogBucket.getBucketIds()) {
|
for (int bucketId : CommitLogBucket.getBucketIds()) {
|
||||||
|
|
|
@ -45,7 +45,7 @@ class TldFanoutActionTest {
|
||||||
private static final String ENDPOINT = "/the/servlet";
|
private static final String ENDPOINT = "/the/servlet";
|
||||||
private static final String QUEUE = "the-queue";
|
private static final String QUEUE = "the-queue";
|
||||||
private final FakeResponse response = new FakeResponse();
|
private final FakeResponse response = new FakeResponse();
|
||||||
private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper();
|
private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(new FakeClock());
|
||||||
|
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
final AppEngineExtension appEngine =
|
final AppEngineExtension appEngine =
|
||||||
|
@ -61,7 +61,6 @@ class TldFanoutActionTest {
|
||||||
|
|
||||||
private void run(ImmutableListMultimap<String, String> params) {
|
private void run(ImmutableListMultimap<String, String> params) {
|
||||||
TldFanoutAction action = new TldFanoutAction();
|
TldFanoutAction action = new TldFanoutAction();
|
||||||
action.clock = new FakeClock();
|
|
||||||
action.params = params;
|
action.params = params;
|
||||||
action.endpoint = ENDPOINT;
|
action.endpoint = ENDPOINT;
|
||||||
action.queue = QUEUE;
|
action.queue = QUEUE;
|
||||||
|
|
|
@ -23,7 +23,6 @@ import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import com.google.cloud.tasks.v2.HttpMethod;
|
import com.google.cloud.tasks.v2.HttpMethod;
|
||||||
import com.google.common.net.MediaType;
|
import com.google.common.net.MediaType;
|
||||||
import com.google.protobuf.util.Timestamps;
|
|
||||||
import google.registry.beam.BeamActionTestBase;
|
import google.registry.beam.BeamActionTestBase;
|
||||||
import google.registry.model.common.DatabaseMigrationStateSchedule.PrimaryDatabase;
|
import google.registry.model.common.DatabaseMigrationStateSchedule.PrimaryDatabase;
|
||||||
import google.registry.reporting.ReportingModule;
|
import google.registry.reporting.ReportingModule;
|
||||||
|
@ -83,11 +82,9 @@ class GenerateInvoicesActionTest extends BeamActionTestBase {
|
||||||
.param("jobId", "jobid")
|
.param("jobId", "jobid")
|
||||||
.param("yearMonth", "2017-10")
|
.param("yearMonth", "2017-10")
|
||||||
.scheduleTime(
|
.scheduleTime(
|
||||||
Timestamps.fromMillis(
|
|
||||||
clock
|
clock
|
||||||
.nowUtc()
|
.nowUtc()
|
||||||
.plus(Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES))
|
.plus(Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES))));
|
||||||
.getMillis())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
|
|
@ -24,7 +24,6 @@ import static org.mockito.Mockito.when;
|
||||||
import com.google.cloud.tasks.v2.HttpMethod;
|
import com.google.cloud.tasks.v2.HttpMethod;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.protobuf.util.Timestamps;
|
|
||||||
import google.registry.bigquery.BigqueryJobFailureException;
|
import google.registry.bigquery.BigqueryJobFailureException;
|
||||||
import google.registry.reporting.icann.IcannReportingModule.ReportType;
|
import google.registry.reporting.icann.IcannReportingModule.ReportType;
|
||||||
import google.registry.request.HttpException.BadRequestException;
|
import google.registry.request.HttpException.BadRequestException;
|
||||||
|
@ -54,7 +53,8 @@ class IcannReportingStagingActionTest {
|
||||||
private YearMonth yearMonth = new YearMonth(2017, 6);
|
private YearMonth yearMonth = new YearMonth(2017, 6);
|
||||||
private String subdir = "default/dir";
|
private String subdir = "default/dir";
|
||||||
private IcannReportingStagingAction action;
|
private IcannReportingStagingAction action;
|
||||||
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper();
|
private FakeClock clock = new FakeClock(DateTime.parse("2021-01-02T11:00:00Z"));
|
||||||
|
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock);
|
||||||
|
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
final AppEngineExtension appEngine =
|
final AppEngineExtension appEngine =
|
||||||
|
@ -77,7 +77,6 @@ class IcannReportingStagingActionTest {
|
||||||
action.recipient = new InternetAddress("recipient@example.com");
|
action.recipient = new InternetAddress("recipient@example.com");
|
||||||
action.emailService = mock(SendEmailService.class);
|
action.emailService = mock(SendEmailService.class);
|
||||||
action.cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils();
|
action.cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils();
|
||||||
action.clock = new FakeClock(DateTime.parse("2021-01-02T11:00:00Z"));
|
|
||||||
|
|
||||||
when(stager.stageReports(yearMonth, subdir, ReportType.ACTIVITY))
|
when(stager.stageReports(yearMonth, subdir, ReportType.ACTIVITY))
|
||||||
.thenReturn(ImmutableList.of("a", "b"));
|
.thenReturn(ImmutableList.of("a", "b"));
|
||||||
|
@ -91,9 +90,7 @@ class IcannReportingStagingActionTest {
|
||||||
new TaskMatcher()
|
new TaskMatcher()
|
||||||
.url("/_dr/task/icannReportingUpload")
|
.url("/_dr/task/icannReportingUpload")
|
||||||
.method(HttpMethod.POST)
|
.method(HttpMethod.POST)
|
||||||
.scheduleTime(
|
.scheduleTime(clock.nowUtc().plus(Duration.standardMinutes(2))));
|
||||||
Timestamps.fromMillis(
|
|
||||||
action.clock.nowUtc().plus(Duration.standardMinutes(2)).getMillis())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -21,7 +21,6 @@ import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import com.google.cloud.tasks.v2.HttpMethod;
|
import com.google.cloud.tasks.v2.HttpMethod;
|
||||||
import com.google.common.net.MediaType;
|
import com.google.common.net.MediaType;
|
||||||
import com.google.protobuf.util.Timestamps;
|
|
||||||
import google.registry.beam.BeamActionTestBase;
|
import google.registry.beam.BeamActionTestBase;
|
||||||
import google.registry.model.common.DatabaseMigrationStateSchedule.PrimaryDatabase;
|
import google.registry.model.common.DatabaseMigrationStateSchedule.PrimaryDatabase;
|
||||||
import google.registry.reporting.ReportingModule;
|
import google.registry.reporting.ReportingModule;
|
||||||
|
@ -44,7 +43,7 @@ class GenerateSpec11ReportActionTest extends BeamActionTestBase {
|
||||||
AppEngineExtension.builder().withDatastoreAndCloudSql().withTaskQueue().build();
|
AppEngineExtension.builder().withDatastoreAndCloudSql().withTaskQueue().build();
|
||||||
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2018-06-11T12:23:56Z"));
|
private final FakeClock clock = new FakeClock(DateTime.parse("2018-06-11T12:23:56Z"));
|
||||||
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper();
|
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock);
|
||||||
private CloudTasksUtils cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils();
|
private CloudTasksUtils cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils();
|
||||||
private GenerateSpec11ReportAction action;
|
private GenerateSpec11ReportAction action;
|
||||||
|
|
||||||
|
@ -101,11 +100,9 @@ class GenerateSpec11ReportActionTest extends BeamActionTestBase {
|
||||||
.param("jobId", "jobid")
|
.param("jobId", "jobid")
|
||||||
.param("date", "2018-06-11")
|
.param("date", "2018-06-11")
|
||||||
.scheduleTime(
|
.scheduleTime(
|
||||||
Timestamps.fromMillis(
|
|
||||||
clock
|
clock
|
||||||
.nowUtc()
|
.nowUtc()
|
||||||
.plus(Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES))
|
.plus(Duration.standardMinutes(ReportingModule.ENQUEUE_DELAY_MINUTES))));
|
||||||
.getMillis())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -40,6 +40,7 @@ import com.google.common.net.HttpHeaders;
|
||||||
import com.google.common.net.MediaType;
|
import com.google.common.net.MediaType;
|
||||||
import com.google.common.truth.Truth8;
|
import com.google.common.truth.Truth8;
|
||||||
import com.google.protobuf.Timestamp;
|
import com.google.protobuf.Timestamp;
|
||||||
|
import com.google.protobuf.util.Timestamps;
|
||||||
import google.registry.model.ImmutableObject;
|
import google.registry.model.ImmutableObject;
|
||||||
import google.registry.util.CloudTasksUtils;
|
import google.registry.util.CloudTasksUtils;
|
||||||
import google.registry.util.Retrier;
|
import google.registry.util.Retrier;
|
||||||
|
@ -60,6 +61,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Static utility functions for testing task queues.
|
* Static utility functions for testing task queues.
|
||||||
|
@ -92,13 +94,22 @@ public class CloudTasksHelper implements Serializable {
|
||||||
private static final String PROJECT_ID = "test-project";
|
private static final String PROJECT_ID = "test-project";
|
||||||
private static final String LOCATION_ID = "test-location";
|
private static final String LOCATION_ID = "test-location";
|
||||||
|
|
||||||
private final Retrier retrier = new Retrier(new FakeSleeper(new FakeClock()), 1);
|
|
||||||
private final int instanceId = nextInstanceId.getAndIncrement();
|
private final int instanceId = nextInstanceId.getAndIncrement();
|
||||||
private final CloudTasksUtils cloudTasksUtils =
|
private final CloudTasksUtils cloudTasksUtils;
|
||||||
new CloudTasksUtils(retrier, PROJECT_ID, LOCATION_ID, new FakeCloudTasksClient());
|
|
||||||
|
public CloudTasksHelper(FakeClock clock) {
|
||||||
|
this.cloudTasksUtils =
|
||||||
|
new CloudTasksUtils(
|
||||||
|
new Retrier(new FakeSleeper(clock), 1),
|
||||||
|
clock,
|
||||||
|
PROJECT_ID,
|
||||||
|
LOCATION_ID,
|
||||||
|
new FakeCloudTasksClient());
|
||||||
|
testTasks.put(instanceId, Multimaps.synchronizedListMultimap(LinkedListMultimap.create()));
|
||||||
|
}
|
||||||
|
|
||||||
public CloudTasksHelper() {
|
public CloudTasksHelper() {
|
||||||
testTasks.put(instanceId, Multimaps.synchronizedListMultimap(LinkedListMultimap.create()));
|
this(new FakeClock());
|
||||||
}
|
}
|
||||||
|
|
||||||
public CloudTasksUtils getTestCloudTasksUtils() {
|
public CloudTasksUtils getTestCloudTasksUtils() {
|
||||||
|
@ -302,6 +313,10 @@ public class CloudTasksHelper implements Serializable {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TaskMatcher scheduleTime(DateTime scheduleTime) {
|
||||||
|
return scheduleTime(Timestamps.fromMillis(scheduleTime.getMillis()));
|
||||||
|
}
|
||||||
|
|
||||||
public TaskMatcher param(String key, String value) {
|
public TaskMatcher param(String key, String value) {
|
||||||
checkNotNull(value, "Test error: A param can never have a null value, so don't assert it");
|
checkNotNull(value, "Test error: A param can never have a null value, so don't assert it");
|
||||||
expected.params.put(key, value);
|
expected.params.put(key, value);
|
||||||
|
|
|
@ -30,6 +30,7 @@ com.google.http-client:google-http-client-gson:1.39.2
|
||||||
com.google.http-client:google-http-client:1.39.2
|
com.google.http-client:google-http-client:1.39.2
|
||||||
com.google.j2objc:j2objc-annotations:1.3
|
com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.ibm.icu:icu4j:68.2
|
com.ibm.icu:icu4j:68.2
|
||||||
|
|
|
@ -34,6 +34,7 @@ com.google.http-client:google-http-client-gson:1.39.2
|
||||||
com.google.http-client:google-http-client:1.39.2
|
com.google.http-client:google-http-client:1.39.2
|
||||||
com.google.j2objc:j2objc-annotations:1.3
|
com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.google.truth:truth:1.1.2
|
com.google.truth:truth:1.1.2
|
||||||
|
|
|
@ -32,6 +32,7 @@ com.google.http-client:google-http-client:1.39.2
|
||||||
com.google.j2objc:j2objc-annotations:1.3
|
com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.monitoring-client:metrics:1.0.7
|
com.google.monitoring-client:metrics:1.0.7
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.ibm.icu:icu4j:68.2
|
com.ibm.icu:icu4j:68.2
|
||||||
|
|
|
@ -37,6 +37,7 @@ com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.monitoring-client:contrib:1.0.7
|
com.google.monitoring-client:contrib:1.0.7
|
||||||
com.google.monitoring-client:metrics:1.0.7
|
com.google.monitoring-client:metrics:1.0.7
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.google.truth:truth:1.1.2
|
com.google.truth:truth:1.1.2
|
||||||
|
|
|
@ -45,7 +45,7 @@ com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.monitoring-client:metrics:1.0.7
|
com.google.monitoring-client:metrics:1.0.7
|
||||||
com.google.monitoring-client:stackdriver:1.0.7
|
com.google.monitoring-client:stackdriver:1.0.7
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
com.google.protobuf:protobuf-java-util:3.15.3
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.ibm.icu:icu4j:68.2
|
com.ibm.icu:icu4j:68.2
|
||||||
|
|
|
@ -50,7 +50,7 @@ com.google.monitoring-client:contrib:1.0.7
|
||||||
com.google.monitoring-client:metrics:1.0.7
|
com.google.monitoring-client:metrics:1.0.7
|
||||||
com.google.monitoring-client:stackdriver:1.0.7
|
com.google.monitoring-client:stackdriver:1.0.7
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
com.google.protobuf:protobuf-java-util:3.15.3
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.google.truth:truth:1.1.2
|
com.google.truth:truth:1.1.2
|
||||||
|
|
|
@ -30,6 +30,7 @@ dependencies {
|
||||||
compile deps['com.google.guava:guava']
|
compile deps['com.google.guava:guava']
|
||||||
compile deps['com.google.http-client:google-http-client']
|
compile deps['com.google.http-client:google-http-client']
|
||||||
compile deps['com.google.protobuf:protobuf-java']
|
compile deps['com.google.protobuf:protobuf-java']
|
||||||
|
compile deps['com.google.protobuf:protobuf-java-util']
|
||||||
compile deps['com.google.re2j:re2j']
|
compile deps['com.google.re2j:re2j']
|
||||||
compile deps['com.ibm.icu:icu4j']
|
compile deps['com.ibm.icu:icu4j']
|
||||||
compile deps['commons-codec:commons-codec']
|
compile deps['commons-codec:commons-codec']
|
||||||
|
|
|
@ -29,6 +29,7 @@ com.google.http-client:google-http-client-gson:1.39.2
|
||||||
com.google.http-client:google-http-client:1.39.2
|
com.google.http-client:google-http-client:1.39.2
|
||||||
com.google.j2objc:j2objc-annotations:1.3
|
com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.ibm.icu:icu4j:68.2
|
com.ibm.icu:icu4j:68.2
|
||||||
|
|
|
@ -35,6 +35,7 @@ com.google.http-client:google-http-client-gson:1.39.2
|
||||||
com.google.http-client:google-http-client:1.39.2
|
com.google.http-client:google-http-client:1.39.2
|
||||||
com.google.j2objc:j2objc-annotations:1.3
|
com.google.j2objc:j2objc-annotations:1.3
|
||||||
com.google.oauth-client:google-oauth-client:1.31.4
|
com.google.oauth-client:google-oauth-client:1.31.4
|
||||||
|
com.google.protobuf:protobuf-java-util:3.17.3
|
||||||
com.google.protobuf:protobuf-java:3.17.3
|
com.google.protobuf:protobuf-java:3.17.3
|
||||||
com.google.re2j:re2j:1.6
|
com.google.re2j:re2j:1.6
|
||||||
com.google.truth:truth:1.1.2
|
com.google.truth:truth:1.1.2
|
||||||
|
|
|
@ -35,10 +35,9 @@ import com.google.common.net.HttpHeaders;
|
||||||
import com.google.common.net.MediaType;
|
import com.google.common.net.MediaType;
|
||||||
import com.google.common.net.UrlEscapers;
|
import com.google.common.net.UrlEscapers;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
import com.google.protobuf.Timestamp;
|
import com.google.protobuf.util.Timestamps;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
@ -53,13 +52,19 @@ public class CloudTasksUtils implements Serializable {
|
||||||
private static final Random random = new Random();
|
private static final Random random = new Random();
|
||||||
|
|
||||||
private final Retrier retrier;
|
private final Retrier retrier;
|
||||||
|
private final Clock clock;
|
||||||
private final String projectId;
|
private final String projectId;
|
||||||
private final String locationId;
|
private final String locationId;
|
||||||
private final SerializableCloudTasksClient client;
|
private final SerializableCloudTasksClient client;
|
||||||
|
|
||||||
public CloudTasksUtils(
|
public CloudTasksUtils(
|
||||||
Retrier retrier, String projectId, String locationId, SerializableCloudTasksClient client) {
|
Retrier retrier,
|
||||||
|
Clock clock,
|
||||||
|
String projectId,
|
||||||
|
String locationId,
|
||||||
|
SerializableCloudTasksClient client) {
|
||||||
this.retrier = retrier;
|
this.retrier = retrier;
|
||||||
|
this.clock = clock;
|
||||||
this.projectId = projectId;
|
this.projectId = projectId;
|
||||||
this.locationId = locationId;
|
this.locationId = locationId;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
|
@ -102,7 +107,7 @@ public class CloudTasksUtils implements Serializable {
|
||||||
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
||||||
* the worker service</a>
|
* the worker service</a>
|
||||||
*/
|
*/
|
||||||
private static Task createTask(
|
private Task createTask(
|
||||||
String path, HttpMethod method, String service, Multimap<String, String> params) {
|
String path, HttpMethod method, String service, Multimap<String, String> params) {
|
||||||
checkArgument(
|
checkArgument(
|
||||||
path != null && !path.isEmpty() && path.charAt(0) == '/',
|
path != null && !path.isEmpty() && path.charAt(0) == '/',
|
||||||
|
@ -151,29 +156,26 @@ public class CloudTasksUtils implements Serializable {
|
||||||
* needs to be explicitly specified.
|
* needs to be explicitly specified.
|
||||||
* @param params a multi-map of URL query parameters. Duplicate keys are saved as is, and it is up
|
* @param params a multi-map of URL query parameters. Duplicate keys are saved as is, and it is up
|
||||||
* to the server to process the duplicate keys.
|
* to the server to process the duplicate keys.
|
||||||
* @param clock a source of time.
|
|
||||||
* @param jitterSeconds the number of seconds that a task is randomly delayed up to.
|
* @param jitterSeconds the number of seconds that a task is randomly delayed up to.
|
||||||
* @return the enqueued task.
|
* @return the enqueued task.
|
||||||
* @see <a
|
* @see <a
|
||||||
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
||||||
* the worker service</a>
|
* the worker service</a>
|
||||||
*/
|
*/
|
||||||
private static Task createTask(
|
private Task createTaskWithJitter(
|
||||||
String path,
|
String path,
|
||||||
HttpMethod method,
|
HttpMethod method,
|
||||||
String service,
|
String service,
|
||||||
Multimap<String, String> params,
|
Multimap<String, String> params,
|
||||||
Clock clock,
|
|
||||||
Optional<Integer> jitterSeconds) {
|
Optional<Integer> jitterSeconds) {
|
||||||
if (!jitterSeconds.isPresent() || jitterSeconds.get() <= 0) {
|
if (!jitterSeconds.isPresent() || jitterSeconds.get() <= 0) {
|
||||||
return createTask(path, method, service, params);
|
return createTask(path, method, service, params);
|
||||||
}
|
}
|
||||||
return createTask(
|
return createTaskWithDelay(
|
||||||
path,
|
path,
|
||||||
method,
|
method,
|
||||||
service,
|
service,
|
||||||
params,
|
params,
|
||||||
clock,
|
|
||||||
Duration.millis(random.nextInt((int) SECONDS.toMillis(jitterSeconds.get()))));
|
Duration.millis(random.nextInt((int) SECONDS.toMillis(jitterSeconds.get()))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,76 +190,67 @@ public class CloudTasksUtils implements Serializable {
|
||||||
* needs to be explicitly specified.
|
* needs to be explicitly specified.
|
||||||
* @param params a multi-map of URL query parameters. Duplicate keys are saved as is, and it is up
|
* @param params a multi-map of URL query parameters. Duplicate keys are saved as is, and it is up
|
||||||
* to the server to process the duplicate keys.
|
* to the server to process the duplicate keys.
|
||||||
* @param clock a source of time.
|
|
||||||
* @param delay the amount of time that a task needs to delayed for.
|
* @param delay the amount of time that a task needs to delayed for.
|
||||||
* @return the enqueued task.
|
* @return the enqueued task.
|
||||||
* @see <a
|
* @see <a
|
||||||
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
* href=ttps://cloud.google.com/appengine/docs/standard/java/taskqueue/push/creating-tasks#target>Specifyinig
|
||||||
* the worker service</a>
|
* the worker service</a>
|
||||||
*/
|
*/
|
||||||
private static Task createTask(
|
private Task createTaskWithDelay(
|
||||||
String path,
|
String path,
|
||||||
HttpMethod method,
|
HttpMethod method,
|
||||||
String service,
|
String service,
|
||||||
Multimap<String, String> params,
|
Multimap<String, String> params,
|
||||||
Clock clock,
|
|
||||||
Duration delay) {
|
Duration delay) {
|
||||||
if (delay.isEqual(Duration.ZERO)) {
|
if (delay.isEqual(Duration.ZERO)) {
|
||||||
return createTask(path, method, service, params);
|
return createTask(path, method, service, params);
|
||||||
}
|
}
|
||||||
checkArgument(delay.isLongerThan(Duration.ZERO), "Negative duration is not supported.");
|
checkArgument(delay.isLongerThan(Duration.ZERO), "Negative duration is not supported.");
|
||||||
Instant scheduleTime = Instant.ofEpochMilli(clock.nowUtc().getMillis() + delay.getMillis());
|
|
||||||
return Task.newBuilder(createTask(path, method, service, params))
|
return Task.newBuilder(createTask(path, method, service, params))
|
||||||
.setScheduleTime(
|
.setScheduleTime(Timestamps.fromMillis(clock.nowUtc().plus(delay).getMillis()))
|
||||||
Timestamp.newBuilder()
|
|
||||||
.setSeconds(scheduleTime.getEpochSecond())
|
|
||||||
.setNanos(scheduleTime.getNano())
|
|
||||||
.build())
|
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task createPostTask(String path, String service, Multimap<String, String> params) {
|
public Task createPostTask(String path, String service, Multimap<String, String> params) {
|
||||||
return createTask(path, HttpMethod.POST, service, params);
|
return createTask(path, HttpMethod.POST, service, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Task createGetTask(String path, String service, Multimap<String, String> params) {
|
public Task createGetTask(String path, String service, Multimap<String, String> params) {
|
||||||
return createTask(path, HttpMethod.GET, service, params);
|
return createTask(path, HttpMethod.GET, service, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a {@link Task} via HTTP.POST that will be randomly delayed up to {@code jitterSeconds}.
|
* Create a {@link Task} via HTTP.POST that will be randomly delayed up to {@code jitterSeconds}.
|
||||||
*/
|
*/
|
||||||
public static Task createPostTask(
|
public Task createPostTaskWithJitter(
|
||||||
String path,
|
String path,
|
||||||
String service,
|
String service,
|
||||||
Multimap<String, String> params,
|
Multimap<String, String> params,
|
||||||
Clock clock,
|
|
||||||
Optional<Integer> jitterSeconds) {
|
Optional<Integer> jitterSeconds) {
|
||||||
return createTask(path, HttpMethod.POST, service, params, clock, jitterSeconds);
|
return createTaskWithJitter(path, HttpMethod.POST, service, params, jitterSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a {@link Task} via HTTP.GET that will be randomly delayed up to {@code jitterSeconds}.
|
* Create a {@link Task} via HTTP.GET that will be randomly delayed up to {@code jitterSeconds}.
|
||||||
*/
|
*/
|
||||||
public static Task createGetTask(
|
public Task createGetTaskWithJitter(
|
||||||
String path,
|
String path,
|
||||||
String service,
|
String service,
|
||||||
Multimap<String, String> params,
|
Multimap<String, String> params,
|
||||||
Clock clock,
|
|
||||||
Optional<Integer> jitterSeconds) {
|
Optional<Integer> jitterSeconds) {
|
||||||
return createTask(path, HttpMethod.GET, service, params, clock, jitterSeconds);
|
return createTaskWithJitter(path, HttpMethod.GET, service, params, jitterSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create a {@link Task} via HTTP.POST that will be delayed for {@code delay}. */
|
/** Create a {@link Task} via HTTP.POST that will be delayed for {@code delay}. */
|
||||||
public static Task createPostTask(
|
public Task createPostTaskWithDelay(
|
||||||
String path, String service, Multimap<String, String> params, Clock clock, Duration delay) {
|
String path, String service, Multimap<String, String> params, Duration delay) {
|
||||||
return createTask(path, HttpMethod.POST, service, params, clock, delay);
|
return createTaskWithDelay(path, HttpMethod.POST, service, params, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create a {@link Task} via HTTP.GET that will be delayed for {@code delay}. */
|
/** Create a {@link Task} via HTTP.GET that will be delayed for {@code delay}. */
|
||||||
public static Task createGetTask(
|
public Task createGetTaskWithDelay(
|
||||||
String path, String service, Multimap<String, String> params, Clock clock, Duration delay) {
|
String path, String service, Multimap<String, String> params, Duration delay) {
|
||||||
return createTask(path, HttpMethod.GET, service, params, clock, delay);
|
return createTaskWithDelay(path, HttpMethod.GET, service, params, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class SerializableCloudTasksClient implements Serializable {
|
public abstract static class SerializableCloudTasksClient implements Serializable {
|
||||||
|
|
|
@ -43,10 +43,10 @@ public class CloudTasksUtilsTest {
|
||||||
// Use a LinkedListMultimap to preserve order of the inserted entries for assertion.
|
// Use a LinkedListMultimap to preserve order of the inserted entries for assertion.
|
||||||
private final LinkedListMultimap<String, String> params = LinkedListMultimap.create();
|
private final LinkedListMultimap<String, String> params = LinkedListMultimap.create();
|
||||||
private final SerializableCloudTasksClient mockClient = mock(SerializableCloudTasksClient.class);
|
private final SerializableCloudTasksClient mockClient = mock(SerializableCloudTasksClient.class);
|
||||||
|
private final FakeClock clock = new FakeClock(DateTime.parse("2021-11-08"));
|
||||||
private final CloudTasksUtils cloudTasksUtils =
|
private final CloudTasksUtils cloudTasksUtils =
|
||||||
new CloudTasksUtils(
|
new CloudTasksUtils(
|
||||||
new Retrier(new FakeSleeper(new FakeClock()), 1), "project", "location", mockClient);
|
new Retrier(new FakeSleeper(clock), 1), clock, "project", "location", mockClient);
|
||||||
private final Clock clock = new FakeClock(DateTime.parse("2021-11-08"));
|
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void beforeEach() {
|
void beforeEach() {
|
||||||
|
@ -59,7 +59,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks() {
|
void testSuccess_createGetTasks() {
|
||||||
Task task = CloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
Task task = cloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -70,7 +70,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks() {
|
void testSuccess_createPostTasks() {
|
||||||
Task task = CloudTasksUtils.createPostTask("/the/path", "myservice", params);
|
Task task = cloudTasksUtils.createPostTask("/the/path", "myservice", params);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -84,7 +84,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withNullParams() {
|
void testSuccess_createGetTasks_withNullParams() {
|
||||||
Task task = CloudTasksUtils.createGetTask("/the/path", "myservice", null);
|
Task task = cloudTasksUtils.createGetTask("/the/path", "myservice", null);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -94,7 +94,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withNullParams() {
|
void testSuccess_createPostTasks_withNullParams() {
|
||||||
Task task = CloudTasksUtils.createPostTask("/the/path", "myservice", null);
|
Task task = cloudTasksUtils.createPostTask("/the/path", "myservice", null);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -105,7 +105,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withEmptyParams() {
|
void testSuccess_createGetTasks_withEmptyParams() {
|
||||||
Task task = CloudTasksUtils.createGetTask("/the/path", "myservice", ImmutableMultimap.of());
|
Task task = cloudTasksUtils.createGetTask("/the/path", "myservice", ImmutableMultimap.of());
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -115,7 +115,7 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withEmptyParams() {
|
void testSuccess_createPostTasks_withEmptyParams() {
|
||||||
Task task = CloudTasksUtils.createPostTask("/the/path", "myservice", ImmutableMultimap.of());
|
Task task = cloudTasksUtils.createPostTask("/the/path", "myservice", ImmutableMultimap.of());
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -128,7 +128,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withJitterSeconds() {
|
void testSuccess_createGetTasks_withJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createGetTask("/the/path", "myservice", params, clock, Optional.of(100));
|
cloudTasksUtils.createGetTaskWithJitter("/the/path", "myservice", params, Optional.of(100));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -147,7 +147,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withJitterSeconds() {
|
void testSuccess_createPostTasks_withJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createPostTask("/the/path", "myservice", params, clock, Optional.of(1));
|
cloudTasksUtils.createPostTaskWithJitter("/the/path", "myservice", params, Optional.of(1));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -169,7 +169,8 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withEmptyJitterSeconds() {
|
void testSuccess_createPostTasks_withEmptyJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createPostTask("/the/path", "myservice", params, clock, Optional.empty());
|
cloudTasksUtils.createPostTaskWithJitter(
|
||||||
|
"/the/path", "myservice", params, Optional.empty());
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -184,7 +185,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withEmptyJitterSeconds() {
|
void testSuccess_createGetTasks_withEmptyJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createGetTask("/the/path", "myservice", params, clock, Optional.empty());
|
cloudTasksUtils.createGetTaskWithJitter("/the/path", "myservice", params, Optional.empty());
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -196,7 +197,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withZeroJitterSeconds() {
|
void testSuccess_createPostTasks_withZeroJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createPostTask("/the/path", "myservice", params, clock, Optional.of(0));
|
cloudTasksUtils.createPostTaskWithJitter("/the/path", "myservice", params, Optional.of(0));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -211,7 +212,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withZeroJitterSeconds() {
|
void testSuccess_createGetTasks_withZeroJitterSeconds() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createGetTask("/the/path", "myservice", params, clock, Optional.of(0));
|
cloudTasksUtils.createGetTaskWithJitter("/the/path", "myservice", params, Optional.of(0));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -223,8 +224,8 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withDelay() {
|
void testSuccess_createGetTasks_withDelay() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createGetTask(
|
cloudTasksUtils.createGetTaskWithDelay(
|
||||||
"/the/path", "myservice", params, clock, Duration.standardMinutes(10));
|
"/the/path", "myservice", params, Duration.standardMinutes(10));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -237,8 +238,8 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withDelay() {
|
void testSuccess_createPostTasks_withDelay() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createPostTask(
|
cloudTasksUtils.createPostTaskWithDelay(
|
||||||
"/the/path", "myservice", params, clock, Duration.standardMinutes(10));
|
"/the/path", "myservice", params, Duration.standardMinutes(10));
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -258,8 +259,8 @@ public class CloudTasksUtilsTest {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
CloudTasksUtils.createGetTask(
|
cloudTasksUtils.createGetTaskWithDelay(
|
||||||
"/the/path", "myservice", params, clock, Duration.standardMinutes(-10)));
|
"/the/path", "myservice", params, Duration.standardMinutes(-10)));
|
||||||
assertThat(thrown).hasMessageThat().isEqualTo("Negative duration is not supported.");
|
assertThat(thrown).hasMessageThat().isEqualTo("Negative duration is not supported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,15 +270,15 @@ public class CloudTasksUtilsTest {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
CloudTasksUtils.createGetTask(
|
cloudTasksUtils.createGetTaskWithDelay(
|
||||||
"/the/path", "myservice", params, clock, Duration.standardMinutes(-10)));
|
"/the/path", "myservice", params, Duration.standardMinutes(-10)));
|
||||||
assertThat(thrown).hasMessageThat().isEqualTo("Negative duration is not supported.");
|
assertThat(thrown).hasMessageThat().isEqualTo("Negative duration is not supported.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createPostTasks_withZeroDelay() {
|
void testSuccess_createPostTasks_withZeroDelay() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createPostTask("/the/path", "myservice", params, clock, Duration.ZERO);
|
cloudTasksUtils.createPostTaskWithDelay("/the/path", "myservice", params, Duration.ZERO);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.POST);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri()).isEqualTo("/the/path");
|
||||||
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
assertThat(task.getAppEngineHttpRequest().getAppEngineRouting().getService())
|
||||||
|
@ -292,7 +293,7 @@ public class CloudTasksUtilsTest {
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_createGetTasks_withZeroDelay() {
|
void testSuccess_createGetTasks_withZeroDelay() {
|
||||||
Task task =
|
Task task =
|
||||||
CloudTasksUtils.createGetTask("/the/path", "myservice", params, clock, Duration.ZERO);
|
cloudTasksUtils.createGetTaskWithDelay("/the/path", "myservice", params, Duration.ZERO);
|
||||||
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
assertThat(task.getAppEngineHttpRequest().getHttpMethod()).isEqualTo(HttpMethod.GET);
|
||||||
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
assertThat(task.getAppEngineHttpRequest().getRelativeUri())
|
||||||
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
.isEqualTo("/the/path?key1=val1&key2=val2&key1=val3");
|
||||||
|
@ -305,26 +306,26 @@ public class CloudTasksUtilsTest {
|
||||||
void testFailure_illegalPath() {
|
void testFailure_illegalPath() {
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() -> CloudTasksUtils.createPostTask("the/path", "myservice", params));
|
() -> cloudTasksUtils.createPostTask("the/path", "myservice", params));
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() -> CloudTasksUtils.createPostTask(null, "myservice", params));
|
() -> cloudTasksUtils.createPostTask(null, "myservice", params));
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() -> CloudTasksUtils.createPostTask("", "myservice", params));
|
() -> cloudTasksUtils.createPostTask("", "myservice", params));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_enqueueTask() {
|
void testSuccess_enqueueTask() {
|
||||||
Task task = CloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
Task task = cloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
||||||
cloudTasksUtils.enqueue("test-queue", task);
|
cloudTasksUtils.enqueue("test-queue", task);
|
||||||
verify(mockClient).enqueue("project", "location", "test-queue", task);
|
verify(mockClient).enqueue("project", "location", "test-queue", task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_enqueueTasks_varargs() {
|
void testSuccess_enqueueTasks_varargs() {
|
||||||
Task task1 = CloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
Task task1 = cloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
||||||
Task task2 = CloudTasksUtils.createGetTask("/other/path", "yourservice", params);
|
Task task2 = cloudTasksUtils.createGetTask("/other/path", "yourservice", params);
|
||||||
cloudTasksUtils.enqueue("test-queue", task1, task2);
|
cloudTasksUtils.enqueue("test-queue", task1, task2);
|
||||||
verify(mockClient).enqueue("project", "location", "test-queue", task1);
|
verify(mockClient).enqueue("project", "location", "test-queue", task1);
|
||||||
verify(mockClient).enqueue("project", "location", "test-queue", task2);
|
verify(mockClient).enqueue("project", "location", "test-queue", task2);
|
||||||
|
@ -332,8 +333,8 @@ public class CloudTasksUtilsTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_enqueueTasks_iterable() {
|
void testSuccess_enqueueTasks_iterable() {
|
||||||
Task task1 = CloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
Task task1 = cloudTasksUtils.createGetTask("/the/path", "myservice", params);
|
||||||
Task task2 = CloudTasksUtils.createGetTask("/other/path", "yourservice", params);
|
Task task2 = cloudTasksUtils.createGetTask("/other/path", "yourservice", params);
|
||||||
cloudTasksUtils.enqueue("test-queue", ImmutableList.of(task1, task2));
|
cloudTasksUtils.enqueue("test-queue", ImmutableList.of(task1, task2));
|
||||||
verify(mockClient).enqueue("project", "location", "test-queue", task1);
|
verify(mockClient).enqueue("project", "location", "test-queue", task1);
|
||||||
verify(mockClient).enqueue("project", "location", "test-queue", task2);
|
verify(mockClient).enqueue("project", "location", "test-queue", task2);
|
||||||
|
|
Loading…
Add table
Reference in a new issue