From 6d7f4ee6c6d090e70904d89a4108ef617222b845 Mon Sep 17 00:00:00 2001 From: Lai Jiang Date: Fri, 12 Aug 2022 14:56:53 -0400 Subject: [PATCH] Remove InjectExtension (#1739) It is only used to set the clock used by Ofy, and it admits itself being an ugly hack... Also applied IntelliJ suggestions on touched files. --- .../domain/DomainTransferApproveFlow.java | 20 +- .../domain/DomainTransferRequestFlow.java | 29 ++- .../registry/batch/AsyncTaskEnqueuerTest.java | 5 +- .../batch/DeleteExpiredDomainsActionTest.java | 7 +- .../batch/ResaveEntityActionTest.java | 8 +- ...ertificateNotificationEmailActionTest.java | 11 +- .../WipeOutContactHistoryPiiActionTest.java | 2 - .../google/registry/dns/DnsInjectionTest.java | 5 - .../dns/PublishDnsUpdatesActionTest.java | 4 - .../writer/dnsupdate/DnsUpdateWriterTest.java | 23 +- .../export/ExportDomainListsActionTest.java | 12 +- .../export/SyncGroupMembersActionTest.java | 6 +- .../export/sheet/SyncRegistrarsSheetTest.java | 7 +- .../registry/flows/EppPointInTimeTest.java | 5 - .../google/registry/flows/EppTestCase.java | 181 +++++++-------- .../google/registry/flows/FlowTestCase.java | 24 +- .../google/registry/model/EntityTestCase.java | 10 - .../registry/model/EppResourceUtilsTest.java | 5 - .../PollMessageExternalKeyConverterTest.java | 5 - .../registry/model/tld/RegistryTest.java | 3 - .../transaction/TransactionManagerTest.java | 5 - .../registry/rdap/RdapActionBaseTestCase.java | 10 +- .../registry/rdap/RdapJsonFormatterTest.java | 12 +- .../rde/PendingDepositCheckerTest.java | 5 - .../AuthenticatedRegistrarAccessorTest.java | 5 +- .../security/XsrfTokenManagerTest.java | 5 +- .../java/google/registry/server/Fixture.java | 12 - .../registry/testing/InjectExtension.java | 211 ------------------ .../registry/tmch/LordnTaskUtilsTest.java | 7 +- .../registry/tmch/NordnUploadActionTest.java | 14 +- .../registry/tmch/TmchXmlSignatureTest.java | 3 - .../tools/AckPollMessagesCommandTest.java | 8 +- .../tools/CountDomainsCommandTest.java | 6 - .../tools/CreateRegistrarCommandTest.java | 5 - .../tools/EnqueuePollMessageCommandTest.java | 6 - .../GenerateEscrowDepositCommandTest.java | 4 - .../registry/tools/GhostrydeCommandTest.java | 8 +- .../tools/ListCursorsCommandTest.java | 6 - .../tools/SetNumInstancesCommandTest.java | 6 +- .../tools/UnrenewDomainCommandTest.java | 6 - .../tools/UpdateDomainCommandTest.java | 6 - .../tools/server/CreateGroupsActionTest.java | 3 - .../RefreshDnsForAllDomainsActionTest.java | 11 +- .../RegistrarSettingsActionTestCase.java | 5 - .../registry/whois/WhoisActionTest.java | 12 +- .../registry/whois/WhoisHttpActionTest.java | 5 - 46 files changed, 153 insertions(+), 605 deletions(-) delete mode 100644 core/src/test/java/google/registry/testing/InjectExtension.java diff --git a/core/src/main/java/google/registry/flows/domain/DomainTransferApproveFlow.java b/core/src/main/java/google/registry/flows/domain/DomainTransferApproveFlow.java index 94bddeea9..3d6c90131 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainTransferApproveFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainTransferApproveFlow.java @@ -56,7 +56,6 @@ import google.registry.model.domain.DomainHistory.DomainHistoryId; import google.registry.model.domain.GracePeriod; import google.registry.model.domain.metadata.MetadataExtension; import google.registry.model.domain.rgp.GracePeriodStatus; -import google.registry.model.domain.token.AllocationToken; import google.registry.model.domain.token.AllocationTokenExtension; import google.registry.model.eppcommon.AuthInfo; import google.registry.model.eppinput.EppInput; @@ -129,15 +128,12 @@ public final class DomainTransferApproveFlow implements TransactionalFlow { extensionManager.validate(); DateTime now = tm().getTransactionTime(); Domain existingDomain = loadAndVerifyExistence(Domain.class, targetId, now); - // Currently we do not do anything with this allocation token, but just want it loaded and - // available in this flow in case we use it in the future - Optional allocationToken = - allocationTokenFlowUtils.verifyAllocationTokenIfPresent( - existingDomain, - Registry.get(existingDomain.getTld()), - registrarId, - now, - eppInput.getSingleExtension(AllocationTokenExtension.class)); + allocationTokenFlowUtils.verifyAllocationTokenIfPresent( + existingDomain, + Registry.get(existingDomain.getTld()), + registrarId, + now, + eppInput.getSingleExtension(AllocationTokenExtension.class)); verifyOptionalAuthInfo(authInfo, existingDomain); verifyHasPendingTransfer(existingDomain); verifyResourceOwnership(registrarId, existingDomain); @@ -182,9 +178,9 @@ public final class DomainTransferApproveFlow implements TransactionalFlow { getOnlyElement(existingDomain.getGracePeriodsOfType(GracePeriodStatus.AUTO_RENEW), null); if (autorenewGrace != null) { // During a normal transfer, if the domain is in the auto-renew grace period, the auto-renew - // billing event is cancelled and the gaining registrar is charged for the one year renewal. + // billing event is cancelled and the gaining registrar is charged for the one-year renewal. // But, if the superuser extension is used to request a transfer without an additional year - // then the gaining registrar is not charged for the one year renewal and the losing registrar + // then the gaining registrar is not charged for the one-year renewal and the losing registrar // still needs to be charged for the auto-renew. if (billingEvent.isPresent()) { entitiesToSave.add( diff --git a/core/src/main/java/google/registry/flows/domain/DomainTransferRequestFlow.java b/core/src/main/java/google/registry/flows/domain/DomainTransferRequestFlow.java index ad1ea37c1..1c5bd5dc7 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainTransferRequestFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainTransferRequestFlow.java @@ -62,7 +62,6 @@ import google.registry.model.domain.fee.FeeTransferCommandExtension; import google.registry.model.domain.fee.FeeTransformResponseExtension; import google.registry.model.domain.metadata.MetadataExtension; import google.registry.model.domain.superuser.DomainTransferRequestSuperuserExtension; -import google.registry.model.domain.token.AllocationToken; import google.registry.model.domain.token.AllocationTokenExtension; import google.registry.model.eppcommon.AuthInfo; import google.registry.model.eppcommon.StatusValue; @@ -169,15 +168,12 @@ public final class DomainTransferRequestFlow implements TransactionalFlow { extensionManager.validate(); DateTime now = tm().getTransactionTime(); Domain existingDomain = loadAndVerifyExistence(Domain.class, targetId, now); - // Currently we do not do anything with this allocation token, but just want it loaded and - // available in this flow in case we use it in the future - Optional allocationToken = - allocationTokenFlowUtils.verifyAllocationTokenIfPresent( - existingDomain, - Registry.get(existingDomain.getTld()), - gainingClientId, - now, - eppInput.getSingleExtension(AllocationTokenExtension.class)); + allocationTokenFlowUtils.verifyAllocationTokenIfPresent( + existingDomain, + Registry.get(existingDomain.getTld()), + gainingClientId, + now, + eppInput.getSingleExtension(AllocationTokenExtension.class)); Optional superuserExtension = eppInput.getSingleExtension(DomainTransferRequestSuperuserExtension.class); Period period = @@ -210,9 +206,12 @@ public final class DomainTransferRequestFlow implements TransactionalFlow { .setId(domainHistoryKey.getId()) .setOtherRegistrarId(existingDomain.getCurrentSponsorRegistrarId()); DateTime automaticTransferTime = - superuserExtension.isPresent() - ? now.plusDays(superuserExtension.get().getAutomaticTransferLength()) - : now.plus(registry.getAutomaticTransferLength()); + superuserExtension + .map( + domainTransferRequestSuperuserExtension -> + now.plusDays( + domainTransferRequestSuperuserExtension.getAutomaticTransferLength())) + .orElseGet(() -> now.plus(registry.getAutomaticTransferLength())); // If the domain will be in the auto-renew grace period at the moment of transfer, the transfer // will subsume the autorenew, so we don't add the normal extra year from the transfer. // The gaining registrar is still billed for the extra year; the losing registrar will get a @@ -325,7 +324,7 @@ public final class DomainTransferRequestFlow implements TransactionalFlow { * *

Even if not required, this policy is desirable because it dramatically simplifies the logic * in transfer flows. Registrars appear to never request 2+ year transfers in practice, and they - * can always decompose an multi-year transfer into a 1-year transfer followed by a manual renewal + * can always decompose a multi-year transfer into a 1-year transfer followed by a manual renewal * afterwards. The EPP Domain RFC, * section 3.2.4 says about EPP transfer periods that "the number of units available MAY be * subject to limits imposed by the server" so we're just limiting the units to one. @@ -370,7 +369,7 @@ public final class DomainTransferRequestFlow implements TransactionalFlow { private DomainTransferResponse createResponse( Period period, Domain existingDomain, Domain newDomain, DateTime now) { // If the registration were approved this instant, this is what the new expiration would be, - // because we cap at 10 years from the moment of approval. This is different than the server + // because we cap at 10 years from the moment of approval. This is different from the server // approval new expiration time, which is capped at 10 years from the server approve time. DateTime approveNowExtendedRegistrationTime = computeExDateForApprovalTime(existingDomain, now, period); diff --git a/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java b/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java index f9441388e..f26729662 100644 --- a/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java +++ b/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java @@ -33,7 +33,6 @@ import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; -import google.registry.testing.InjectExtension; import google.registry.util.CapturingLogHandler; import google.registry.util.CloudTasksUtils; import google.registry.util.JdkLoggerConfig; @@ -57,12 +56,10 @@ public class AsyncTaskEnqueuerTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private AsyncTaskEnqueuer asyncTaskEnqueuer; private final CapturingLogHandler logHandler = new CapturingLogHandler(); private final FakeClock clock = new FakeClock(DateTime.parse("2015-05-18T12:34:56Z")); - private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); + private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java b/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java index 06b249092..81cce4cda 100644 --- a/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java +++ b/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java @@ -34,7 +34,6 @@ import google.registry.model.billing.BillingEvent.Flag; import google.registry.model.billing.BillingEvent.Reason; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; -import google.registry.model.ofy.Ofy; import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; import google.registry.persistence.transaction.QueryComposer.Comparator; @@ -43,7 +42,6 @@ import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeLockHandler; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import java.util.Optional; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -59,14 +57,11 @@ class DeleteExpiredDomainsActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private final FakeResponse response = new FakeResponse(); private DeleteExpiredDomainsAction action; @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); createTld("tld"); EppController eppController = DaggerEppTestComponent.builder() @@ -103,7 +98,7 @@ class DeleteExpiredDomainsActionTest { // A non-autorenewing domain that is past its expiration time and should be deleted. // (This is the only one that needs a full set of subsidiary resources, for the delete flow to - // to operate on.) + // operate on.) Domain pendingExpirationDomain = persistNonAutorenewingDomain("fizz.tld"); assertThat(loadByEntity(pendingExpirationDomain).getStatusValues()) diff --git a/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java b/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java index e5605c10d..ef75dda1b 100644 --- a/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java +++ b/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java @@ -20,7 +20,6 @@ import static google.registry.batch.AsyncTaskEnqueuer.PARAM_RESOURCE_KEY; import static google.registry.batch.AsyncTaskEnqueuer.QUEUE_ASYNC_ACTIONS; import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.loadByEntity; -import static google.registry.testing.DatabaseHelper.newDomain; import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistDomainWithDependentResources; import static google.registry.testing.DatabaseHelper.persistDomainWithPendingTransfer; @@ -35,14 +34,12 @@ import google.registry.model.domain.Domain; import google.registry.model.domain.GracePeriod; import google.registry.model.domain.rgp.GracePeriodStatus; import google.registry.model.eppcommon.StatusValue; -import google.registry.model.ofy.Ofy; import google.registry.request.Response; 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.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -62,16 +59,13 @@ public class ResaveEntityActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @Mock private Response response; private final FakeClock clock = new FakeClock(DateTime.parse("2016-02-11T10:00:00Z")); private AsyncTaskEnqueuer asyncTaskEnqueuer; - private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); + private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); asyncTaskEnqueuer = AsyncTaskEnqueuerTest.createForTesting( cloudTasksHelper.getTestCloudTasksUtils(), clock, Duration.ZERO); diff --git a/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java b/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java index c4e0ba1f9..99ac82f58 100644 --- a/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java +++ b/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java @@ -15,7 +15,6 @@ package google.registry.batch; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth8.assertThat; import static google.registry.testing.AppEngineExtension.makeRegistrar1; import static google.registry.testing.DatabaseHelper.loadByEntity; import static google.registry.testing.DatabaseHelper.persistResource; @@ -40,7 +39,6 @@ import google.registry.model.registrar.RegistrarPoc.Type; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import google.registry.util.SelfSignedCaCertificate; import google.registry.util.SendEmailService; import java.security.cert.X509Certificate; @@ -57,11 +55,11 @@ class SendExpiringCertificateNotificationEmailActionTest { private static final String EXPIRATION_WARNING_EMAIL_BODY_TEXT = " Dear %1$s,\n" - + "\n" + + '\n' + "We would like to inform you that your %2$s certificate will expire at %3$s." - + "\n" + + '\n' + " Kind update your account using the following steps: " - + "\n" + + '\n' + " 1. Navigate to support and login using your %4$s@registry.example credentials.\n" + " 2. Click Settings -> Privacy on the top left corner.\n" + " 3. Click Edit and enter certificate string." @@ -75,7 +73,6 @@ class SendExpiringCertificateNotificationEmailActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2021-05-24T20:21:22Z")); private final SendEmailService sendEmailService = mock(SendEmailService.class); private CertificateChecker certificateChecker; @@ -708,7 +705,7 @@ class SendExpiringCertificateNotificationEmailActionTest { } /** Returns persisted sample contacts with a customized contact email type. */ - private ImmutableList persistSampleContacts( + private static ImmutableList persistSampleContacts( Registrar registrar, RegistrarPoc.Type emailType) { return persistSimpleResources( ImmutableList.of( diff --git a/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java b/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java index 0096ec8a2..c6e5ab4ad 100644 --- a/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java +++ b/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java @@ -38,7 +38,6 @@ import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -102,7 +101,6 @@ class WipeOutContactHistoryPiiActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2021-08-26T20:21:22Z")); private FakeResponse response; diff --git a/core/src/test/java/google/registry/dns/DnsInjectionTest.java b/core/src/test/java/google/registry/dns/DnsInjectionTest.java index 6b297feb4..49cb32498 100644 --- a/core/src/test/java/google/registry/dns/DnsInjectionTest.java +++ b/core/src/test/java/google/registry/dns/DnsInjectionTest.java @@ -24,13 +24,11 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import google.registry.model.ofy.Ofy; import google.registry.request.HttpException.NotFoundException; import google.registry.request.RequestModule; import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper.CloudTasksHelperModule; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import java.io.PrintWriter; import java.io.StringWriter; import javax.servlet.http.HttpServletRequest; @@ -47,8 +45,6 @@ public final class DnsInjectionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); private final StringWriter httpOutput = new StringWriter(); @@ -58,7 +54,6 @@ public final class DnsInjectionTest { @BeforeEach void beforeEach() throws Exception { - inject.setStaticField(Ofy.class, "clock", clock); when(rsp.getWriter()).thenReturn(new PrintWriter(httpOutput)); component = DaggerDnsTestComponent.builder() diff --git a/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java b/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java index 536149c3b..d5ae645fd 100644 --- a/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java +++ b/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java @@ -45,7 +45,6 @@ import google.registry.dns.DnsMetrics.CommitStatus; import google.registry.dns.DnsMetrics.PublishStatus; import google.registry.dns.writer.DnsWriter; import google.registry.model.domain.Domain; -import google.registry.model.ofy.Ofy; import google.registry.model.tld.Registry; import google.registry.request.HttpException.ServiceUnavailableException; import google.registry.request.lock.LockHandler; @@ -55,7 +54,6 @@ import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; import google.registry.testing.FakeLockHandler; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import java.util.Optional; import java.util.Set; import org.joda.time.DateTime; @@ -71,7 +69,6 @@ public class PublishDnsUpdatesActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("1971-01-01TZ")); private final FakeResponse response = new FakeResponse(); private final FakeLockHandler lockHandler = new FakeLockHandler(true); @@ -83,7 +80,6 @@ public class PublishDnsUpdatesActionTest { @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); createTld("xn--q9jyb4c"); persistResource( Registry.get("xn--q9jyb4c") diff --git a/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java b/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java index 2e37b4ce7..f7c3e0903 100644 --- a/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java +++ b/core/src/test/java/google/registry/dns/writer/dnsupdate/DnsUpdateWriterTest.java @@ -39,13 +39,12 @@ import google.registry.model.domain.Domain; import google.registry.model.domain.secdns.DelegationSignerData; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; -import google.registry.model.ofy.Ofy; import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -76,8 +75,6 @@ public class DnsUpdateWriterTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @Mock private DnsMessageTransport mockResolver; @Captor private ArgumentCaptor updateCaptor; @@ -87,8 +84,6 @@ public class DnsUpdateWriterTest { @BeforeEach void beforeEach() throws Exception { - inject.setStaticField(Ofy.class, "clock", clock); - createTld("tld"); when(mockResolver.send(any(Update.class))).thenReturn(messageWithResponseCode(Rcode.NOERROR)); @@ -418,23 +413,23 @@ public class DnsUpdateWriterTest { assertThat(thrown).hasMessageThat().contains("SERVFAIL"); } - private void assertThatUpdatedZoneIs(Update update, String zoneName) { - Record[] zoneRecords = update.getSectionArray(Section.ZONE); - assertThat(zoneRecords[0].getName().toString()).isEqualTo(zoneName); + private static void assertThatUpdatedZoneIs(Update update, String zoneName) { + List zoneRecords = update.getSection(Section.ZONE); + assertThat(zoneRecords.get(0).getName().toString()).isEqualTo(zoneName); } - private void assertThatTotalUpdateSetsIs(Update update, int count) { + private static void assertThatTotalUpdateSetsIs(Update update, int count) { assertThat(update.getSectionRRsets(Section.UPDATE)).hasSize(count); } - private void assertThatUpdateDeletes(Update update, String resourceName, int recordType) { + private static void assertThatUpdateDeletes(Update update, String resourceName, int recordType) { ImmutableList deleted = findUpdateRecords(update, resourceName, recordType); // There's only an empty (i.e. "delete") record. assertThat(deleted.get(0).rdataToString()).hasLength(0); assertThat(deleted).hasSize(1); } - private void assertThatUpdateAdds( + private static void assertThatUpdateAdds( Update update, String resourceName, int recordType, String... resourceData) { ArrayList expectedData = new ArrayList<>(); Collections.addAll(expectedData, resourceData); @@ -446,7 +441,7 @@ public class DnsUpdateWriterTest { assertThat(actualData).containsExactlyElementsIn(expectedData); } - private ImmutableList findUpdateRecords( + private static ImmutableList findUpdateRecords( Update update, String resourceName, int recordType) { for (RRset set : update.getSectionRRsets(Section.UPDATE)) { if (set.getName().toString().equals(resourceName) && set.getType() == recordType) { @@ -460,7 +455,7 @@ public class DnsUpdateWriterTest { throw new AssertionError(); } - private Message messageWithResponseCode(int responseCode) { + private static Message messageWithResponseCode(int responseCode) { Message message = new Message(); message.getHeader().setOpcode(Opcode.UPDATE); message.getHeader().setFlag(Flags.QR); diff --git a/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java b/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java index 712b747e2..a219687ea 100644 --- a/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java +++ b/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java @@ -33,16 +33,13 @@ import com.google.cloud.storage.contrib.nio.testing.LocalStorageHelper; import com.google.common.collect.ImmutableList; import com.google.common.net.MediaType; import google.registry.gcs.GcsUtils; -import google.registry.model.ofy.Ofy; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldType; import google.registry.storage.drive.DriveConnection; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.ArgumentCaptor; @@ -51,8 +48,8 @@ import org.mockito.ArgumentCaptor; class ExportDomainListsActionTest { private final GcsUtils gcsUtils = new GcsUtils(LocalStorageHelper.getOptions()); - private DriveConnection driveConnection = mock(DriveConnection.class); - private ArgumentCaptor bytesExportedToDrive = ArgumentCaptor.forClass(byte[].class); + private final DriveConnection driveConnection = mock(DriveConnection.class); + private final ArgumentCaptor bytesExportedToDrive = ArgumentCaptor.forClass(byte[].class); private ExportDomainListsAction action; private final FakeClock clock = new FakeClock(DateTime.parse("2020-02-02T02:02:02Z")); @@ -60,11 +57,6 @@ class ExportDomainListsActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); - @Order(Order.DEFAULT - 1) - @RegisterExtension - public final InjectExtension inject = - new InjectExtension().withStaticFieldOverride(Ofy.class, "clock", clock); - @BeforeEach void beforeEach() { createTld("tld"); diff --git a/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java b/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java index 01a783333..818ee8557 100644 --- a/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java +++ b/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java @@ -42,7 +42,6 @@ import google.registry.request.Response; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; -import google.registry.testing.InjectExtension; import google.registry.util.Retrier; import java.io.IOException; import org.junit.jupiter.api.Test; @@ -59,8 +58,6 @@ public class SyncGroupMembersActionTest { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private final DirectoryGroupsConnection connection = mock(DirectoryGroupsConnection.class); private final Response response = mock(Response.class); @@ -76,8 +73,7 @@ public class SyncGroupMembersActionTest { @Test void test_getGroupEmailAddressForContactType_convertsToLowercase() { assertThat( - getGroupEmailAddressForContactType( - "SomeRegistrar", RegistrarPoc.Type.ADMIN, "domain-registry.example")) + getGroupEmailAddressForContactType("SomeRegistrar", ADMIN, "domain-registry.example")) .isEqualTo("someregistrar-primary-contacts@domain-registry.example"); } diff --git a/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java b/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java index 81b00b0a1..eb49394d3 100644 --- a/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java +++ b/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java @@ -35,14 +35,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import google.registry.model.common.Cursor; -import google.registry.model.ofy.Ofy; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarAddress; import google.registry.model.registrar.RegistrarPoc; import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -60,8 +58,6 @@ public class SyncRegistrarsSheetTest { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @Captor private ArgumentCaptor>> rowsCaptor; @Mock private SheetSynchronizer sheetSynchronizer; @@ -76,7 +72,6 @@ public class SyncRegistrarsSheetTest { @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); createTld("example"); // Remove Registrar entities created by AppEngineExtension (and RegistrarContact's, for jpa). // We don't do this for ofy because ofy's loadAllOf() can't be called in a transaction but @@ -215,7 +210,7 @@ public class SyncRegistrarsSheetTest { + "Phone number and email visible in domain WHOIS query as " + "Registrar Abuse contact info: No\n" + "Registrar-Console access: No\n" - + "\n" + + '\n' + "John Doe\n" + "john.doe@example.tld\n" + "Tel: +1.1234567890\n" diff --git a/core/src/test/java/google/registry/flows/EppPointInTimeTest.java b/core/src/test/java/google/registry/flows/EppPointInTimeTest.java index f9d273585..c331a739a 100644 --- a/core/src/test/java/google/registry/flows/EppPointInTimeTest.java +++ b/core/src/test/java/google/registry/flows/EppPointInTimeTest.java @@ -31,13 +31,11 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import google.registry.flows.EppTestComponent.FakesAndMocksModule; import google.registry.model.domain.Domain; -import google.registry.model.ofy.Ofy; import google.registry.monitoring.whitebox.EppMetric; import google.registry.testing.AppEngineExtension; import google.registry.testing.EppLoader; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -52,14 +50,11 @@ class EppPointInTimeTest { final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); - @RegisterExtension final InjectExtension inject = new InjectExtension(); - private EppLoader eppLoader; @BeforeEach void beforeEach() { createTld("tld"); - inject.setStaticField(Ofy.class, "clock", clock); } private void runFlow() throws Exception { diff --git a/core/src/test/java/google/registry/flows/EppTestCase.java b/core/src/test/java/google/registry/flows/EppTestCase.java index 3cd72b6fd..47ef737fe 100644 --- a/core/src/test/java/google/registry/flows/EppTestCase.java +++ b/core/src/test/java/google/registry/flows/EppTestCase.java @@ -36,7 +36,6 @@ import google.registry.model.billing.BillingEvent.Reason; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.eppcommon.EppXmlTransformer; -import google.registry.model.ofy.Ofy; import google.registry.model.reporting.HistoryEntry.Type; import google.registry.model.tld.Registry; import google.registry.monitoring.whitebox.EppMetric; @@ -44,7 +43,6 @@ import google.registry.persistence.VKey; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import google.registry.util.ProxyHttpHeaders; import java.util.Map; import java.util.Objects; @@ -52,16 +50,12 @@ import java.util.Optional; import javax.annotation.Nullable; import org.joda.money.Money; import org.joda.time.DateTime; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.RegisterExtension; public class EppTestCase { private static final MediaType APPLICATION_EPP_XML_UTF8 = MediaType.create("application", "epp+xml").withCharset(UTF_8); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - protected final FakeClock clock = new FakeClock(); private SessionMetadata sessionMetadata; @@ -69,12 +63,6 @@ public class EppTestCase { private EppMetric.Builder eppMetricBuilder; private boolean isSuperuser; - @BeforeEach - public void beforeEachEppTestCase() { - // For transactional flows - inject.setStaticField(Ofy.class, "clock", clock); - } - /** * Set the transport credentials. * @@ -92,14 +80,14 @@ public class EppTestCase { public class CommandAsserter { private final String inputFilename; - private @Nullable final Map inputSubstitutions; + @Nullable private final Map inputSubstitutions; private DateTime now; private CommandAsserter( String inputFilename, @Nullable Map inputSubstitutions) { this.inputFilename = inputFilename; this.inputSubstitutions = inputSubstitutions; - this.now = clock.nowUtc(); + now = clock.nowUtc(); } public CommandAsserter atTime(DateTime now) { @@ -121,9 +109,88 @@ public class EppTestCase { inputFilename, inputSubstitutions, outputFilename, outputSubstitutions, now); } - public String hasSuccessfulLogin() throws Exception { - return assertLoginCommandAndResponse(inputFilename, inputSubstitutions, null, clock.nowUtc()); + public void hasSuccessfulLogin() throws Exception { + assertLoginCommandAndResponse(inputFilename, inputSubstitutions, null, clock.nowUtc()); } + + private void assertLoginCommandAndResponse( + String inputFilename, + @Nullable Map inputSubstitutions, + @Nullable Map outputSubstitutions, + DateTime now) + throws Exception { + String outputFilename = "generic_success_response.xml"; + clock.setTo(now); + String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions); + String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions); + setUpSession(); + FakeResponse response = executeXmlCommand(input); + + // Check that the logged-in header was added to the response + assertThat(response.getHeaders()) + .isEqualTo(ImmutableMap.of(ProxyHttpHeaders.LOGGED_IN, "true")); + + verifyAndReturnOutput(response.getPayload(), expectedOutput, inputFilename, outputFilename); + } + + private String assertCommandAndResponse( + String inputFilename, + @Nullable Map inputSubstitutions, + String outputFilename, + @Nullable Map outputSubstitutions, + DateTime now) + throws Exception { + clock.setTo(now); + String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions); + String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions); + setUpSession(); + FakeResponse response = executeXmlCommand(input); + + // Checks that the Logged-In header is not in the response. If testing the login command, use + // assertLoginCommandAndResponse instead of this method. + assertThat(response.getHeaders()).doesNotContainEntry(ProxyHttpHeaders.LOGGED_IN, "true"); + + return verifyAndReturnOutput( + response.getPayload(), expectedOutput, inputFilename, outputFilename); + } + } + + private void setUpSession() { + if (sessionMetadata == null) { + sessionMetadata = + new HttpSessionMetadata(new FakeHttpSession()) { + @Override + public void invalidate() { + // When a session is invalidated, reset the sessionMetadata field. + super.invalidate(); + sessionMetadata = null; + } + }; + } + } + + private FakeResponse executeXmlCommand(String inputXml) { + EppRequestHandler handler = new EppRequestHandler(); + FakeResponse response = new FakeResponse(); + handler.response = response; + FakesAndMocksModule fakesAndMocksModule = FakesAndMocksModule.create(clock); + eppMetricBuilder = fakesAndMocksModule.getMetricBuilder(); + handler.eppController = + DaggerEppTestComponent.builder() + .fakesAndMocksModule(fakesAndMocksModule) + .build() + .startRequest() + .eppController(); + handler.executeEpp( + sessionMetadata, + credentials, + EppRequestSource.UNIT_TEST, + false, // Not dryRun. + isSuperuser, + inputXml.getBytes(UTF_8)); + assertThat(response.getStatus()).isEqualTo(SC_OK); + assertThat(response.getContentType()).isEqualTo(APPLICATION_EPP_XML_UTF8); + return response; } protected CommandAsserter assertThatCommand(String inputFilename) { @@ -148,63 +215,7 @@ public class EppTestCase { assertThatCommand("logout.xml").hasResponse("logout_response.xml"); } - private String assertLoginCommandAndResponse( - String inputFilename, - @Nullable Map inputSubstitutions, - @Nullable Map outputSubstitutions, - DateTime now) - throws Exception { - String outputFilename = "generic_success_response.xml"; - clock.setTo(now); - String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions); - String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions); - setUpSession(); - FakeResponse response = executeXmlCommand(input); - - // Check that the logged-in header was added to the response - assertThat(response.getHeaders()) - .isEqualTo(ImmutableMap.of(ProxyHttpHeaders.LOGGED_IN, "true")); - - return verifyAndReturnOutput( - response.getPayload(), expectedOutput, inputFilename, outputFilename); - } - - private String assertCommandAndResponse( - String inputFilename, - @Nullable Map inputSubstitutions, - String outputFilename, - @Nullable Map outputSubstitutions, - DateTime now) - throws Exception { - clock.setTo(now); - String input = loadFile(EppTestCase.class, inputFilename, inputSubstitutions); - String expectedOutput = loadFile(EppTestCase.class, outputFilename, outputSubstitutions); - setUpSession(); - FakeResponse response = executeXmlCommand(input); - - // Checks that the Logged-In header is not in the response. If testing the login command, use - // assertLoginCommandAndResponse instead of this method. - assertThat(response.getHeaders()).doesNotContainEntry(ProxyHttpHeaders.LOGGED_IN, "true"); - - return verifyAndReturnOutput( - response.getPayload(), expectedOutput, inputFilename, outputFilename); - } - - private void setUpSession() { - if (sessionMetadata == null) { - sessionMetadata = - new HttpSessionMetadata(new FakeHttpSession()) { - @Override - public void invalidate() { - // When a session is invalidated, reset the sessionMetadata field. - super.invalidate(); - EppTestCase.this.sessionMetadata = null; - } - }; - } - } - - private String verifyAndReturnOutput( + private static String verifyAndReturnOutput( String actualOutput, String expectedOutput, String inputFilename, String outputFilename) throws Exception { // Run the resulting xml through the unmarshaller to verify that it was valid. @@ -219,30 +230,6 @@ public class EppTestCase { return actualOutput; } - private FakeResponse executeXmlCommand(String inputXml) { - EppRequestHandler handler = new EppRequestHandler(); - FakeResponse response = new FakeResponse(); - handler.response = response; - FakesAndMocksModule fakesAndMocksModule = FakesAndMocksModule.create(clock); - eppMetricBuilder = fakesAndMocksModule.getMetricBuilder(); - handler.eppController = - DaggerEppTestComponent.builder() - .fakesAndMocksModule(fakesAndMocksModule) - .build() - .startRequest() - .eppController(); - handler.executeEpp( - sessionMetadata, - credentials, - EppRequestSource.UNIT_TEST, - false, // Not dryRun. - isSuperuser, - inputXml.getBytes(UTF_8)); - assertThat(response.getStatus()).isEqualTo(SC_OK); - assertThat(response.getContentType()).isEqualTo(APPLICATION_EPP_XML_UTF8); - return response; - } - EppMetric getRecordedEppMetric() { return eppMetricBuilder.build(); } diff --git a/core/src/test/java/google/registry/flows/FlowTestCase.java b/core/src/test/java/google/registry/flows/FlowTestCase.java index 95c31a6bf..4ffd90e70 100644 --- a/core/src/test/java/google/registry/flows/FlowTestCase.java +++ b/core/src/test/java/google/registry/flows/FlowTestCase.java @@ -39,7 +39,6 @@ import google.registry.model.domain.GracePeriod; import google.registry.model.eppcommon.ProtocolDefinition; import google.registry.model.eppinput.EppInput; import google.registry.model.eppoutput.EppOutput; -import google.registry.model.ofy.Ofy; import google.registry.model.reporting.HistoryEntryDao; import google.registry.monitoring.whitebox.EppMetric; import google.registry.testing.AppEngineExtension; @@ -48,7 +47,6 @@ import google.registry.testing.DatabaseHelper; import google.registry.testing.EppLoader; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; -import google.registry.testing.InjectExtension; import google.registry.testing.TestDataHelper; import google.registry.util.TypeUtils.TypeInstantiator; import google.registry.xml.ValidationMode; @@ -58,7 +56,6 @@ import java.util.Map; import javax.annotation.Nullable; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Order; import org.junit.jupiter.api.extension.RegisterExtension; /** @@ -89,13 +86,6 @@ public abstract class FlowTestCase { private EppMetric.Builder eppMetricBuilder; - // Set the clock for transactional flows. We have to order this before the AppEngineExtension - // which populates data. - @Order(value = Order.DEFAULT - 1) - @RegisterExtension - final InjectExtension inject = - new InjectExtension().withStaticFieldOverride(Ofy.class, "clock", clock); - @RegisterExtension final AppEngineExtension appEngine = AppEngineExtension.builder().withClock(clock).withCloudSql().withTaskQueue().build(); @@ -171,13 +161,13 @@ public abstract class FlowTestCase { } /** - * Helper to facilitate comparison of maps of GracePeriods to BillingEvents. This takes a map of - * GracePeriods to BillingEvents and returns a map of the same entries that ignores the keys - * on the grace periods and the IDs on the billing events (by setting them all to the same dummy + * Helper to facilitate comparison of maps of GracePeriods to BillingEvents. This takes a map of + * GracePeriods to BillingEvents and returns a map of the same entries that ignores the keys on + * the grace periods and the IDs on the billing events (by setting them all to the same dummy * values), since they will vary between instantiations even when the other data is the same. */ - private ImmutableMap - canonicalizeGracePeriods(ImmutableMap gracePeriods) { + private static ImmutableMap canonicalizeGracePeriods( + ImmutableMap gracePeriods) { ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); for (Map.Entry entry : gracePeriods.entrySet()) { builder.put( @@ -210,7 +200,7 @@ public abstract class FlowTestCase { * keys match the expected map of grace periods to billing events. For the expected map, the keys * on the grace periods and IDs on the billing events are ignored. */ - protected void assertGracePeriods( + protected static void assertGracePeriods( Iterable actual, ImmutableMap expected) { assertThat(canonicalizeGracePeriods(Maps.toMap(actual, FlowTestCase::expandGracePeriod))) .isEqualTo(canonicalizeGracePeriods(expected)); @@ -258,7 +248,7 @@ public abstract class FlowTestCase { return runFlow(CommitMode.LIVE, UserPrivileges.NORMAL); } - /** Shortcut to call {@link #runFlow(CommitMode, UserPrivileges)} as super user and live run. */ + /** Shortcut to call {@link #runFlow(CommitMode, UserPrivileges)} as superuser and live run. */ protected EppOutput runFlowAsSuperuser() throws Exception { return runFlow(CommitMode.LIVE, UserPrivileges.SUPERUSER); } diff --git a/core/src/test/java/google/registry/model/EntityTestCase.java b/core/src/test/java/google/registry/model/EntityTestCase.java index 1f956f95b..f62c416df 100644 --- a/core/src/test/java/google/registry/model/EntityTestCase.java +++ b/core/src/test/java/google/registry/model/EntityTestCase.java @@ -16,12 +16,9 @@ package google.registry.model; import static org.joda.time.DateTimeZone.UTC; -import google.registry.model.ofy.Ofy; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.extension.RegisterExtension; /** Base class of all unit tests for entities which are persisted to Datastore via Objectify. */ @@ -41,8 +38,6 @@ public abstract class EntityTestCase { @RegisterExtension public final AppEngineExtension appEngine; - @RegisterExtension public InjectExtension inject = new InjectExtension(); - protected EntityTestCase() { this(JpaEntityCoverageCheck.DISABLED); } @@ -55,9 +50,4 @@ public abstract class EntityTestCase { .withClock(fakeClock) .build(); } - - @BeforeEach - public void injectClock() { - inject.setStaticField(Ofy.class, "clock", fakeClock); - } } diff --git a/core/src/test/java/google/registry/model/EppResourceUtilsTest.java b/core/src/test/java/google/registry/model/EppResourceUtilsTest.java index e0793e76b..ac91e1566 100644 --- a/core/src/test/java/google/registry/model/EppResourceUtilsTest.java +++ b/core/src/test/java/google/registry/model/EppResourceUtilsTest.java @@ -23,10 +23,8 @@ import static google.registry.util.DateTimeUtils.START_OF_TIME; import static org.joda.time.DateTimeZone.UTC; import google.registry.model.host.Host; -import google.registry.model.ofy.Ofy; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -42,12 +40,9 @@ class EppResourceUtilsTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @BeforeEach void beforeEach() { createTld("tld"); - inject.setStaticField(Ofy.class, "clock", clock); } @Test diff --git a/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java b/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java index 7bab0ac00..5a5782a23 100644 --- a/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java +++ b/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java @@ -28,14 +28,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import google.registry.model.domain.DomainHistory; import google.registry.model.domain.Period; import google.registry.model.eppcommon.Trid; -import google.registry.model.ofy.Ofy; import google.registry.model.poll.PollMessageExternalKeyConverter.PollMessageExternalKeyParseException; import google.registry.model.reporting.HistoryEntry; import google.registry.persistence.VKey; import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -47,14 +45,11 @@ public class PollMessageExternalKeyConverterTest { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public InjectExtension inject = new InjectExtension(); - private HistoryEntry historyEntry; private FakeClock clock = new FakeClock(DateTime.parse("2007-07-07T01:01:01Z")); @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); createTld("foobar"); historyEntry = persistResource( diff --git a/core/src/test/java/google/registry/model/tld/RegistryTest.java b/core/src/test/java/google/registry/model/tld/RegistryTest.java index 9ef85ccbf..f02b57443 100644 --- a/core/src/test/java/google/registry/model/tld/RegistryTest.java +++ b/core/src/test/java/google/registry/model/tld/RegistryTest.java @@ -43,7 +43,6 @@ import google.registry.model.tld.Registry.TldState; import google.registry.model.tld.label.PremiumList; import google.registry.model.tld.label.PremiumListDao; import google.registry.model.tld.label.ReservedList; -import google.registry.testing.DatabaseHelper; import google.registry.util.SerializeUtils; import java.math.BigDecimal; import java.util.Optional; @@ -61,8 +60,6 @@ public final class RegistryTest extends EntityTestCase { @BeforeEach void beforeEach() { - // Auto-increment fakeClock in DatabaseHelper. - inject.setStaticField(DatabaseHelper.class, "clock", fakeClock); createTld("tld"); } diff --git a/core/src/test/java/google/registry/persistence/transaction/TransactionManagerTest.java b/core/src/test/java/google/registry/persistence/transaction/TransactionManagerTest.java index 9d6cf8203..8dea3d218 100644 --- a/core/src/test/java/google/registry/persistence/transaction/TransactionManagerTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/TransactionManagerTest.java @@ -27,11 +27,9 @@ import com.googlecode.objectify.Key; import com.googlecode.objectify.annotation.Entity; import com.googlecode.objectify.annotation.Id; import google.registry.model.ImmutableObject; -import google.registry.model.ofy.Ofy; import google.registry.persistence.VKey; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import java.util.List; import java.util.NoSuchElementException; import java.util.Set; @@ -54,8 +52,6 @@ public class TransactionManagerTest { new TestEntity("entity2", "bar"), new TestEntity("entity3", "qux")); - @RegisterExtension public InjectExtension inject = new InjectExtension(); - @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder() @@ -69,7 +65,6 @@ public class TransactionManagerTest { @BeforeEach void setUp() { - inject.setStaticField(Ofy.class, "clock", fakeClock); fakeClock.setAutoIncrementByOneMilli(); } diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java index c0d632461..fa36f8d18 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java @@ -24,8 +24,6 @@ import static org.mockito.Mockito.mock; import com.google.appengine.api.users.User; import com.google.gson.JsonObject; -import google.registry.model.ofy.Ofy; -import google.registry.request.Action; import google.registry.request.Actions; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; @@ -33,7 +31,6 @@ import google.registry.request.auth.UserAuthInfo; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.InjectExtension; import google.registry.util.Idn; import google.registry.util.TypeUtils; import java.util.HashMap; @@ -48,8 +45,6 @@ abstract class RdapActionBaseTestCase { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - protected static final AuthResult AUTH_RESULT = AuthResult.create( AuthLevel.USER, @@ -72,19 +67,18 @@ abstract class RdapActionBaseTestCase { RdapActionBaseTestCase(Class rdapActionClass) { this.rdapActionClass = rdapActionClass; - this.actionPath = Actions.getPathForAction(rdapActionClass); + actionPath = Actions.getPathForAction(rdapActionClass); } @BeforeEach public void beforeEachRdapActionBaseTestCase() { - inject.setStaticField(Ofy.class, "clock", clock); action = TypeUtils.instantiate(rdapActionClass); action.includeDeletedParam = Optional.empty(); action.formatOutputParam = Optional.empty(); action.response = response; action.rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter(clock); action.rdapMetrics = rdapMetrics; - action.requestMethod = Action.Method.GET; + action.requestMethod = GET; logout(); } diff --git a/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java b/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java index a3607c32c..12fa48fba 100644 --- a/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java +++ b/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java @@ -38,7 +38,6 @@ import google.registry.model.contact.ContactResource; import google.registry.model.domain.Domain; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; -import google.registry.model.ofy.Ofy; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; import google.registry.model.reporting.HistoryEntry; @@ -51,7 +50,6 @@ import google.registry.rdap.RdapObjectClasses.ReplyPayloadBase; import google.registry.rdap.RdapObjectClasses.TopLevelReplyObject; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -63,8 +61,6 @@ class RdapJsonFormatterTest { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private final FakeClock clock = new FakeClock(DateTime.parse("1999-01-01T00:00:00Z")); private RdapJsonFormatter rdapJsonFormatter; @@ -85,8 +81,6 @@ class RdapJsonFormatterTest { @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); - rdapJsonFormatter = RdapTestHelper.getTestRdapJsonFormatter(clock); rdapJsonFormatter.rdapAuthorization = RdapAuthorization.create(RdapAuthorization.Role.REGISTRAR, "unicoderegistrar"); @@ -299,7 +293,7 @@ class RdapJsonFormatterTest { } private JsonObject loadJson(String expectedFileName) { - return new Gson().fromJson(loadFile(this.getClass(), expectedFileName), JsonObject.class); + return new Gson().fromJson(loadFile(getClass(), expectedFileName), JsonObject.class); } @Test @@ -512,7 +506,7 @@ class RdapJsonFormatterTest { assertThat( TopLevelReplyObject.create( new ReplyPayloadBase(BoilerplateType.OTHER) { - @JsonableElement public String key = "value"; + @JsonableElement public static final String key = "value"; }, rdapJsonFormatter.createTosNotice()) .toJson()) @@ -524,7 +518,7 @@ class RdapJsonFormatterTest { assertThat( TopLevelReplyObject.create( new ReplyPayloadBase(BoilerplateType.DOMAIN) { - @JsonableElement public String key = "value"; + @JsonableElement public static final String key = "value"; }, rdapJsonFormatter.createTosNotice()) .toJson()) diff --git a/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java b/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java index eebf760b5..d6e76035e 100644 --- a/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java +++ b/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java @@ -31,11 +31,9 @@ import com.google.common.collect.ImmutableSetMultimap; import com.google.common.truth.Truth8; import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; -import google.registry.model.ofy.Ofy; import google.registry.model.tld.Registry; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -44,8 +42,6 @@ import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link PendingDepositChecker}. */ public class PendingDepositCheckerTest { - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); @@ -54,7 +50,6 @@ public class PendingDepositCheckerTest { @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); checker.brdaDayOfWeek = TUESDAY; checker.brdaInterval = standardDays(7); checker.clock = clock; diff --git a/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java b/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java index 6d7a6e735..a0f794ddc 100644 --- a/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java +++ b/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java @@ -37,7 +37,6 @@ import google.registry.model.registrar.Registrar; import google.registry.model.registrar.Registrar.State; import google.registry.request.auth.AuthenticatedRegistrarAccessor.RegistrarAccessDeniedException; import google.registry.testing.AppEngineExtension; -import google.registry.testing.InjectExtension; import google.registry.util.JdkLoggerConfig; import java.util.Optional; import java.util.logging.Level; @@ -61,8 +60,6 @@ class AuthenticatedRegistrarAccessorTest { @RegisterExtension final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension final InjectExtension inject = new InjectExtension(); - @Mock private HttpServletRequest req; @Mock private HttpServletResponse rsp; @Mock private GroupsConnection groupsConnection; @@ -142,7 +139,7 @@ class AuthenticatedRegistrarAccessorTest { verify(lazyGroupsConnection).get(); } - /** Logged out users don't have access to anything. */ + /** Logged-out users don't have access to anything. */ @Test void getAllClientIdWithAccess_loggedOutUser() { AuthenticatedRegistrarAccessor registrarAccessor = diff --git a/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java b/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java index 118572767..64a064cce 100644 --- a/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java +++ b/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java @@ -22,7 +22,6 @@ import com.google.common.base.Splitter; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeUserService; -import google.registry.testing.InjectExtension; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -34,8 +33,6 @@ class XsrfTokenManagerTest { @RegisterExtension final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension InjectExtension inject = new InjectExtension(); - private final User testUser = new User("test@example.com", "test@example.com"); private final FakeClock clock = new FakeClock(START_OF_TIME); private final FakeUserService userService = new FakeUserService(); @@ -81,7 +78,7 @@ class XsrfTokenManagerTest { void testValidate_tokenTimestampTamperedWith() { String encodedPart = Splitter.on(':').splitToList(token).get(2); long fakeTimestamp = clock.nowUtc().plusMillis(1).getMillis(); - assertThat(xsrfTokenManager.validateToken("1:" + fakeTimestamp + ":" + encodedPart)).isFalse(); + assertThat(xsrfTokenManager.validateToken("1:" + fakeTimestamp + ':' + encodedPart)).isFalse(); } @Test diff --git a/core/src/test/java/google/registry/server/Fixture.java b/core/src/test/java/google/registry/server/Fixture.java index fadc16213..b4af779e4 100644 --- a/core/src/test/java/google/registry/server/Fixture.java +++ b/core/src/test/java/google/registry/server/Fixture.java @@ -32,12 +32,8 @@ import google.registry.model.contact.ContactAddress; import google.registry.model.contact.ContactResource; import google.registry.model.contact.PostalInfo; import google.registry.model.domain.DesignatedContact; -import google.registry.model.ofy.Ofy; import google.registry.testing.DatabaseHelper; -import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import java.io.IOException; -import org.joda.time.DateTime; /** * Datastore fixtures for the development webserver. @@ -47,14 +43,6 @@ import org.joda.time.DateTime; */ public enum Fixture { - INJECTED_FAKE_CLOCK { - @Override - public void load() { - new InjectExtension() - .setStaticField(Ofy.class, "clock", new FakeClock(DateTime.parse("2000-01-01TZ"))); - } - }, - /** Fixture of two TLDs, three contacts, two domains, and six hosts. */ BASIC { @Override diff --git a/core/src/test/java/google/registry/testing/InjectExtension.java b/core/src/test/java/google/registry/testing/InjectExtension.java deleted file mode 100644 index f12c06b4c..000000000 --- a/core/src/test/java/google/registry/testing/InjectExtension.java +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright 2017 The Nomulus Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package google.registry.testing; - -import static com.google.common.base.Preconditions.checkState; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import javax.annotation.Nullable; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; - -/** - * JUnit extension for overriding {@code private static} fields during a test. - * - *

This extension uses reflection to change the value of a field while your test is running and - * then restore it to its original value after it's done (even if the test fails). The injection - * will work even if the field is marked {@code private} (but not if it's {@code final}). The - * downside is that if you rename the field in the future, IDE refactoring won't be smart enough to - * update the injection site. - * - *

We encourage you to consider using {@link google.registry.util.NonFinalForTesting - * @NonFinalForTesting} to document your injected fields. - * - *

This class is a horrible evil hack, but it alleviates you of the toil of having to break - * encapsulation by making your fields non-{@code private}, using the {@link - * com.google.common.annotations.VisibleForTesting @VisibleForTesting} annotation to document - * why you've reduced visibility, creating a temporary field to store the old value, and then - * writing an {@link org.junit.After @After} method to restore it. So sometimes it feels good - * to be evil; but hopefully one day we'll be able to delete this class and do things - * properly with Dagger dependency injection. - * - *

You use this class in by declaring it as an {@link - * org.junit.jupiter.api.extension.RegisterExtension @RegisterExtension} field and then call - * {@link #setStaticField} from either your {@link org.junit.jupiter.api.Test @Test} or {@link - * org.junit.jupiter.api.BeforeEach @BeforeEach} methods. For example: - * - *

- * // Doomsday.java
- * public class Doomsday {
- *
- *   private static Clock clock = new SystemClock();
- *
- *   public long getTime() {
- *     return clock.currentTimeMillis();
- *   }
- * }
- *
- * // DoomsdayTest.java
- * public class DoomsdayTest {
- *
- *   @RegisterExtension
- *   public InjectExtension inject = new InjectExtension();
- *
- *   private final FakeClock clock = new FakeClock();
- *
- *   @BeforeEach
- *   public void beforeEach() {
- *     inject.setStaticField(Doomsday.class, "clock", clock);
- *   }
- *
- *   @Test
- *   public void test() {
- *     clock.advanceBy(666L);
- *     Doomsday doom = new Doomsday();
- *     assertEquals(666L, doom.getTime());
- *   }
- * }
- * 
- * - * @see google.registry.util.NonFinalForTesting - */ -public class InjectExtension implements AfterEachCallback, BeforeEachCallback { - - private static class Change { - private final Field field; - @Nullable private Object oldValue; - @Nullable private final Object newValue; - private boolean active; - - Change(Field field, @Nullable Object oldValue, @Nullable Object newValue, boolean active) { - this.field = field; - this.oldValue = oldValue; - this.newValue = newValue; - this.active = active; - } - } - - private final List changes = new ArrayList<>(); - private final Set injected = new HashSet<>(); - - /** Adds the specified field override to those set by the extension. */ - public InjectExtension withStaticFieldOverride( - Class clazz, String fieldName, @Nullable Object newValue) { - changes.add(new Change(getField(clazz, fieldName), null, newValue, false)); - return this; - } - - /** - * Sets a static field and be restores its current value after the test completes. - * - *

Prefer to use withStaticFieldOverride(), which is more consistent with the extension - * pattern. - * - *

The field is allowed to be {@code private}, but it most not be {@code final}. - * - *

This method may be called either from either your {@link - * org.junit.jupiter.api.BeforeEach @BeforeEach} method or from the {@link - * org.junit.jupiter.api.Test @Test} method itself. However you may not inject the same field - * multiple times during the same test. - * - * @throws IllegalArgumentException if the static field could not be found or modified. - * @throws IllegalStateException if the field has already been injected during this test. - */ - public void setStaticField(Class clazz, String fieldName, @Nullable Object newValue) { - Field field = getField(clazz, fieldName); - Change change = new Change(field, null, newValue, true); - activateChange(change); - changes.add(change); - injected.add(field); - } - - @Override - public void beforeEach(ExtensionContext context) { - for (Change change : changes) { - if (!change.active) { - activateChange(change); - } - } - } - - @Override - public void afterEach(ExtensionContext context) { - RuntimeException thrown = null; - for (Change change : changes) { - if (change.active) { - try { - checkState( - change.field.get(null).equals(change.newValue), - "Static field value was changed post-injection: %s.%s", - change.field.getDeclaringClass().getSimpleName(), - change.field.getName()); - change.field.set(null, change.oldValue); - } catch (IllegalArgumentException | IllegalStateException | IllegalAccessException e) { - if (thrown == null) { - thrown = new RuntimeException(e); - } else { - thrown.addSuppressed(e); - } - } - } - } - changes.clear(); - injected.clear(); - if (thrown != null) { - throw thrown; - } - } - - private Field getField(Class clazz, String fieldName) { - try { - return clazz.getDeclaredField(fieldName); - } catch (SecurityException | NoSuchFieldException e) { - throw new IllegalArgumentException( - String.format("Static field not found: %s.%s", clazz.getSimpleName(), fieldName), e); - } - } - - private void activateChange(Change change) { - Class clazz = change.field.getDeclaringClass(); - try { - change.field.setAccessible(true); - change.oldValue = change.field.get(null); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new IllegalArgumentException( - String.format( - "Static field not gettable: %s.%s", clazz.getSimpleName(), change.field.getName()), - e); - } - checkState( - !injected.contains(change.field), - "Static field already injected: %s.%s", - clazz.getSimpleName(), - change.field.getName()); - try { - change.field.set(null, change.newValue); - } catch (IllegalArgumentException | IllegalAccessException e) { - throw new IllegalArgumentException( - String.format( - "Static field not settable: %s.%s", clazz.getSimpleName(), change.field.getName()), - e); - } - change.active = true; - } -} diff --git a/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java b/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java index facee1eb9..efdefa1d9 100644 --- a/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java +++ b/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java @@ -24,11 +24,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import google.registry.model.domain.Domain; import google.registry.model.domain.launch.LaunchNotice; -import google.registry.model.ofy.Ofy; import google.registry.model.registrar.Registrar.Type; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import google.registry.testing.TaskQueueHelper.TaskMatcher; import google.registry.util.Clock; import org.joda.time.DateTime; @@ -45,15 +43,12 @@ public class LordnTaskUtilsTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @BeforeEach void beforeEach() { createTld("example"); - inject.setStaticField(Ofy.class, "clock", clock); } - private Domain.Builder newDomainBuilder() { + private static Domain.Builder newDomainBuilder() { return new Domain.Builder() .setDomainName("fleece.example") .setPersistedCurrentSponsorRegistrarId("TheRegistrar") diff --git a/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java b/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java index 90b8e744c..040fbc1ce 100644 --- a/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java +++ b/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java @@ -48,14 +48,12 @@ import com.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; import google.registry.model.domain.Domain; import google.registry.model.domain.launch.LaunchNotice; -import google.registry.model.ofy.Ofy; import google.registry.model.tld.Registry; import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; import google.registry.testing.FakeUrlConnectionService; -import google.registry.testing.InjectExtension; import google.registry.testing.TaskQueueHelper.TaskMatcher; import google.registry.util.Retrier; import google.registry.util.TaskQueueUtils; @@ -95,8 +93,6 @@ class NordnUploadActionTest { public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - private final LordnRequestInitializer lordnRequestInitializer = new LordnRequestInitializer(Optional.of("attack")); private final NordnUploadAction action = new NordnUploadAction(); @@ -108,7 +104,6 @@ class NordnUploadActionTest { @BeforeEach void beforeEach() throws Exception { - inject.setStaticField(Ofy.class, "clock", clock); when(httpUrlConnection.getInputStream()) .thenReturn(new ByteArrayInputStream("Success".getBytes(UTF_8))); when(httpUrlConnection.getResponseCode()).thenReturn(SC_ACCEPTED); @@ -164,7 +159,6 @@ class NordnUploadActionTest { () -> NordnUploadAction.convertTasksToCsv(null, clock.nowUtc(), "header")); } - @SuppressWarnings("unchecked") @Test void test_loadAllTasks_retryLogic_thirdTrysTheCharm() { Queue queue = mock(Queue.class); @@ -230,7 +224,7 @@ class NordnUploadActionTest { void testRun_claimsMode_payloadMatchesClaimsCsv() { persistClaimsModeDomain(); action.run(); - assertThat(new String(connectionOutputStream.toByteArray(), UTF_8)).contains(CLAIMS_CSV); + assertThat(connectionOutputStream.toString(UTF_8)).contains(CLAIMS_CSV); } @Test @@ -249,7 +243,7 @@ class NordnUploadActionTest { void testRun_sunriseMode_payloadMatchesSunriseCsv() { persistSunriseModeDomain(); action.run(); - assertThat(new String(connectionOutputStream.toByteArray(), UTF_8)).contains(SUNRISE_CSV); + assertThat(connectionOutputStream.toString(UTF_8)).contains(SUNRISE_CSV); } @Test @@ -258,7 +252,7 @@ class NordnUploadActionTest { when(httpUrlConnection.getInputStream()).thenReturn(new ByteArrayInputStream(new byte[] {})); persistSunriseModeDomain(); action.run(); - assertThat(new String(connectionOutputStream.toByteArray(), UTF_8)).contains(SUNRISE_CSV); + assertThat(connectionOutputStream.toString(UTF_8)).contains(SUNRISE_CSV); } @Test @@ -288,7 +282,7 @@ class NordnUploadActionTest { assertThrows(UrlConnectionException.class, action::run); } - private void persistClaimsModeDomain() { + private static void persistClaimsModeDomain() { Domain domain = DatabaseHelper.newDomain("claims-landrush1.tld"); persistDomainAndEnqueueLordn( domain diff --git a/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java b/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java index e7d1df050..9191254f8 100644 --- a/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java +++ b/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java @@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import google.registry.config.RegistryConfig.ConfigModule.TmchCaMode; import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import google.registry.tmch.TmchXmlSignature.CertificateSignatureException; import java.security.cert.CertificateExpiredException; import java.security.cert.CertificateNotYetValidException; @@ -42,8 +41,6 @@ class TmchXmlSignatureTest { @RegisterExtension public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - // This should be a date which falls within the validity range of the test files contained in the // testdata/active directory. Note that test files claiming to be valid for a particular date // range in the file header may not actually be valid the whole time, because they contain an diff --git a/core/src/test/java/google/registry/tools/AckPollMessagesCommandTest.java b/core/src/test/java/google/registry/tools/AckPollMessagesCommandTest.java index ba78e6f97..c03263378 100644 --- a/core/src/test/java/google/registry/tools/AckPollMessagesCommandTest.java +++ b/core/src/test/java/google/registry/tools/AckPollMessagesCommandTest.java @@ -25,7 +25,6 @@ import com.google.common.collect.ImmutableList; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.domain.DomainHistory.DomainHistoryId; -import google.registry.model.ofy.Ofy; import google.registry.model.poll.PollMessage; import google.registry.model.poll.PollMessage.Autorenew; import google.registry.model.poll.PollMessage.OneTime; @@ -33,24 +32,19 @@ import google.registry.model.reporting.HistoryEntry; import google.registry.persistence.VKey; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link AckPollMessagesCommand}. */ public class AckPollMessagesCommandTest extends CommandTestCase { - private FakeClock clock = new FakeClock(DateTime.parse("2015-02-04T08:16:32.064Z")); - - @RegisterExtension public final InjectExtension inject = new InjectExtension(); + private final FakeClock clock = new FakeClock(DateTime.parse("2015-02-04T08:16:32.064Z")); private DomainHistory domainHistory; @BeforeEach final void beforeEach() { - inject.setStaticField(Ofy.class, "clock", clock); command.clock = clock; createTld("tld"); Domain domain = diff --git a/core/src/test/java/google/registry/tools/CountDomainsCommandTest.java b/core/src/test/java/google/registry/tools/CountDomainsCommandTest.java index b1fc93be1..cf713e5b6 100644 --- a/core/src/test/java/google/registry/tools/CountDomainsCommandTest.java +++ b/core/src/test/java/google/registry/tools/CountDomainsCommandTest.java @@ -18,20 +18,14 @@ import static google.registry.testing.DatabaseHelper.createTlds; import static google.registry.testing.DatabaseHelper.persistActiveDomain; import static google.registry.testing.DatabaseHelper.persistDeletedDomain; -import google.registry.model.ofy.Ofy; -import google.registry.testing.InjectExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link CountDomainsCommand}. */ public class CountDomainsCommandTest extends CommandTestCase { - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @BeforeEach final void beforeEach() { - inject.setStaticField(Ofy.class, "clock", fakeClock); command.clock = fakeClock; createTlds("foo", "bar", "baz", "qux"); } diff --git a/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java b/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java index 0131bf260..096f00afd 100644 --- a/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java +++ b/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java @@ -40,9 +40,7 @@ import com.google.common.collect.Range; import com.google.common.net.MediaType; import google.registry.flows.certs.CertificateChecker; import google.registry.flows.certs.CertificateChecker.InsecureCertificateException; -import google.registry.model.ofy.Ofy; import google.registry.model.registrar.Registrar; -import google.registry.testing.InjectExtension; import java.io.IOException; import java.math.BigDecimal; import java.util.Optional; @@ -51,7 +49,6 @@ import org.joda.money.Money; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.ArgumentMatchers; import org.mockito.Mock; @@ -60,11 +57,9 @@ class CreateRegistrarCommandTest extends CommandTestCase @Mock private AppEngineConnection connection; - @RegisterExtension final InjectExtension inject = new InjectExtension(); @BeforeEach void beforeEach() { - inject.setStaticField(Ofy.class, "clock", fakeClock); command.setConnection(connection); command.certificateChecker = new CertificateChecker( diff --git a/core/src/test/java/google/registry/tools/EnqueuePollMessageCommandTest.java b/core/src/test/java/google/registry/tools/EnqueuePollMessageCommandTest.java index a7b1aaa78..e8706e8e6 100644 --- a/core/src/test/java/google/registry/tools/EnqueuePollMessageCommandTest.java +++ b/core/src/test/java/google/registry/tools/EnqueuePollMessageCommandTest.java @@ -26,25 +26,19 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.beust.jcommander.ParameterException; import google.registry.model.domain.Domain; -import google.registry.model.ofy.Ofy; import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; -import google.registry.testing.InjectExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link EnqueuePollMessageCommand}. */ class EnqueuePollMessageCommandTest extends CommandTestCase { - @RegisterExtension final InjectExtension inject = new InjectExtension(); - private Domain domain; @BeforeEach void beforeEach() { createTld("tld"); - inject.setStaticField(Ofy.class, "clock", fakeClock); domain = persistActiveDomain("example.tld"); persistNewRegistrar("AdminRegistrar"); command.registryAdminClientId = "AdminRegistrar"; diff --git a/core/src/test/java/google/registry/tools/GenerateEscrowDepositCommandTest.java b/core/src/test/java/google/registry/tools/GenerateEscrowDepositCommandTest.java index 48bf3b3f4..5cfc001cc 100644 --- a/core/src/test/java/google/registry/tools/GenerateEscrowDepositCommandTest.java +++ b/core/src/test/java/google/registry/tools/GenerateEscrowDepositCommandTest.java @@ -21,10 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.beust.jcommander.ParameterException; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; -import google.registry.testing.InjectExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; @@ -33,8 +31,6 @@ import org.mockito.quality.Strictness; public class GenerateEscrowDepositCommandTest extends CommandTestCase { - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(); @BeforeEach diff --git a/core/src/test/java/google/registry/tools/GhostrydeCommandTest.java b/core/src/test/java/google/registry/tools/GhostrydeCommandTest.java index a344557ee..cdb3295f5 100644 --- a/core/src/test/java/google/registry/tools/GhostrydeCommandTest.java +++ b/core/src/test/java/google/registry/tools/GhostrydeCommandTest.java @@ -22,7 +22,6 @@ import google.registry.keyring.api.Keyring; import google.registry.rde.Ghostryde; import google.registry.testing.BouncyCastleProviderExtension; import google.registry.testing.FakeKeyringModule; -import google.registry.testing.InjectExtension; import java.nio.file.Files; import java.nio.file.Path; import org.junit.jupiter.api.BeforeEach; @@ -51,8 +50,6 @@ class GhostrydeCommandTest extends CommandTestCase { + "Haply I may remember, \n" + " And haply may forget. \n").getBytes(UTF_8); - @RegisterExtension final InjectExtension inject = new InjectExtension(); - @RegisterExtension final BouncyCastleProviderExtension bouncy = new BouncyCastleProviderExtension(); @@ -78,7 +75,7 @@ class GhostrydeCommandTest extends CommandTestCase { IllegalArgumentException thrown = assertThrows( IllegalArgumentException.class, - () -> runCommand("--input=" + inputFile.toString(), "--output=bar.dat")); + () -> runCommand("--input=" + inputFile, "--output=bar.dat")); assertThat(thrown).hasMessageThat().isEqualTo("Please specify either --encrypt or --decrypt"); } @@ -87,8 +84,7 @@ class GhostrydeCommandTest extends CommandTestCase { Path inputFile = Files.createFile(tmpDir.resolve("foo.dat")); IllegalArgumentException thrown = assertThrows( - IllegalArgumentException.class, - () -> runCommand("--encrypt", "--input=" + inputFile.toString())); + IllegalArgumentException.class, () -> runCommand("--encrypt", "--input=" + inputFile)); assertThat(thrown).hasMessageThat().isEqualTo("--output path is required in --encrypt mode"); } diff --git a/core/src/test/java/google/registry/tools/ListCursorsCommandTest.java b/core/src/test/java/google/registry/tools/ListCursorsCommandTest.java index baa6f37e0..102dcb17e 100644 --- a/core/src/test/java/google/registry/tools/ListCursorsCommandTest.java +++ b/core/src/test/java/google/registry/tools/ListCursorsCommandTest.java @@ -22,13 +22,10 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.beust.jcommander.ParameterException; import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; -import google.registry.model.ofy.Ofy; import google.registry.model.tld.Registry; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ListCursorsCommand}. */ public class ListCursorsCommandTest extends CommandTestCase { @@ -39,12 +36,9 @@ public class ListCursorsCommandTest extends CommandTestCase private static final String HEADER_TWO = "--------------------------------------------------------------------------"; - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @BeforeEach void beforeEach() { fakeClock.setTo(DateTime.parse("1984-12-21T06:07:08.789Z")); - inject.setStaticField(Ofy.class, "clock", fakeClock); } @Test diff --git a/core/src/test/java/google/registry/tools/SetNumInstancesCommandTest.java b/core/src/test/java/google/registry/tools/SetNumInstancesCommandTest.java index 2e33831a9..7b1f34c3c 100644 --- a/core/src/test/java/google/registry/tools/SetNumInstancesCommandTest.java +++ b/core/src/test/java/google/registry/tools/SetNumInstancesCommandTest.java @@ -22,11 +22,9 @@ import static org.mockito.Mockito.verify; import com.beust.jcommander.ParameterException; import com.google.common.collect.ImmutableMultimap; import google.registry.testing.AppEngineAdminApiHelper; -import google.registry.testing.InjectExtension; import google.registry.util.AppEngineServiceUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoSettings; import org.mockito.quality.Strictness; @@ -34,11 +32,9 @@ import org.mockito.quality.Strictness; /** Unit tests for {@link SetNumInstancesCommand}. */ public class SetNumInstancesCommandTest extends CommandTestCase { - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @Mock AppEngineServiceUtils appEngineServiceUtils; - private final String projectId = "domain-registry-test"; + private static final String projectId = "domain-registry-test"; @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/tools/UnrenewDomainCommandTest.java b/core/src/test/java/google/registry/tools/UnrenewDomainCommandTest.java index 3ae6870f5..f155108eb 100644 --- a/core/src/test/java/google/registry/tools/UnrenewDomainCommandTest.java +++ b/core/src/test/java/google/registry/tools/UnrenewDomainCommandTest.java @@ -41,25 +41,19 @@ import google.registry.model.contact.ContactResource; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.eppcommon.StatusValue; -import google.registry.model.ofy.Ofy; import google.registry.model.poll.PollMessage; import google.registry.testing.DatabaseHelper; -import google.registry.testing.InjectExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link UnrenewDomainCommand}. */ public class UnrenewDomainCommandTest extends CommandTestCase { - @RegisterExtension public final InjectExtension inject = new InjectExtension(); - @BeforeEach void beforeEach() { createTld("tld"); fakeClock.setTo(DateTime.parse("2016-12-06T13:55:01Z")); - inject.setStaticField(Ofy.class, "clock", fakeClock); command.clock = fakeClock; } diff --git a/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java b/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java index adbd9a641..8b9174ddc 100644 --- a/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java +++ b/core/src/test/java/google/registry/tools/UpdateDomainCommandTest.java @@ -42,17 +42,14 @@ import google.registry.model.domain.DomainHistory; import google.registry.model.domain.GracePeriod; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; -import google.registry.model.ofy.Ofy; import google.registry.persistence.VKey; import google.registry.testing.DatabaseHelper; -import google.registry.testing.InjectExtension; import google.registry.util.CapturingLogHandler; import google.registry.util.JdkLoggerConfig; import java.util.logging.Level; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link UpdateDomainCommand}. */ class UpdateDomainCommandTest extends EppToolCommandTestCase { @@ -61,11 +58,8 @@ class UpdateDomainCommandTest extends EppToolCommandTestCase