mirror of
https://github.com/google/nomulus.git
synced 2025-05-19 18:59:35 +02:00
Inject CloudTasksUtils to DomainLockUtils (#1519)
* Move enqueueDomainRelock to DomainLockUtils * Rebase and improve PR * Inject CloudTaskUtils to DomainLockUtils
This commit is contained in:
parent
5b7514096f
commit
f7b105e96b
11 changed files with 130 additions and 153 deletions
|
@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableSortedSet;
|
||||||
import com.google.common.flogger.FluentLogger;
|
import com.google.common.flogger.FluentLogger;
|
||||||
import google.registry.config.RegistryConfig.Config;
|
import google.registry.config.RegistryConfig.Config;
|
||||||
import google.registry.model.EppResource;
|
import google.registry.model.EppResource;
|
||||||
import google.registry.model.domain.RegistryLock;
|
|
||||||
import google.registry.model.eppcommon.Trid;
|
import google.registry.model.eppcommon.Trid;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.persistence.VKey;
|
import google.registry.persistence.VKey;
|
||||||
|
@ -152,32 +151,6 @@ public final class AsyncTaskEnqueuer {
|
||||||
.param(PARAM_REQUESTED_TIME, now.toString()));
|
.param(PARAM_REQUESTED_TIME, now.toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked.
|
|
||||||
*
|
|
||||||
* <p>Note: the relockDuration must be present on the lock object.
|
|
||||||
*/
|
|
||||||
public void enqueueDomainRelock(RegistryLock lock) {
|
|
||||||
checkArgument(
|
|
||||||
lock.getRelockDuration().isPresent(),
|
|
||||||
"Lock with ID %s not configured for relock",
|
|
||||||
lock.getRevisionId());
|
|
||||||
enqueueDomainRelock(lock.getRelockDuration().get(), lock.getRevisionId(), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked. */
|
|
||||||
void enqueueDomainRelock(Duration countdown, long lockRevisionId, int previousAttempts) {
|
|
||||||
String backendHostname = appEngineServiceUtils.getServiceHostname("backend");
|
|
||||||
addTaskToQueueWithRetry(
|
|
||||||
asyncActionsPushQueue,
|
|
||||||
TaskOptions.Builder.withUrl(RelockDomainAction.PATH)
|
|
||||||
.method(Method.POST)
|
|
||||||
.header("Host", backendHostname)
|
|
||||||
.param(RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM, String.valueOf(lockRevisionId))
|
|
||||||
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, String.valueOf(previousAttempts))
|
|
||||||
.countdownMillis(countdown.getMillis()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a task to a queue with retrying, to avoid aborting the entire flow over a transient issue
|
* Adds a task to a queue with retrying, to avoid aborting the entire flow over a transient issue
|
||||||
* enqueuing a task.
|
* enqueuing a task.
|
||||||
|
|
|
@ -88,7 +88,6 @@ public class RelockDomainAction implements Runnable {
|
||||||
private final SendEmailService sendEmailService;
|
private final SendEmailService sendEmailService;
|
||||||
private final DomainLockUtils domainLockUtils;
|
private final DomainLockUtils domainLockUtils;
|
||||||
private final Response response;
|
private final Response response;
|
||||||
private final AsyncTaskEnqueuer asyncTaskEnqueuer;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public RelockDomainAction(
|
public RelockDomainAction(
|
||||||
|
@ -99,8 +98,7 @@ public class RelockDomainAction implements Runnable {
|
||||||
@Config("supportEmail") String supportEmail,
|
@Config("supportEmail") String supportEmail,
|
||||||
SendEmailService sendEmailService,
|
SendEmailService sendEmailService,
|
||||||
DomainLockUtils domainLockUtils,
|
DomainLockUtils domainLockUtils,
|
||||||
Response response,
|
Response response) {
|
||||||
AsyncTaskEnqueuer asyncTaskEnqueuer) {
|
|
||||||
this.oldUnlockRevisionId = oldUnlockRevisionId;
|
this.oldUnlockRevisionId = oldUnlockRevisionId;
|
||||||
this.previousAttempts = previousAttempts;
|
this.previousAttempts = previousAttempts;
|
||||||
this.alertRecipientAddress = alertRecipientAddress;
|
this.alertRecipientAddress = alertRecipientAddress;
|
||||||
|
@ -109,7 +107,6 @@ public class RelockDomainAction implements Runnable {
|
||||||
this.sendEmailService = sendEmailService;
|
this.sendEmailService = sendEmailService;
|
||||||
this.domainLockUtils = domainLockUtils;
|
this.domainLockUtils = domainLockUtils;
|
||||||
this.response = response;
|
this.response = response;
|
||||||
this.asyncTaskEnqueuer = asyncTaskEnqueuer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -245,8 +242,7 @@ public class RelockDomainAction implements Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Duration timeBeforeRetry = previousAttempts < ATTEMPTS_BEFORE_SLOWDOWN ? TEN_MINUTES : ONE_HOUR;
|
Duration timeBeforeRetry = previousAttempts < ATTEMPTS_BEFORE_SLOWDOWN ? TEN_MINUTES : ONE_HOUR;
|
||||||
asyncTaskEnqueuer.enqueueDomainRelock(
|
domainLockUtils.enqueueDomainRelock(timeBeforeRetry, oldUnlockRevisionId, previousAttempts + 1);
|
||||||
timeBeforeRetry, oldUnlockRevisionId, previousAttempts + 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendSuccessEmail(RegistryLock oldLock) {
|
private void sendSuccessEmail(RegistryLock oldLock) {
|
||||||
|
|
|
@ -46,6 +46,7 @@ import javax.inject.Singleton;
|
||||||
@Component(
|
@Component(
|
||||||
modules = {
|
modules = {
|
||||||
AuthModule.class,
|
AuthModule.class,
|
||||||
|
CloudTasksUtilsModule.class,
|
||||||
ConfigModule.class,
|
ConfigModule.class,
|
||||||
ConsoleConfigModule.class,
|
ConsoleConfigModule.class,
|
||||||
CredentialModule.class,
|
CredentialModule.class,
|
||||||
|
|
|
@ -15,14 +15,16 @@
|
||||||
package google.registry.tools;
|
package google.registry.tools;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkArgument;
|
import static com.google.common.base.Preconditions.checkArgument;
|
||||||
|
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_ACTIONS;
|
||||||
import static google.registry.model.EppResourceUtils.loadByForeignKeyCached;
|
import static google.registry.model.EppResourceUtils.loadByForeignKeyCached;
|
||||||
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
import static google.registry.persistence.transaction.TransactionManagerFactory.jpaTm;
|
||||||
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import google.registry.batch.AsyncTaskEnqueuer;
|
import google.registry.batch.RelockDomainAction;
|
||||||
import google.registry.config.RegistryConfig.Config;
|
import google.registry.config.RegistryConfig.Config;
|
||||||
import google.registry.model.billing.BillingEvent;
|
import google.registry.model.billing.BillingEvent;
|
||||||
import google.registry.model.billing.BillingEvent.Reason;
|
import google.registry.model.billing.BillingEvent.Reason;
|
||||||
|
@ -32,6 +34,8 @@ import google.registry.model.domain.RegistryLock;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.tld.Registry;
|
import google.registry.model.tld.Registry;
|
||||||
import google.registry.model.tld.RegistryLockDao;
|
import google.registry.model.tld.RegistryLockDao;
|
||||||
|
import google.registry.request.Action.Service;
|
||||||
|
import google.registry.util.CloudTasksUtils;
|
||||||
import google.registry.util.StringGenerator;
|
import google.registry.util.StringGenerator;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
@ -53,16 +57,16 @@ public final class DomainLockUtils {
|
||||||
|
|
||||||
private final StringGenerator stringGenerator;
|
private final StringGenerator stringGenerator;
|
||||||
private final String registryAdminRegistrarId;
|
private final String registryAdminRegistrarId;
|
||||||
private final AsyncTaskEnqueuer asyncTaskEnqueuer;
|
private CloudTasksUtils cloudTasksUtils;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DomainLockUtils(
|
public DomainLockUtils(
|
||||||
@Named("base58StringGenerator") StringGenerator stringGenerator,
|
@Named("base58StringGenerator") StringGenerator stringGenerator,
|
||||||
@Config("registryAdminClientId") String registryAdminRegistrarId,
|
@Config("registryAdminClientId") String registryAdminRegistrarId,
|
||||||
AsyncTaskEnqueuer asyncTaskEnqueuer) {
|
CloudTasksUtils cloudTasksUtils) {
|
||||||
this.stringGenerator = stringGenerator;
|
this.stringGenerator = stringGenerator;
|
||||||
this.registryAdminRegistrarId = registryAdminRegistrarId;
|
this.registryAdminRegistrarId = registryAdminRegistrarId;
|
||||||
this.asyncTaskEnqueuer = asyncTaskEnqueuer;
|
this.cloudTasksUtils = cloudTasksUtils;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -203,10 +207,38 @@ public final class DomainLockUtils {
|
||||||
|
|
||||||
private void submitRelockIfNecessary(RegistryLock lock) {
|
private void submitRelockIfNecessary(RegistryLock lock) {
|
||||||
if (lock.getRelockDuration().isPresent()) {
|
if (lock.getRelockDuration().isPresent()) {
|
||||||
asyncTaskEnqueuer.enqueueDomainRelock(lock);
|
enqueueDomainRelock(lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked.
|
||||||
|
*
|
||||||
|
* <p>Note: the relockDuration must be present on the lock object.
|
||||||
|
*/
|
||||||
|
public void enqueueDomainRelock(RegistryLock lock) {
|
||||||
|
checkArgument(
|
||||||
|
lock.getRelockDuration().isPresent(),
|
||||||
|
"Lock with ID %s not configured for relock",
|
||||||
|
lock.getRevisionId());
|
||||||
|
enqueueDomainRelock(lock.getRelockDuration().get(), lock.getRevisionId(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Enqueues a task to asynchronously re-lock a registry-locked domain after it was unlocked. */
|
||||||
|
public void enqueueDomainRelock(Duration countdown, long lockRevisionId, int previousAttempts) {
|
||||||
|
cloudTasksUtils.enqueue(
|
||||||
|
QUEUE_ASYNC_ACTIONS,
|
||||||
|
cloudTasksUtils.createPostTaskWithDelay(
|
||||||
|
RelockDomainAction.PATH,
|
||||||
|
Service.BACKEND.toString(),
|
||||||
|
ImmutableMultimap.of(
|
||||||
|
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
||||||
|
String.valueOf(lockRevisionId),
|
||||||
|
RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM,
|
||||||
|
String.valueOf(previousAttempts)),
|
||||||
|
countdown));
|
||||||
|
}
|
||||||
|
|
||||||
private void setAsRelock(RegistryLock newLock) {
|
private void setAsRelock(RegistryLock newLock) {
|
||||||
jpaTm()
|
jpaTm()
|
||||||
.transact(
|
.transact(
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
package google.registry.batch;
|
package google.registry.batch;
|
||||||
|
|
||||||
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
|
import static com.google.appengine.api.taskqueue.QueueFactory.getQueue;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
|
||||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_REQUESTED_TIME;
|
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_REQUESTED_TIME;
|
||||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESAVE_TIMES;
|
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESAVE_TIMES;
|
||||||
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESOURCE_KEY;
|
import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESOURCE_KEY;
|
||||||
|
@ -23,19 +22,16 @@ import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_ACTIONS;
|
||||||
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_DELETE;
|
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_DELETE;
|
||||||
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_HOST_RENAME;
|
import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_HOST_RENAME;
|
||||||
import static google.registry.testing.DatabaseHelper.persistActiveContact;
|
import static google.registry.testing.DatabaseHelper.persistActiveContact;
|
||||||
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
|
||||||
import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued;
|
import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued;
|
||||||
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
|
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
|
||||||
import static google.registry.testing.TestLogHandlerUtils.assertLogMessage;
|
import static google.registry.testing.TestLogHandlerUtils.assertLogMessage;
|
||||||
import static org.joda.time.Duration.standardDays;
|
import static org.joda.time.Duration.standardDays;
|
||||||
import static org.joda.time.Duration.standardHours;
|
import static org.joda.time.Duration.standardHours;
|
||||||
import static org.joda.time.Duration.standardSeconds;
|
import static org.joda.time.Duration.standardSeconds;
|
||||||
import static org.junit.Assert.assertThrows;
|
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSortedSet;
|
import com.google.common.collect.ImmutableSortedSet;
|
||||||
import google.registry.model.contact.ContactResource;
|
import google.registry.model.contact.ContactResource;
|
||||||
import google.registry.model.domain.RegistryLock;
|
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.testing.FakeSleeper;
|
import google.registry.testing.FakeSleeper;
|
||||||
|
@ -142,59 +138,4 @@ public class AsyncTaskEnqueuerTest {
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
assertLogMessage(logHandler, Level.INFO, "Ignoring async re-save");
|
assertLogMessage(logHandler, Level.INFO, "Ignoring async re-save");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void testEnqueueRelock() {
|
|
||||||
RegistryLock lock =
|
|
||||||
saveRegistryLock(
|
|
||||||
new RegistryLock.Builder()
|
|
||||||
.setLockCompletionTime(clock.nowUtc())
|
|
||||||
.setUnlockRequestTime(clock.nowUtc())
|
|
||||||
.setUnlockCompletionTime(clock.nowUtc())
|
|
||||||
.isSuperuser(false)
|
|
||||||
.setDomainName("example.tld")
|
|
||||||
.setRepoId("repoId")
|
|
||||||
.setRelockDuration(standardHours(6))
|
|
||||||
.setRegistrarId("TheRegistrar")
|
|
||||||
.setRegistrarPocId("someone@example.com")
|
|
||||||
.setVerificationCode("hi")
|
|
||||||
.build());
|
|
||||||
asyncTaskEnqueuer.enqueueDomainRelock(lock.getRelockDuration().get(), lock.getRevisionId(), 0);
|
|
||||||
assertTasksEnqueued(
|
|
||||||
QUEUE_ASYNC_ACTIONS,
|
|
||||||
new TaskMatcher()
|
|
||||||
.url(RelockDomainAction.PATH)
|
|
||||||
.method("POST")
|
|
||||||
.header("Host", "backend.hostname.fake")
|
|
||||||
.param(
|
|
||||||
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
|
||||||
String.valueOf(lock.getRevisionId()))
|
|
||||||
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, "0")
|
|
||||||
.etaDelta(
|
|
||||||
standardHours(6).minus(standardSeconds(30)),
|
|
||||||
standardHours(6).plus(standardSeconds(30))));
|
|
||||||
}
|
|
||||||
|
|
||||||
@MockitoSettings(strictness = Strictness.LENIENT)
|
|
||||||
@Test
|
|
||||||
void testFailure_enqueueRelock_noDuration() {
|
|
||||||
RegistryLock lockWithoutDuration =
|
|
||||||
saveRegistryLock(
|
|
||||||
new RegistryLock.Builder()
|
|
||||||
.isSuperuser(false)
|
|
||||||
.setDomainName("example.tld")
|
|
||||||
.setRepoId("repoId")
|
|
||||||
.setRegistrarId("TheRegistrar")
|
|
||||||
.setRegistrarPocId("someone@example.com")
|
|
||||||
.setVerificationCode("hi")
|
|
||||||
.build());
|
|
||||||
assertThat(
|
|
||||||
assertThrows(
|
|
||||||
IllegalArgumentException.class,
|
|
||||||
() -> asyncTaskEnqueuer.enqueueDomainRelock(lockWithoutDuration)))
|
|
||||||
.hasMessageThat()
|
|
||||||
.isEqualTo(
|
|
||||||
String.format(
|
|
||||||
"Lock with ID %s not configured for relock", lockWithoutDuration.getRevisionId()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,27 +28,26 @@ import static google.registry.testing.DatabaseHelper.persistResource;
|
||||||
import static google.registry.testing.SqlHelper.getMostRecentVerifiedRegistryLockByRepoId;
|
import static google.registry.testing.SqlHelper.getMostRecentVerifiedRegistryLockByRepoId;
|
||||||
import static google.registry.testing.SqlHelper.getRegistryLockByVerificationCode;
|
import static google.registry.testing.SqlHelper.getRegistryLockByVerificationCode;
|
||||||
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
||||||
import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued;
|
|
||||||
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
|
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT;
|
||||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||||
import static org.joda.time.Duration.standardSeconds;
|
|
||||||
import static org.mockito.Mockito.lenient;
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
|
|
||||||
|
import com.google.cloud.tasks.v2.HttpMethod;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.domain.RegistryLock;
|
import google.registry.model.domain.RegistryLock;
|
||||||
import google.registry.model.host.HostResource;
|
import google.registry.model.host.HostResource;
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
|
import google.registry.testing.CloudTasksHelper.TaskMatcher;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.testing.DualDatabaseTest;
|
import google.registry.testing.DualDatabaseTest;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
|
||||||
import google.registry.testing.TestOfyAndSql;
|
import google.registry.testing.TestOfyAndSql;
|
||||||
import google.registry.testing.UserInfo;
|
import google.registry.testing.UserInfo;
|
||||||
import google.registry.tools.DomainLockUtils;
|
import google.registry.tools.DomainLockUtils;
|
||||||
|
@ -78,12 +77,12 @@ public class RelockDomainActionTest {
|
||||||
|
|
||||||
private final FakeResponse response = new FakeResponse();
|
private final FakeResponse response = new FakeResponse();
|
||||||
private final FakeClock clock = new FakeClock(DateTime.parse("2015-05-18T12:34:56Z"));
|
private final FakeClock clock = new FakeClock(DateTime.parse("2015-05-18T12:34:56Z"));
|
||||||
|
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock);
|
||||||
private final DomainLockUtils domainLockUtils =
|
private final DomainLockUtils domainLockUtils =
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
new DeterministicStringGenerator(Alphabets.BASE_58),
|
new DeterministicStringGenerator(Alphabets.BASE_58),
|
||||||
"adminreg",
|
"adminreg",
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
cloudTasksHelper.getTestCloudTasksUtils());
|
||||||
mock(AppEngineServiceUtils.class), clock, Duration.ZERO));
|
|
||||||
|
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
public final AppEngineExtension appEngineExtension =
|
public final AppEngineExtension appEngineExtension =
|
||||||
|
@ -96,7 +95,6 @@ public class RelockDomainActionTest {
|
||||||
private DomainBase domain;
|
private DomainBase domain;
|
||||||
private RegistryLock oldLock;
|
private RegistryLock oldLock;
|
||||||
@Mock private SendEmailService sendEmailService;
|
@Mock private SendEmailService sendEmailService;
|
||||||
private AsyncTaskEnqueuer asyncTaskEnqueuer;
|
|
||||||
private RelockDomainAction action;
|
private RelockDomainAction action;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
|
@ -118,8 +116,6 @@ public class RelockDomainActionTest {
|
||||||
.when(appEngineServiceUtils.getServiceHostname("backend"))
|
.when(appEngineServiceUtils.getServiceHostname("backend"))
|
||||||
.thenReturn("backend.hostname.fake");
|
.thenReturn("backend.hostname.fake");
|
||||||
|
|
||||||
asyncTaskEnqueuer =
|
|
||||||
AsyncTaskEnqueuerTest.createForTesting(appEngineServiceUtils, clock, Duration.ZERO);
|
|
||||||
action = createAction(oldLock.getRevisionId());
|
action = createAction(oldLock.getRevisionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +154,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
||||||
assertNonTransientFailureEmail(expectedFailureMessage);
|
assertNonTransientFailureEmail(expectedFailureMessage);
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -170,7 +166,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
||||||
assertNonTransientFailureEmail(expectedFailureMessage);
|
assertNonTransientFailureEmail(expectedFailureMessage);
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -180,7 +176,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(SC_NO_CONTENT);
|
assertThat(response.getStatus()).isEqualTo(SC_NO_CONTENT);
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo("Domain example.tld is already manually re-locked, skipping automated re-lock.");
|
.isEqualTo("Domain example.tld is already manually re-locked, skipping automated re-lock.");
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -192,7 +188,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
||||||
assertNonTransientFailureEmail(expectedFailureMessage);
|
assertNonTransientFailureEmail(expectedFailureMessage);
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -207,7 +203,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
.isEqualTo(String.format("Re-lock failed: %s", expectedFailureMessage));
|
||||||
assertNonTransientFailureEmail(expectedFailureMessage);
|
assertNonTransientFailureEmail(expectedFailureMessage);
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -253,7 +249,7 @@ public class RelockDomainActionTest {
|
||||||
assertThat(response.getStatus()).isEqualTo(SC_NO_CONTENT);
|
assertThat(response.getStatus()).isEqualTo(SC_NO_CONTENT);
|
||||||
assertThat(response.getPayload())
|
assertThat(response.getPayload())
|
||||||
.isEqualTo("Domain example.tld is already manually re-locked, skipping automated re-lock.");
|
.isEqualTo("Domain example.tld is already manually re-locked, skipping automated re-lock.");
|
||||||
assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
cloudTasksHelper.assertNoTasksEnqueued(QUEUE_ASYNC_ACTIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -320,17 +316,16 @@ public class RelockDomainActionTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertTaskEnqueued(int numAttempts, long oldUnlockRevisionId, Duration duration) {
|
private void assertTaskEnqueued(int numAttempts, long oldUnlockRevisionId, Duration duration) {
|
||||||
assertTasksEnqueued(
|
cloudTasksHelper.assertTasksEnqueued(
|
||||||
QUEUE_ASYNC_ACTIONS,
|
QUEUE_ASYNC_ACTIONS,
|
||||||
new TaskMatcher()
|
new TaskMatcher()
|
||||||
.url(RelockDomainAction.PATH)
|
.url(RelockDomainAction.PATH)
|
||||||
.method("POST")
|
.method(HttpMethod.POST)
|
||||||
.header("Host", "backend.hostname.fake")
|
|
||||||
.param(
|
.param(
|
||||||
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
||||||
String.valueOf(oldUnlockRevisionId))
|
String.valueOf(oldUnlockRevisionId))
|
||||||
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, String.valueOf(numAttempts))
|
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, String.valueOf(numAttempts))
|
||||||
.etaDelta(duration.minus(standardSeconds(30)), duration.plus(standardSeconds(30))));
|
.scheduleTime(clock.nowUtc().plus(duration)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private RelockDomainAction createAction(Long oldUnlockRevisionId) throws Exception {
|
private RelockDomainAction createAction(Long oldUnlockRevisionId) throws Exception {
|
||||||
|
@ -349,7 +344,6 @@ public class RelockDomainActionTest {
|
||||||
"support@example.com",
|
"support@example.com",
|
||||||
sendEmailService,
|
sendEmailService,
|
||||||
domainLockUtils,
|
domainLockUtils,
|
||||||
response,
|
response);
|
||||||
asyncTaskEnqueuer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,17 +26,16 @@ import static google.registry.testing.DatabaseHelper.persistActiveHost;
|
||||||
import static google.registry.testing.DatabaseHelper.persistResource;
|
import static google.registry.testing.DatabaseHelper.persistResource;
|
||||||
import static google.registry.testing.SqlHelper.getRegistryLockByRevisionId;
|
import static google.registry.testing.SqlHelper.getRegistryLockByRevisionId;
|
||||||
import static google.registry.testing.SqlHelper.getRegistryLockByVerificationCode;
|
import static google.registry.testing.SqlHelper.getRegistryLockByVerificationCode;
|
||||||
import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued;
|
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
import static org.joda.time.Duration.standardDays;
|
import static org.joda.time.Duration.standardDays;
|
||||||
import static org.joda.time.Duration.standardHours;
|
import static org.joda.time.Duration.standardHours;
|
||||||
import static org.joda.time.Duration.standardSeconds;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import com.google.cloud.tasks.v2.HttpMethod;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import google.registry.batch.AsyncTaskEnqueuerTest;
|
|
||||||
import google.registry.batch.RelockDomainAction;
|
import google.registry.batch.RelockDomainAction;
|
||||||
import google.registry.model.billing.BillingEvent;
|
import google.registry.model.billing.BillingEvent;
|
||||||
import google.registry.model.billing.BillingEvent.Reason;
|
import google.registry.model.billing.BillingEvent.Reason;
|
||||||
|
@ -47,12 +46,13 @@ import google.registry.model.host.HostResource;
|
||||||
import google.registry.model.reporting.HistoryEntry;
|
import google.registry.model.reporting.HistoryEntry;
|
||||||
import google.registry.model.tld.Registry;
|
import google.registry.model.tld.Registry;
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
|
import google.registry.testing.CloudTasksHelper.TaskMatcher;
|
||||||
import google.registry.testing.DatabaseHelper;
|
import google.registry.testing.DatabaseHelper;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.testing.DualDatabaseTest;
|
import google.registry.testing.DualDatabaseTest;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.testing.SqlHelper;
|
import google.registry.testing.SqlHelper;
|
||||||
import google.registry.testing.TaskQueueHelper.TaskMatcher;
|
|
||||||
import google.registry.testing.TestOfyAndSql;
|
import google.registry.testing.TestOfyAndSql;
|
||||||
import google.registry.testing.UserInfo;
|
import google.registry.testing.UserInfo;
|
||||||
import google.registry.util.AppEngineServiceUtils;
|
import google.registry.util.AppEngineServiceUtils;
|
||||||
|
@ -62,8 +62,11 @@ import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||||
|
import org.mockito.junit.jupiter.MockitoSettings;
|
||||||
|
import org.mockito.quality.Strictness;
|
||||||
|
|
||||||
/** Unit tests for {@link google.registry.tools.DomainLockUtils}. */
|
/** Unit tests for {@link google.registry.tools.DomainLockUtils}. */
|
||||||
@DualDatabaseTest
|
@DualDatabaseTest
|
||||||
|
@ -74,6 +77,7 @@ public final class DomainLockUtilsTest {
|
||||||
|
|
||||||
private final FakeClock clock = new FakeClock(DateTime.now(DateTimeZone.UTC));
|
private final FakeClock clock = new FakeClock(DateTime.now(DateTimeZone.UTC));
|
||||||
private DomainLockUtils domainLockUtils;
|
private DomainLockUtils domainLockUtils;
|
||||||
|
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock);
|
||||||
|
|
||||||
@RegisterExtension
|
@RegisterExtension
|
||||||
public final AppEngineExtension appEngineExtension =
|
public final AppEngineExtension appEngineExtension =
|
||||||
|
@ -98,8 +102,7 @@ public final class DomainLockUtilsTest {
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
new DeterministicStringGenerator(Alphabets.BASE_58),
|
new DeterministicStringGenerator(Alphabets.BASE_58),
|
||||||
"adminreg",
|
"adminreg",
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
cloudTasksHelper.getTestCloudTasksUtils());
|
||||||
appEngineServiceUtils, clock, standardSeconds(90)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -265,19 +268,17 @@ public final class DomainLockUtilsTest {
|
||||||
domainLockUtils.saveNewRegistryUnlockRequest(
|
domainLockUtils.saveNewRegistryUnlockRequest(
|
||||||
DOMAIN_NAME, "TheRegistrar", false, Optional.of(standardHours(6)));
|
DOMAIN_NAME, "TheRegistrar", false, Optional.of(standardHours(6)));
|
||||||
domainLockUtils.verifyAndApplyUnlock(lock.getVerificationCode(), false);
|
domainLockUtils.verifyAndApplyUnlock(lock.getVerificationCode(), false);
|
||||||
assertTasksEnqueued(
|
cloudTasksHelper.assertTasksEnqueued(
|
||||||
QUEUE_ASYNC_ACTIONS,
|
QUEUE_ASYNC_ACTIONS,
|
||||||
new TaskMatcher()
|
new TaskMatcher()
|
||||||
.url(RelockDomainAction.PATH)
|
.url(RelockDomainAction.PATH)
|
||||||
.method("POST")
|
.method(HttpMethod.POST)
|
||||||
.header("Host", "backend.hostname.fake")
|
.service("backend")
|
||||||
.param(
|
.param(
|
||||||
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
||||||
String.valueOf(lock.getRevisionId()))
|
String.valueOf(lock.getRevisionId()))
|
||||||
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, "0")
|
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, "0")
|
||||||
.etaDelta(
|
.scheduleTime(clock.nowUtc().plus(lock.getRelockDuration().get())));
|
||||||
standardHours(6).minus(standardSeconds(30)),
|
|
||||||
standardDays(6).plus(standardSeconds(30))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestOfyAndSql
|
@TestOfyAndSql
|
||||||
|
@ -477,6 +478,59 @@ public final class DomainLockUtilsTest {
|
||||||
assertNoDomainChanges();
|
assertNoDomainChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestOfyAndSql
|
||||||
|
void testEnqueueRelock() {
|
||||||
|
RegistryLock lock =
|
||||||
|
saveRegistryLock(
|
||||||
|
new RegistryLock.Builder()
|
||||||
|
.setLockCompletionTime(clock.nowUtc())
|
||||||
|
.setUnlockRequestTime(clock.nowUtc())
|
||||||
|
.setUnlockCompletionTime(clock.nowUtc())
|
||||||
|
.isSuperuser(false)
|
||||||
|
.setDomainName("example.tld")
|
||||||
|
.setRepoId("repoId")
|
||||||
|
.setRelockDuration(standardHours(6))
|
||||||
|
.setRegistrarId("TheRegistrar")
|
||||||
|
.setRegistrarPocId("someone@example.com")
|
||||||
|
.setVerificationCode("hi")
|
||||||
|
.build());
|
||||||
|
domainLockUtils.enqueueDomainRelock(lock.getRelockDuration().get(), lock.getRevisionId(), 0);
|
||||||
|
cloudTasksHelper.assertTasksEnqueued(
|
||||||
|
QUEUE_ASYNC_ACTIONS,
|
||||||
|
new CloudTasksHelper.TaskMatcher()
|
||||||
|
.url(RelockDomainAction.PATH)
|
||||||
|
.method(HttpMethod.POST)
|
||||||
|
.service("backend")
|
||||||
|
.param(
|
||||||
|
RelockDomainAction.OLD_UNLOCK_REVISION_ID_PARAM,
|
||||||
|
String.valueOf(lock.getRevisionId()))
|
||||||
|
.param(RelockDomainAction.PREVIOUS_ATTEMPTS_PARAM, "0")
|
||||||
|
.scheduleTime(clock.nowUtc().plus(lock.getRelockDuration().get())));
|
||||||
|
}
|
||||||
|
|
||||||
|
@MockitoSettings(strictness = Strictness.LENIENT)
|
||||||
|
@TestOfyAndSql
|
||||||
|
void testFailure_enqueueRelock_noDuration() {
|
||||||
|
RegistryLock lockWithoutDuration =
|
||||||
|
saveRegistryLock(
|
||||||
|
new RegistryLock.Builder()
|
||||||
|
.isSuperuser(false)
|
||||||
|
.setDomainName("example.tld")
|
||||||
|
.setRepoId("repoId")
|
||||||
|
.setRegistrarId("TheRegistrar")
|
||||||
|
.setRegistrarPocId("someone@example.com")
|
||||||
|
.setVerificationCode("hi")
|
||||||
|
.build());
|
||||||
|
assertThat(
|
||||||
|
Assert.assertThrows(
|
||||||
|
IllegalArgumentException.class,
|
||||||
|
() -> domainLockUtils.enqueueDomainRelock(lockWithoutDuration)))
|
||||||
|
.hasMessageThat()
|
||||||
|
.isEqualTo(
|
||||||
|
String.format(
|
||||||
|
"Lock with ID %s not configured for relock", lockWithoutDuration.getRevisionId()));
|
||||||
|
}
|
||||||
|
|
||||||
private void verifyProperlyLockedDomain(boolean isAdmin) {
|
private void verifyProperlyLockedDomain(boolean isAdmin) {
|
||||||
assertThat(loadByEntity(domain).getStatusValues())
|
assertThat(loadByEntity(domain).getStatusValues())
|
||||||
.containsAtLeastElementsIn(REGISTRY_LOCK_STATUSES);
|
.containsAtLeastElementsIn(REGISTRY_LOCK_STATUSES);
|
||||||
|
|
|
@ -24,19 +24,16 @@ import static google.registry.testing.DatabaseHelper.persistResource;
|
||||||
import static google.registry.testing.SqlHelper.getMostRecentRegistryLockByRepoId;
|
import static google.registry.testing.SqlHelper.getMostRecentRegistryLockByRepoId;
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import google.registry.batch.AsyncTaskEnqueuerTest;
|
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.registrar.Registrar.Type;
|
import google.registry.model.registrar.Registrar.Type;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.util.AppEngineServiceUtils;
|
|
||||||
import google.registry.util.StringGenerator.Alphabets;
|
import google.registry.util.StringGenerator.Alphabets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.joda.time.Duration;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -52,8 +49,7 @@ class LockDomainCommandTest extends CommandTestCase<LockDomainCommand> {
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
new DeterministicStringGenerator(Alphabets.BASE_58),
|
new DeterministicStringGenerator(Alphabets.BASE_58),
|
||||||
"adminreg",
|
"adminreg",
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
new CloudTasksHelper(fakeClock).getTestCloudTasksUtils());
|
||||||
mock(AppEngineServiceUtils.class), fakeClock, Duration.ZERO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -25,21 +25,18 @@ import static google.registry.testing.DatabaseHelper.persistResource;
|
||||||
import static google.registry.testing.SqlHelper.getMostRecentRegistryLockByRepoId;
|
import static google.registry.testing.SqlHelper.getMostRecentRegistryLockByRepoId;
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
|
|
||||||
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 google.registry.batch.AsyncTaskEnqueuerTest;
|
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.domain.RegistryLock;
|
import google.registry.model.domain.RegistryLock;
|
||||||
import google.registry.model.registrar.Registrar.Type;
|
import google.registry.model.registrar.Registrar.Type;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.util.AppEngineServiceUtils;
|
|
||||||
import google.registry.util.StringGenerator.Alphabets;
|
import google.registry.util.StringGenerator.Alphabets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.joda.time.Duration;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
@ -55,8 +52,7 @@ class UnlockDomainCommandTest extends CommandTestCase<UnlockDomainCommand> {
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
new DeterministicStringGenerator(Alphabets.BASE_58),
|
new DeterministicStringGenerator(Alphabets.BASE_58),
|
||||||
"adminreg",
|
"adminreg",
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
new CloudTasksHelper(fakeClock).getTestCloudTasksUtils());
|
||||||
mock(AppEngineServiceUtils.class), fakeClock, Duration.ZERO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private DomainBase persistLockedDomain(String domainName, String registrarId) {
|
private DomainBase persistLockedDomain(String domainName, String registrarId) {
|
||||||
|
|
|
@ -26,7 +26,6 @@ import static google.registry.testing.SqlHelper.getRegistryLockByVerificationCod
|
||||||
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
import static google.registry.testing.SqlHelper.saveRegistryLock;
|
||||||
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
import static google.registry.tools.LockOrUnlockDomainCommand.REGISTRY_LOCK_STATUSES;
|
||||||
import static google.registry.ui.server.registrar.RegistryLockGetActionTest.userFromRegistrarContact;
|
import static google.registry.ui.server.registrar.RegistryLockGetActionTest.userFromRegistrarContact;
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
@ -35,7 +34,6 @@ import com.google.appengine.api.users.User;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import google.registry.batch.AsyncTaskEnqueuerTest;
|
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
import google.registry.model.domain.RegistryLock;
|
import google.registry.model.domain.RegistryLock;
|
||||||
import google.registry.request.JsonActionRunner;
|
import google.registry.request.JsonActionRunner;
|
||||||
|
@ -47,10 +45,10 @@ import google.registry.request.auth.AuthenticatedRegistrarAccessor;
|
||||||
import google.registry.request.auth.AuthenticatedRegistrarAccessor.Role;
|
import google.registry.request.auth.AuthenticatedRegistrarAccessor.Role;
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
import google.registry.request.auth.UserAuthInfo;
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.tools.DomainLockUtils;
|
import google.registry.tools.DomainLockUtils;
|
||||||
import google.registry.util.AppEngineServiceUtils;
|
|
||||||
import google.registry.util.EmailMessage;
|
import google.registry.util.EmailMessage;
|
||||||
import google.registry.util.SendEmailService;
|
import google.registry.util.SendEmailService;
|
||||||
import google.registry.util.StringGenerator.Alphabets;
|
import google.registry.util.StringGenerator.Alphabets;
|
||||||
|
@ -469,8 +467,7 @@ final class RegistryLockPostActionTest {
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
new DeterministicStringGenerator(Alphabets.BASE_58),
|
new DeterministicStringGenerator(Alphabets.BASE_58),
|
||||||
"adminreg",
|
"adminreg",
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
new CloudTasksHelper(clock).getTestCloudTasksUtils());
|
||||||
mock(AppEngineServiceUtils.class), clock, Duration.ZERO));
|
|
||||||
return new RegistryLockPostAction(
|
return new RegistryLockPostAction(
|
||||||
mockRequest,
|
mockRequest,
|
||||||
jsonActionRunner,
|
jsonActionRunner,
|
||||||
|
|
|
@ -33,7 +33,6 @@ import com.google.appengine.api.users.User;
|
||||||
import com.google.appengine.api.users.UserService;
|
import com.google.appengine.api.users.UserService;
|
||||||
import com.google.appengine.api.users.UserServiceFactory;
|
import com.google.appengine.api.users.UserServiceFactory;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import google.registry.batch.AsyncTaskEnqueuerTest;
|
|
||||||
import google.registry.model.billing.BillingEvent;
|
import google.registry.model.billing.BillingEvent;
|
||||||
import google.registry.model.billing.BillingEvent.Reason;
|
import google.registry.model.billing.BillingEvent.Reason;
|
||||||
import google.registry.model.domain.DomainBase;
|
import google.registry.model.domain.DomainBase;
|
||||||
|
@ -47,13 +46,13 @@ import google.registry.request.auth.AuthResult;
|
||||||
import google.registry.request.auth.UserAuthInfo;
|
import google.registry.request.auth.UserAuthInfo;
|
||||||
import google.registry.security.XsrfTokenManager;
|
import google.registry.security.XsrfTokenManager;
|
||||||
import google.registry.testing.AppEngineExtension;
|
import google.registry.testing.AppEngineExtension;
|
||||||
|
import google.registry.testing.CloudTasksHelper;
|
||||||
import google.registry.testing.DatabaseHelper;
|
import google.registry.testing.DatabaseHelper;
|
||||||
import google.registry.testing.DeterministicStringGenerator;
|
import google.registry.testing.DeterministicStringGenerator;
|
||||||
import google.registry.testing.FakeClock;
|
import google.registry.testing.FakeClock;
|
||||||
import google.registry.testing.FakeResponse;
|
import google.registry.testing.FakeResponse;
|
||||||
import google.registry.testing.UserInfo;
|
import google.registry.testing.UserInfo;
|
||||||
import google.registry.tools.DomainLockUtils;
|
import google.registry.tools.DomainLockUtils;
|
||||||
import google.registry.util.AppEngineServiceUtils;
|
|
||||||
import google.registry.util.StringGenerator;
|
import google.registry.util.StringGenerator;
|
||||||
import google.registry.util.StringGenerator.Alphabets;
|
import google.registry.util.StringGenerator.Alphabets;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -86,6 +85,7 @@ final class RegistryLockVerifyActionTest {
|
||||||
private DomainBase domain;
|
private DomainBase domain;
|
||||||
private AuthResult authResult;
|
private AuthResult authResult;
|
||||||
private RegistryLockVerifyAction action;
|
private RegistryLockVerifyAction action;
|
||||||
|
private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(fakeClock);
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void beforeEach() {
|
void beforeEach() {
|
||||||
|
@ -329,10 +329,7 @@ final class RegistryLockVerifyActionTest {
|
||||||
RegistryLockVerifyAction action =
|
RegistryLockVerifyAction action =
|
||||||
new RegistryLockVerifyAction(
|
new RegistryLockVerifyAction(
|
||||||
new DomainLockUtils(
|
new DomainLockUtils(
|
||||||
stringGenerator,
|
stringGenerator, "adminreg", cloudTasksHelper.getTestCloudTasksUtils()),
|
||||||
"adminreg",
|
|
||||||
AsyncTaskEnqueuerTest.createForTesting(
|
|
||||||
mock(AppEngineServiceUtils.class), fakeClock, Duration.ZERO)),
|
|
||||||
lockVerificationCode,
|
lockVerificationCode,
|
||||||
isLock);
|
isLock);
|
||||||
authResult = AuthResult.create(AuthLevel.USER, UserAuthInfo.create(user, false));
|
authResult = AuthResult.create(AuthLevel.USER, UserAuthInfo.create(user, false));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue