From 2416a8a7625caa4a950a206c87d4ea646b590a7d Mon Sep 17 00:00:00 2001 From: Lai Jiang Date: Thu, 12 Jan 2023 17:02:44 -0500 Subject: [PATCH] Remove AppEngineExtnesion (#1905) Most of its usage can be replaced by JpaIntegrationTestExtension. In places where specific GAE APIs are still needed, namely when pull queue or the User service is used, two simplifed extensions are used, which makes them much easier to identify when the APIs are no longer used. --- .../default/WEB-INF/datastore-indexes.xml | 98 ---- .../java/google/registry/model/IdService.java | 2 +- .../registry/batch/AsyncTaskEnqueuerTest.java | 7 +- .../CheckPackagesComplianceActionTest.java | 7 +- .../batch/DeleteExpiredDomainsActionTest.java | 10 +- .../batch/DeleteProberDataActionTest.java | 10 +- ...xpandRecurringBillingEventsActionTest.java | 7 +- .../batch/RelockDomainActionTest.java | 14 +- ...saveAllEppResourcesPipelineActionTest.java | 5 - .../batch/ResaveEntityActionTest.java | 7 +- ...ertificateNotificationEmailActionTest.java | 9 +- .../WipeOutContactHistoryPiiActionTest.java | 7 +- .../beam/common/RegistryJpaReadTest.java | 7 +- .../beam/common/RegistryJpaWriteTest.java | 8 +- .../registry/beam/rde/RdePipelineTest.java | 4 +- .../beam/spec11/Spec11PipelineTest.java | 2 +- .../registry/cron/TldFanoutActionTest.java | 6 +- .../google/registry/dns/DnsInjectionTest.java | 10 +- .../google/registry/dns/DnsQueueTest.java | 10 +- .../dns/PublishDnsUpdatesActionTest.java | 7 +- .../registry/dns/ReadDnsQueueActionTest.java | 24 +- .../registry/dns/RefreshDnsActionTest.java | 7 +- .../writer/clouddns/CloudDnsWriterTest.java | 6 +- .../writer/dnsupdate/DnsUpdateWriterTest.java | 7 +- .../export/ExportDomainListsActionTest.java | 7 +- .../export/ExportPremiumTermsActionTest.java | 6 +- .../export/ExportReservedTermsActionTest.java | 5 +- .../registry/export/ExportUtilsTest.java | 6 +- .../export/SyncGroupMembersActionTest.java | 8 +- .../sheet/SyncRegistrarsSheetActionTest.java | 6 - .../export/sheet/SyncRegistrarsSheetTest.java | 11 +- .../registry/flows/CheckApiActionTest.java | 6 +- .../registry/flows/EppControllerTest.java | 6 +- .../flows/EppLifecycleContactTest.java | 7 +- .../flows/EppLifecycleDomainTest.java | 10 +- .../registry/flows/EppLifecycleHostTest.java | 10 +- .../registry/flows/EppLifecycleLoginTest.java | 7 +- .../registry/flows/EppLoggedOutTest.java | 5 - .../registry/flows/EppLoginTlsTest.java | 6 +- .../registry/flows/EppPointInTimeTest.java | 10 +- .../registry/flows/EppXxeAttackTest.java | 6 +- .../registry/flows/ExtensionManagerTest.java | 8 +- .../google/registry/flows/FlowRunnerTest.java | 7 +- .../google/registry/flows/FlowTestCase.java | 7 +- .../registry/flows/TlsCredentialsTest.java | 8 +- .../contact/ContactTransferFlowTestCase.java | 7 +- .../flows/domain/DomainCreateFlowTest.java | 4 + .../flows/domain/DomainDeleteFlowTest.java | 4 + .../flows/domain/DomainFlowUtilsTest.java | 4 +- .../flows/domain/DomainInfoFlowTest.java | 7 +- .../flows/domain/DomainPricingLogicTest.java | 6 +- .../domain/DomainRestoreRequestFlowTest.java | 4 + .../domain/DomainTransferFlowTestCase.java | 7 +- .../flows/domain/DomainUpdateFlowTest.java | 4 + .../token/AllocationTokenFlowUtilsTest.java | 6 +- .../flows/host/HostCreateFlowTest.java | 4 + .../flows/host/HostDeleteFlowTest.java | 4 + .../flows/host/HostFlowUtilsTest.java | 6 +- .../flows/host/HostUpdateFlowTest.java | 4 + .../google/registry/model/EntityTestCase.java | 31 +- .../registry/model/EppResourceUtilsTest.java | 7 +- .../registry/model/ImmutableObjectTest.java | 10 +- .../google/registry/model/ModelUtilsTest.java | 5 - .../registry/model/OteAccountBuilderTest.java | 8 +- .../google/registry/model/OteStatsTest.java | 6 +- .../adapters/StatusValueAdapterTest.java | 6 - .../model/contact/ContactCommandTest.java | 5 - .../registry/model/domain/DomainSqlTest.java | 11 +- .../registry/model/domain/DomainTest.java | 11 +- .../model/domain/GracePeriodTest.java | 9 +- .../PollMessageExternalKeyConverterTest.java | 6 +- .../smd/SignedMarkRevocationListTest.java | 6 +- .../registry/model/tld/RegistriesTest.java | 6 +- .../tld/label/GenrulePremiumListTest.java | 5 - .../tld/label/GenruleReservedListTest.java | 5 - .../model/tld/label/PremiumListDaoTest.java | 11 +- .../model/tld/label/PremiumListTest.java | 6 +- .../model/tld/label/PremiumListUtilsTest.java | 5 - .../model/tld/label/ReservedListTest.java | 7 +- .../model/transfer/TransferDataTest.java | 5 - .../module/backend/BackendServletTest.java | 6 - .../module/frontend/FrontendServletTest.java | 6 - .../module/pubapi/PubApiServletTest.java | 6 - .../monitoring/whitebox/EppMetricTest.java | 6 +- .../InetAddressSetConverterTest.java | 12 +- .../DummyJpaTransactionManagerTest.java | 4 - .../JpaTransactionManagerExtension.java | 21 +- .../pricing/PricingEngineProxyTest.java | 6 +- .../registry/rdap/RdapActionBaseTestCase.java | 6 +- .../registry/rdap/RdapJsonFormatterTest.java | 6 +- ...UpdateRegistrarRdapBaseUrlsActionTest.java | 8 +- .../registry/rde/BrdaCopyActionTest.java | 6 +- .../rde/ContactToXjcConverterTest.java | 6 +- .../rde/DomainToXjcConverterTest.java | 6 +- .../registry/rde/EscrowTaskRunnerTest.java | 7 +- .../registry/rde/HostToXjcConverterTest.java | 6 +- .../rde/PendingDepositCheckerTest.java | 6 +- .../registry/rde/RdeMarshallerTest.java | 6 +- .../registry/rde/RdeReportActionTest.java | 6 +- .../registry/rde/RdeStagingActionTest.java | 7 +- .../registry/rde/RdeUploadActionTest.java | 7 +- .../rde/RegistrarToXjcConverterTest.java | 7 +- .../billing/CopyDetailReportsActionTest.java | 6 +- .../billing/GenerateInvoicesActionTest.java | 7 +- .../billing/PublishInvoicesActionTest.java | 5 - .../ActivityReportingQueryBuilderTest.java | 6 - .../icann/IcannHttpReporterTest.java | 6 +- .../icann/IcannReportingStagerTest.java | 6 - .../IcannReportingStagingActionTest.java | 6 - .../icann/IcannReportingUploadActionTest.java | 6 +- ...TransactionsReportingQueryBuilderTest.java | 6 - .../GenerateSpec11ReportActionTest.java | 6 - .../spec11/Spec11EmailUtilsTest.java | 9 +- .../registry/request/RequestHandlerTest.java | 10 - .../AuthenticatedRegistrarAccessorTest.java | 6 +- .../LegacyAuthenticationMechanismTest.java | 6 +- .../auth/RequestAuthenticatorTest.java | 6 +- .../request/lock/LockHandlerImplTest.java | 7 +- .../integration/SqlIntegrationTestSuite.java | 7 +- .../security/XsrfTokenManagerTest.java | 6 +- .../server/RegistryTestServerMain.java | 22 +- .../registry/testing/AppEngineExtension.java | 552 ------------------ .../testing/AppEngineExtensionTest.java | 114 ---- .../registry/testing/FakeUserService.java | 4 +- .../google/registry/testing/SqlHelper.java | 4 +- .../registry/testing/TaskQueueExtension.java | 64 ++ .../google/registry/testing/UserInfo.java | 2 +- .../testing/UserServiceExtension.java | 57 ++ .../registry/tmch/LordnTaskUtilsTest.java | 10 +- .../registry/tmch/NordnUploadActionTest.java | 10 +- .../registry/tmch/NordnVerifyActionTest.java | 7 +- .../registry/tmch/SmdrlCsvParserTest.java | 5 - .../registry/tmch/TmchActionTestCase.java | 6 +- .../tmch/TmchCertificateAuthorityTest.java | 8 +- .../tmch/TmchTestDataExpirationTest.java | 6 +- .../registry/tmch/TmchXmlSignatureTest.java | 6 +- .../registry/tools/CommandTestCase.java | 7 +- .../tools/CreateRegistrarCommandTest.java | 2 +- .../registry/tools/DomainLockUtilsTest.java | 13 +- .../registry/tools/EppLifecycleToolsTest.java | 7 +- .../tools/GetRegistrarCommandTest.java | 4 +- .../registry/tools/MutatingCommandTest.java | 6 +- .../registry/tools/RegistryToolTest.java | 5 - .../tools/UpdateRegistrarCommandTest.java | 6 +- .../tools/server/CreateGroupsActionTest.java | 6 +- .../server/GenerateZoneFilesActionTest.java | 7 +- .../tools/server/ListActionTestCase.java | 6 +- .../RefreshDnsForAllDomainsActionTest.java | 7 +- .../tools/server/VerifyOteActionTest.java | 6 +- .../registrar/ConsoleOteSetupActionTest.java | 10 +- .../ConsoleRegistrarCreatorActionTest.java | 9 +- .../server/registrar/ConsoleUiActionTest.java | 15 +- .../server/registrar/ContactSettingsTest.java | 42 +- .../server/registrar/OteStatusActionTest.java | 6 +- .../RegistrarSettingsActionTestCase.java | 9 +- .../registrar/RegistryLockGetActionTest.java | 13 +- .../registrar/RegistryLockPostActionTest.java | 14 +- .../RegistryLockVerifyActionTest.java | 17 +- .../google/registry/util/ConcurrentTest.java | 5 - .../util/RequestStatusCheckerImplTest.java | 6 +- .../registry/util/TaskQueueUtilsTest.java | 6 +- .../RegistrarConsoleScreenshotTest.java | 89 +-- .../webdriver/RegistrarConsoleWebTest.java | 8 +- .../webdriver/TestServerExtension.java | 60 +- .../whois/DomainWhoisResponseTest.java | 6 +- .../whois/NameserverWhoisResponseTest.java | 6 +- .../whois/RegistrarWhoisResponseTest.java | 6 +- .../registry/whois/WhoisActionTest.java | 7 +- .../whois/WhoisCommandFactoryTest.java | 7 +- .../registry/whois/WhoisHttpActionTest.java | 6 +- .../registry/whois/WhoisInjectionTest.java | 6 +- .../registry/whois/WhoisReaderTest.java | 6 +- 172 files changed, 814 insertions(+), 1453 deletions(-) delete mode 100644 core/src/main/java/google/registry/env/common/default/WEB-INF/datastore-indexes.xml delete mode 100644 core/src/test/java/google/registry/testing/AppEngineExtension.java delete mode 100644 core/src/test/java/google/registry/testing/AppEngineExtensionTest.java create mode 100644 core/src/test/java/google/registry/testing/TaskQueueExtension.java create mode 100644 core/src/test/java/google/registry/testing/UserServiceExtension.java diff --git a/core/src/main/java/google/registry/env/common/default/WEB-INF/datastore-indexes.xml b/core/src/main/java/google/registry/env/common/default/WEB-INF/datastore-indexes.xml deleted file mode 100644 index f11245fc3..000000000 --- a/core/src/main/java/google/registry/env/common/default/WEB-INF/datastore-indexes.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core/src/main/java/google/registry/model/IdService.java b/core/src/main/java/google/registry/model/IdService.java index 64a233caa..eb002ba76 100644 --- a/core/src/main/java/google/registry/model/IdService.java +++ b/core/src/main/java/google/registry/model/IdService.java @@ -20,7 +20,7 @@ import java.math.BigInteger; import java.util.concurrent.atomic.AtomicLong; /** - * Allocates a {@link long} to use as a {@code @Id}, (part) of the primary SQL key for an entity. + * Allocates a {@code long} to use as a {@code @Id}, (part) of the primary SQL key for an entity. */ public final class IdService { diff --git a/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java b/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java index 32da6b9f6..ea9745643 100644 --- a/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java +++ b/core/src/test/java/google/registry/batch/AsyncTaskEnqueuerTest.java @@ -24,7 +24,8 @@ import static google.registry.testing.TestLogHandlerUtils.assertLogMessage; import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.collect.ImmutableSortedSet; import google.registry.model.contact.Contact; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -47,8 +48,8 @@ import org.mockito.quality.Strictness; public class AsyncTaskEnqueuerTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private AsyncTaskEnqueuer asyncTaskEnqueuer; private final CapturingLogHandler logHandler = new CapturingLogHandler(); diff --git a/core/src/test/java/google/registry/batch/CheckPackagesComplianceActionTest.java b/core/src/test/java/google/registry/batch/CheckPackagesComplianceActionTest.java index 0d95d686d..740bde173 100644 --- a/core/src/test/java/google/registry/batch/CheckPackagesComplianceActionTest.java +++ b/core/src/test/java/google/registry/batch/CheckPackagesComplianceActionTest.java @@ -33,7 +33,8 @@ import google.registry.model.contact.Contact; import google.registry.model.domain.token.AllocationToken; import google.registry.model.domain.token.AllocationToken.TokenType; import google.registry.model.domain.token.PackagePromotion; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.ui.server.SendEmailUtils; @@ -67,8 +68,8 @@ public class CheckPackagesComplianceActionTest { private static final String SUPPORT_EMAIL = "registry@test.com"; @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); private CheckPackagesComplianceAction action; private AllocationToken token; diff --git a/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java b/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java index 6e69ccbdf..f9960abad 100644 --- a/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java +++ b/core/src/test/java/google/registry/batch/DeleteExpiredDomainsActionTest.java @@ -36,12 +36,14 @@ import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.persistence.transaction.QueryComposer.Comparator; -import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeLockHandler; import google.registry.testing.FakeResponse; +import google.registry.testing.TaskQueueExtension; import java.util.Optional; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -54,8 +56,10 @@ class DeleteExpiredDomainsActionTest { private final FakeClock clock = new FakeClock(DateTime.parse("2016-06-13T20:21:22Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); private final FakeResponse response = new FakeResponse(); private DeleteExpiredDomainsAction action; diff --git a/core/src/test/java/google/registry/batch/DeleteProberDataActionTest.java b/core/src/test/java/google/registry/batch/DeleteProberDataActionTest.java index a0144ac68..d36155138 100644 --- a/core/src/test/java/google/registry/batch/DeleteProberDataActionTest.java +++ b/core/src/test/java/google/registry/batch/DeleteProberDataActionTest.java @@ -44,10 +44,12 @@ import google.registry.model.poll.PollMessage; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.SystemPropertyExtension; +import google.registry.testing.TaskQueueExtension; import java.util.Optional; import java.util.Set; import org.joda.money.Money; @@ -63,8 +65,10 @@ class DeleteProberDataActionTest { private static final DateTime DELETION_TIME = DateTime.parse("2010-01-01T00:00:00.000Z"); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension(); @RegisterExtension final SystemPropertyExtension systemPropertyExtension = new SystemPropertyExtension(); diff --git a/core/src/test/java/google/registry/batch/ExpandRecurringBillingEventsActionTest.java b/core/src/test/java/google/registry/batch/ExpandRecurringBillingEventsActionTest.java index 170ae191f..f45a0114e 100644 --- a/core/src/test/java/google/registry/batch/ExpandRecurringBillingEventsActionTest.java +++ b/core/src/test/java/google/registry/batch/ExpandRecurringBillingEventsActionTest.java @@ -51,7 +51,8 @@ import google.registry.model.reporting.DomainTransactionRecord; import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; @@ -68,8 +69,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class ExpandRecurringBillingEventsActionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private DateTime currentTestTime = DateTime.parse("1999-01-05T00:00:00Z"); private final FakeClock clock = new FakeClock(currentTestTime); diff --git a/core/src/test/java/google/registry/batch/RelockDomainActionTest.java b/core/src/test/java/google/registry/batch/RelockDomainActionTest.java index ef8c5ee07..4921d2c1b 100644 --- a/core/src/test/java/google/registry/batch/RelockDomainActionTest.java +++ b/core/src/test/java/google/registry/batch/RelockDomainActionTest.java @@ -38,14 +38,14 @@ import com.google.common.collect.ImmutableSet; import google.registry.model.domain.Domain; import google.registry.model.domain.RegistryLock; import google.registry.model.host.Host; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.DatabaseHelper; import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.UserInfo; import google.registry.tools.DomainLockUtils; import google.registry.util.EmailMessage; import google.registry.util.SendEmailService; @@ -72,7 +72,7 @@ public class RelockDomainActionTest { private final FakeResponse response = new FakeResponse(); 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); private final DomainLockUtils domainLockUtils = new DomainLockUtils( new DeterministicStringGenerator(Alphabets.BASE_58), @@ -80,12 +80,8 @@ public class RelockDomainActionTest { cloudTasksHelper.getTestCloudTasksUtils()); @RegisterExtension - public final AppEngineExtension appEngineExtension = - AppEngineExtension.builder() - .withCloudSql() - .withTaskQueue() - .withUserService(UserInfo.create(POC_ID)) - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private Domain domain; private RegistryLock oldLock; diff --git a/core/src/test/java/google/registry/batch/ResaveAllEppResourcesPipelineActionTest.java b/core/src/test/java/google/registry/batch/ResaveAllEppResourcesPipelineActionTest.java index 95e7b43b3..c776534e8 100644 --- a/core/src/test/java/google/registry/batch/ResaveAllEppResourcesPipelineActionTest.java +++ b/core/src/test/java/google/registry/batch/ResaveAllEppResourcesPipelineActionTest.java @@ -26,17 +26,12 @@ import com.google.api.services.dataflow.model.LaunchFlexTemplateRequest; import com.google.common.collect.ImmutableMap; import google.registry.beam.BeamActionTestBase; import google.registry.config.RegistryEnvironment; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ResaveAllEppResourcesPipelineAction}. */ public class ResaveAllEppResourcesPipelineActionTest extends BeamActionTestBase { - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - private final FakeClock fakeClock = new FakeClock(); private ResaveAllEppResourcesPipelineAction createAction(boolean isFast) { diff --git a/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java b/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java index 6fb60005e..1adc87121 100644 --- a/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java +++ b/core/src/test/java/google/registry/batch/ResaveEntityActionTest.java @@ -34,8 +34,9 @@ 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.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; 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; @@ -55,8 +56,8 @@ import org.mockito.quality.Strictness; public class ResaveEntityActionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock private Response response; private final FakeClock clock = new FakeClock(DateTime.parse("2016-02-11T10:00:00Z")); diff --git a/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java b/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java index 99ac82f58..a160defbd 100644 --- a/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java +++ b/core/src/test/java/google/registry/batch/SendExpiringCertificateNotificationEmailActionTest.java @@ -15,7 +15,7 @@ package google.registry.batch; import static com.google.common.truth.Truth.assertThat; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; import static google.registry.testing.DatabaseHelper.loadByEntity; import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistSimpleResources; @@ -36,7 +36,8 @@ import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarAddress; import google.registry.model.registrar.RegistrarPoc; import google.registry.model.registrar.RegistrarPoc.Type; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.util.SelfSignedCaCertificate; @@ -70,8 +71,8 @@ class SendExpiringCertificateNotificationEmailActionTest { private static final String EXPIRATION_WARNING_EMAIL_SUBJECT_TEXT = "Expiration Warning Email"; @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2021-05-24T20:21:22Z")); private final SendEmailService sendEmailService = mock(SendEmailService.class); diff --git a/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java b/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java index 3c93e699d..008a520f5 100644 --- a/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java +++ b/core/src/test/java/google/registry/batch/WipeOutContactHistoryPiiActionTest.java @@ -34,7 +34,8 @@ import google.registry.model.contact.PostalInfo; import google.registry.model.eppcommon.AuthInfo.PasswordAuth; import google.registry.model.eppcommon.PresenceMarker; import google.registry.model.eppcommon.StatusValue; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; @@ -98,8 +99,8 @@ class WipeOutContactHistoryPiiActionTest { .build(); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2021-08-26T20:21:22Z")); diff --git a/core/src/test/java/google/registry/beam/common/RegistryJpaReadTest.java b/core/src/test/java/google/registry/beam/common/RegistryJpaReadTest.java index 907b73c1f..738dbf2c8 100644 --- a/core/src/test/java/google/registry/beam/common/RegistryJpaReadTest.java +++ b/core/src/test/java/google/registry/beam/common/RegistryJpaReadTest.java @@ -14,7 +14,7 @@ package google.registry.beam.common; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; import static google.registry.testing.DatabaseHelper.insertInDb; import static google.registry.testing.DatabaseHelper.newContact; import static google.registry.testing.DatabaseHelper.newRegistry; @@ -42,7 +42,6 @@ import google.registry.model.transfer.ContactTransferData; import google.registry.persistence.transaction.CriteriaQueryBuilder; import google.registry.persistence.transaction.JpaTestExtensions; import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import org.apache.beam.sdk.coders.StringUtf8Coder; import org.apache.beam.sdk.testing.PAssert; @@ -60,7 +59,7 @@ public class RegistryJpaReadTest { private final FakeClock fakeClock = new FakeClock(START_TIME); @RegisterExtension - final transient JpaIntegrationTestExtension database = + final transient JpaIntegrationTestExtension jpa = new JpaTestExtensions.Builder() .withClock(fakeClock) .withoutCannedData() @@ -74,7 +73,7 @@ public class RegistryJpaReadTest { @BeforeEach void beforeEach() { - Registrar ofyRegistrar = AppEngineExtension.makeRegistrar2(); + Registrar ofyRegistrar = JpaIntegrationTestExtension.makeRegistrar2(); insertInDb(ofyRegistrar); ImmutableList.Builder builder = new ImmutableList.Builder<>(); diff --git a/core/src/test/java/google/registry/beam/common/RegistryJpaWriteTest.java b/core/src/test/java/google/registry/beam/common/RegistryJpaWriteTest.java index 8df9cbf74..2f0a74f04 100644 --- a/core/src/test/java/google/registry/beam/common/RegistryJpaWriteTest.java +++ b/core/src/test/java/google/registry/beam/common/RegistryJpaWriteTest.java @@ -27,7 +27,7 @@ import google.registry.beam.TestPipelineExtension; import google.registry.model.contact.Contact; import google.registry.persistence.transaction.JpaTestExtensions; import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import google.registry.testing.FakeClock; import java.io.Serializable; import org.apache.beam.sdk.Pipeline.PipelineExecutionException; @@ -43,7 +43,7 @@ class RegistryJpaWriteTest implements Serializable { private final FakeClock fakeClock = new FakeClock(DateTime.parse("2000-01-01T00:00:00.0Z")); @RegisterExtension - final transient JpaIntegrationTestExtension database = + final transient JpaIntegrationTestExtension jpa = new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationTestExtension(); @RegisterExtension @@ -52,7 +52,7 @@ class RegistryJpaWriteTest implements Serializable { @Test void writeToSql_twoWriters() { - tm().transact(() -> tm().put(AppEngineExtension.makeRegistrar2())); + tm().transact(() -> tm().put(JpaTransactionManagerExtension.makeRegistrar2())); ImmutableList.Builder contactsBuilder = new ImmutableList.Builder<>(); for (int i = 0; i < 3; i++) { contactsBuilder.add(newContact("contact_" + i)); @@ -76,7 +76,7 @@ class RegistryJpaWriteTest implements Serializable { // causing a race condition tm().transact( () -> { - tm().put(AppEngineExtension.makeRegistrar2()); + tm().put(JpaTransactionManagerExtension.makeRegistrar2()); tm().put(newContact("contact")); }); Contact contact = Iterables.getOnlyElement(loadAllOf(Contact.class)); diff --git a/core/src/test/java/google/registry/beam/rde/RdePipelineTest.java b/core/src/test/java/google/registry/beam/rde/RdePipelineTest.java index 2cc5b63e9..bb1dc826f 100644 --- a/core/src/test/java/google/registry/beam/rde/RdePipelineTest.java +++ b/core/src/test/java/google/registry/beam/rde/RdePipelineTest.java @@ -22,13 +22,13 @@ import static google.registry.beam.rde.RdePipeline.encodePendingDeposits; import static google.registry.model.common.Cursor.CursorType.RDE_STAGING; import static google.registry.model.rde.RdeMode.FULL; import static google.registry.model.rde.RdeMode.THIN; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar2; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; import static google.registry.rde.RdeResourceType.CONTACT; import static google.registry.rde.RdeResourceType.DOMAIN; import static google.registry.rde.RdeResourceType.HOST; import static google.registry.rde.RdeResourceType.REGISTRAR; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; -import static google.registry.testing.AppEngineExtension.makeRegistrar2; import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.insertSimpleResources; import static google.registry.testing.DatabaseHelper.persistActiveContact; diff --git a/core/src/test/java/google/registry/beam/spec11/Spec11PipelineTest.java b/core/src/test/java/google/registry/beam/spec11/Spec11PipelineTest.java index ddd5b774e..d75193598 100644 --- a/core/src/test/java/google/registry/beam/spec11/Spec11PipelineTest.java +++ b/core/src/test/java/google/registry/beam/spec11/Spec11PipelineTest.java @@ -17,8 +17,8 @@ package google.registry.beam.spec11; import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.truth.Truth.assertThat; import static google.registry.model.ImmutableObjectSubject.immutableObjectCorrespondence; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.persistActiveContact; import static google.registry.testing.DatabaseHelper.persistNewRegistrar; diff --git a/core/src/test/java/google/registry/cron/TldFanoutActionTest.java b/core/src/test/java/google/registry/cron/TldFanoutActionTest.java index 174731b6a..1e31936b3 100644 --- a/core/src/test/java/google/registry/cron/TldFanoutActionTest.java +++ b/core/src/test/java/google/registry/cron/TldFanoutActionTest.java @@ -27,7 +27,8 @@ import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableSet; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -48,7 +49,8 @@ class TldFanoutActionTest { private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(new FakeClock()); @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private static ImmutableListMultimap getParamsMap(String... keysAndValues) { ImmutableListMultimap.Builder params = new ImmutableListMultimap.Builder<>(); diff --git a/core/src/test/java/google/registry/dns/DnsInjectionTest.java b/core/src/test/java/google/registry/dns/DnsInjectionTest.java index 49cb32498..777d1e317 100644 --- a/core/src/test/java/google/registry/dns/DnsInjectionTest.java +++ b/core/src/test/java/google/registry/dns/DnsInjectionTest.java @@ -24,11 +24,13 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; 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.TaskQueueExtension; import java.io.PrintWriter; import java.io.StringWriter; import javax.servlet.http.HttpServletRequest; @@ -42,8 +44,10 @@ import org.junit.jupiter.api.extension.RegisterExtension; public final class DnsInjectionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); diff --git a/core/src/test/java/google/registry/dns/DnsQueueTest.java b/core/src/test/java/google/registry/dns/DnsQueueTest.java index 338a60ffa..c2112a6cf 100644 --- a/core/src/test/java/google/registry/dns/DnsQueueTest.java +++ b/core/src/test/java/google/registry/dns/DnsQueueTest.java @@ -20,8 +20,10 @@ import static google.registry.testing.TaskQueueHelper.assertNoTasksEnqueued; import static google.registry.testing.TaskQueueHelper.assertTasksEnqueued; import static org.junit.jupiter.api.Assertions.assertThrows; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; +import google.registry.testing.TaskQueueExtension; import google.registry.testing.TaskQueueHelper.TaskMatcher; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -32,8 +34,10 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class DnsQueueTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); private DnsQueue dnsQueue; private final FakeClock clock = new FakeClock(DateTime.parse("2010-01-01T10:00:00Z")); diff --git a/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java b/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java index 7d06c900f..81f493a87 100644 --- a/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java +++ b/core/src/test/java/google/registry/dns/PublishDnsUpdatesActionTest.java @@ -48,9 +48,10 @@ import google.registry.dns.DnsMetrics.PublishStatus; import google.registry.dns.writer.DnsWriter; import google.registry.model.domain.Domain; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.ServiceUnavailableException; import google.registry.request.lock.LockHandler; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -73,8 +74,8 @@ import org.mockito.ArgumentCaptor; public class PublishDnsUpdatesActionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("1971-01-01TZ")); private final FakeResponse response = new FakeResponse(); diff --git a/core/src/test/java/google/registry/dns/ReadDnsQueueActionTest.java b/core/src/test/java/google/registry/dns/ReadDnsQueueActionTest.java index 449758eb9..329f6fe01 100644 --- a/core/src/test/java/google/registry/dns/ReadDnsQueueActionTest.java +++ b/core/src/test/java/google/registry/dns/ReadDnsQueueActionTest.java @@ -32,7 +32,6 @@ import com.google.appengine.api.taskqueue.QueueFactory; import com.google.appengine.api.taskqueue.TaskOptions; import com.google.cloud.tasks.v2.HttpMethod; import com.google.cloud.tasks.v2.Task; -import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; @@ -42,10 +41,12 @@ import com.google.common.net.InternetDomainName; import google.registry.dns.DnsConstants.TargetType; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; +import google.registry.testing.TaskQueueExtension; import google.registry.testing.TaskQueueHelper; import google.registry.testing.UriParameters; import java.nio.charset.StandardCharsets; @@ -70,21 +71,10 @@ public class ReadDnsQueueActionTest { private final CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .withTaskQueue( - Joiner.on('\n') - .join( - "", - "", - " ", - " dns-pull", - " pull", - " ", - "")) - .withClock(clock) - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/dns/RefreshDnsActionTest.java b/core/src/test/java/google/registry/dns/RefreshDnsActionTest.java index 9c1cefffd..8c65e6f9e 100644 --- a/core/src/test/java/google/registry/dns/RefreshDnsActionTest.java +++ b/core/src/test/java/google/registry/dns/RefreshDnsActionTest.java @@ -26,9 +26,10 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import google.registry.dns.DnsConstants.TargetType; import google.registry.model.domain.Domain; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.BadRequestException; import google.registry.request.HttpException.NotFoundException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -38,8 +39,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class RefreshDnsActionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DnsQueue dnsQueue = mock(DnsQueue.class); private final FakeClock clock = new FakeClock(); diff --git a/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java b/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java index b1b95e8bf..16bf1f29a 100644 --- a/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java +++ b/core/src/test/java/google/registry/dns/writer/clouddns/CloudDnsWriterTest.java @@ -43,7 +43,8 @@ import google.registry.model.domain.secdns.DomainDsData; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.util.Retrier; import google.registry.util.SystemClock; @@ -70,7 +71,8 @@ import org.mockito.quality.Strictness; public class CloudDnsWriterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private static final Inet4Address IPv4 = (Inet4Address) InetAddresses.forString("127.0.0.1"); private static final Inet6Address IPv6 = (Inet6Address) InetAddresses.forString("::1"); 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 62d6c00ea..c763ec68a 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,7 +39,8 @@ import google.registry.model.domain.Domain; import google.registry.model.domain.secdns.DomainDsData; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import java.util.ArrayList; @@ -72,8 +73,8 @@ import org.xbill.DNS.Update; public class DnsUpdateWriterTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + public final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock private DnsMessageTransport mockResolver; @Captor private ArgumentCaptor updateCaptor; diff --git a/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java b/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java index a219687ea..3235e420d 100644 --- a/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java +++ b/core/src/test/java/google/registry/export/ExportDomainListsActionTest.java @@ -35,8 +35,9 @@ import com.google.common.net.MediaType; import google.registry.gcs.GcsUtils; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldType; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.storage.drive.DriveConnection; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -54,8 +55,8 @@ class ExportDomainListsActionTest { private final FakeClock clock = new FakeClock(DateTime.parse("2020-02-02T02:02:02Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java b/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java index adebb0110..78c3d1493 100644 --- a/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java +++ b/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java @@ -39,9 +39,10 @@ import com.google.common.net.MediaType; import google.registry.model.tld.Registry; import google.registry.model.tld.label.PremiumList; import google.registry.model.tld.label.PremiumListDao; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Response; import google.registry.storage.drive.DriveConnection; -import google.registry.testing.AppEngineExtension; import java.io.IOException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -58,7 +59,8 @@ public class ExportPremiumTermsActionTest { DISCLAIMER_WITH_NEWLINE + "0, 549.00\n" + "2048, 549.00\n"; @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DriveConnection driveConnection = mock(DriveConnection.class); private final Response response = mock(Response.class); diff --git a/core/src/test/java/google/registry/export/ExportReservedTermsActionTest.java b/core/src/test/java/google/registry/export/ExportReservedTermsActionTest.java index 159c7f3ce..d303aed52 100644 --- a/core/src/test/java/google/registry/export/ExportReservedTermsActionTest.java +++ b/core/src/test/java/google/registry/export/ExportReservedTermsActionTest.java @@ -34,9 +34,10 @@ import com.google.common.collect.ImmutableSet; import com.google.common.net.MediaType; import google.registry.model.tld.Registry; import google.registry.model.tld.label.ReservedList; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Response; import google.registry.storage.drive.DriveConnection; -import google.registry.testing.AppEngineExtension; import java.io.IOException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -46,7 +47,7 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class ExportReservedTermsActionTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + JpaIntegrationTestExtension jpa = new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DriveConnection driveConnection = mock(DriveConnection.class); private final Response response = mock(Response.class); diff --git a/core/src/test/java/google/registry/export/ExportUtilsTest.java b/core/src/test/java/google/registry/export/ExportUtilsTest.java index 699b127d8..def5b5f17 100644 --- a/core/src/test/java/google/registry/export/ExportUtilsTest.java +++ b/core/src/test/java/google/registry/export/ExportUtilsTest.java @@ -21,7 +21,8 @@ import static google.registry.testing.DatabaseHelper.persistResource; import google.registry.model.tld.Registry; import google.registry.model.tld.label.ReservedList; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -29,7 +30,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class ExportUtilsTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void test_exportReservedTerms() { diff --git a/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java b/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java index 818ee8557..2466d4871 100644 --- a/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java +++ b/core/src/test/java/google/registry/export/SyncGroupMembersActionTest.java @@ -38,8 +38,9 @@ import google.registry.groups.DirectoryGroupsConnection; import google.registry.groups.GroupsConnection.Role; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Response; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; import google.registry.util.Retrier; @@ -51,12 +52,13 @@ import org.junit.jupiter.api.extension.RegisterExtension; * Unit tests for {@link SyncGroupMembersAction}. * *

Note that this relies on the registrars NewRegistrar and TheRegistrar created by default in - * {@link AppEngineExtension}. + * {@link JpaIntegrationTestExtension}. */ public class SyncGroupMembersActionTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DirectoryGroupsConnection connection = mock(DirectoryGroupsConnection.class); private final Response response = mock(Response.class); diff --git a/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetActionTest.java b/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetActionTest.java index d0765e6d2..e97c426ad 100644 --- a/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetActionTest.java +++ b/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetActionTest.java @@ -23,7 +23,6 @@ import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeLockHandler; import google.registry.testing.FakeResponse; import java.util.Optional; @@ -31,15 +30,10 @@ import javax.annotation.Nullable; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link SyncRegistrarsSheetAction}. */ public class SyncRegistrarsSheetActionTest { - @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - private final FakeResponse response = new FakeResponse(); private final SyncRegistrarsSheet syncRegistrarsSheet = mock(SyncRegistrarsSheet.class); 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 f800053d8..28e35b7de 100644 --- a/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java +++ b/core/src/test/java/google/registry/export/sheet/SyncRegistrarsSheetTest.java @@ -38,7 +38,8 @@ import google.registry.model.common.Cursor; 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.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import org.joda.time.DateTime; @@ -56,7 +57,8 @@ import org.mockito.junit.jupiter.MockitoExtension; public class SyncRegistrarsSheetTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Captor private ArgumentCaptor>> rowsCaptor; @Mock private SheetSynchronizer sheetSynchronizer; @@ -73,9 +75,8 @@ public class SyncRegistrarsSheetTest { @BeforeEach void beforeEach() { createTld("example"); - // Remove Registrar entities created by AppEngineExtension (and RegistrarContact's, for jpa). - tm().transact(() -> tm().loadAllOf(RegistrarPoc.class)) - .forEach(DatabaseHelper::deleteResource); + // Remove Registrar entities created by JpaTransactionManagerExtension. + tm().transact(() -> tm().loadAllOf(RegistrarPoc.class)).forEach(DatabaseHelper::deleteResource); Registrar.loadAll().forEach(DatabaseHelper::deleteResource); } diff --git a/core/src/test/java/google/registry/flows/CheckApiActionTest.java b/core/src/test/java/google/registry/flows/CheckApiActionTest.java index b37314771..9f20989a9 100644 --- a/core/src/test/java/google/registry/flows/CheckApiActionTest.java +++ b/core/src/test/java/google/registry/flows/CheckApiActionTest.java @@ -33,7 +33,8 @@ import google.registry.monitoring.whitebox.CheckApiMetric; import google.registry.monitoring.whitebox.CheckApiMetric.Availability; import google.registry.monitoring.whitebox.CheckApiMetric.Status; import google.registry.monitoring.whitebox.CheckApiMetric.Tier; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import java.util.Map; @@ -55,7 +56,8 @@ class CheckApiActionTest { private static final DateTime START_TIME = DateTime.parse("2000-01-01T00:00:00.0Z"); @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock private CheckApiMetrics checkApiMetrics; @Captor private ArgumentCaptor metricCaptor; diff --git a/core/src/test/java/google/registry/flows/EppControllerTest.java b/core/src/test/java/google/registry/flows/EppControllerTest.java index 5c6f37ad9..03a836301 100644 --- a/core/src/test/java/google/registry/flows/EppControllerTest.java +++ b/core/src/test/java/google/registry/flows/EppControllerTest.java @@ -40,7 +40,8 @@ import google.registry.model.eppoutput.EppResponse; import google.registry.model.eppoutput.Result; import google.registry.model.eppoutput.Result.Code; import google.registry.monitoring.whitebox.EppMetric; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.util.Clock; import google.registry.xml.ValidationMode; @@ -67,7 +68,8 @@ import org.mockito.quality.Strictness; class EppControllerTest { @RegisterExtension - AppEngineExtension appEngineExtension = new AppEngineExtension.Builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock SessionMetadata sessionMetadata; @Mock TransportCredentials transportCredentials; diff --git a/core/src/test/java/google/registry/flows/EppLifecycleContactTest.java b/core/src/test/java/google/registry/flows/EppLifecycleContactTest.java index 94f1d7acf..e79ed9170 100644 --- a/core/src/test/java/google/registry/flows/EppLifecycleContactTest.java +++ b/core/src/test/java/google/registry/flows/EppLifecycleContactTest.java @@ -20,7 +20,8 @@ import static google.registry.model.eppoutput.Result.Code.SUCCESS_WITH_NO_MESSAG import static google.registry.testing.EppMetricSubject.assertThat; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -28,8 +29,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppLifecycleContactTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @Test void testContactLifecycle() throws Exception { diff --git a/core/src/test/java/google/registry/flows/EppLifecycleDomainTest.java b/core/src/test/java/google/registry/flows/EppLifecycleDomainTest.java index 9c4bc1aff..0d8aeade3 100644 --- a/core/src/test/java/google/registry/flows/EppLifecycleDomainTest.java +++ b/core/src/test/java/google/registry/flows/EppLifecycleDomainTest.java @@ -46,7 +46,9 @@ import google.registry.model.domain.DomainHistory; import google.registry.model.reporting.HistoryEntry.Type; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldState; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; +import google.registry.testing.TaskQueueExtension; import org.joda.money.Money; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -63,8 +65,10 @@ class EppLifecycleDomainTest extends EppTestCase { "EXDATE", "2003-06-01T00:04:00Z"); @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/flows/EppLifecycleHostTest.java b/core/src/test/java/google/registry/flows/EppLifecycleHostTest.java index 0559ff24b..8780ba8a6 100644 --- a/core/src/test/java/google/registry/flows/EppLifecycleHostTest.java +++ b/core/src/test/java/google/registry/flows/EppLifecycleHostTest.java @@ -25,7 +25,9 @@ import static google.registry.testing.HostSubject.assertAboutHosts; import com.google.common.collect.ImmutableMap; import google.registry.model.domain.Domain; import google.registry.model.host.Host; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; +import google.registry.testing.TaskQueueExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -34,8 +36,10 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppLifecycleHostTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); @Test void testLifecycle() throws Exception { diff --git a/core/src/test/java/google/registry/flows/EppLifecycleLoginTest.java b/core/src/test/java/google/registry/flows/EppLifecycleLoginTest.java index ffeb86d87..a1bb701b9 100644 --- a/core/src/test/java/google/registry/flows/EppLifecycleLoginTest.java +++ b/core/src/test/java/google/registry/flows/EppLifecycleLoginTest.java @@ -18,7 +18,8 @@ import static google.registry.model.eppoutput.Result.Code.SUCCESS; import static google.registry.model.eppoutput.Result.Code.SUCCESS_AND_CLOSE; import static google.registry.testing.EppMetricSubject.assertThat; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -26,8 +27,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppLifecycleLoginTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void testLoginAndLogout_recordsEppMetric() throws Exception { diff --git a/core/src/test/java/google/registry/flows/EppLoggedOutTest.java b/core/src/test/java/google/registry/flows/EppLoggedOutTest.java index 03a2c03a2..962e46fcb 100644 --- a/core/src/test/java/google/registry/flows/EppLoggedOutTest.java +++ b/core/src/test/java/google/registry/flows/EppLoggedOutTest.java @@ -18,17 +18,12 @@ import static org.joda.time.DateTimeZone.UTC; import static org.joda.time.format.ISODateTimeFormat.dateTimeNoMillis; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Test flows without login. */ class EppLoggedOutTest extends EppTestCase { - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void testHello() throws Exception { DateTime now = DateTime.now(UTC); diff --git a/core/src/test/java/google/registry/flows/EppLoginTlsTest.java b/core/src/test/java/google/registry/flows/EppLoginTlsTest.java index 9e54ef63f..c0f70160c 100644 --- a/core/src/test/java/google/registry/flows/EppLoginTlsTest.java +++ b/core/src/test/java/google/registry/flows/EppLoginTlsTest.java @@ -24,7 +24,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedMap; import google.registry.flows.certs.CertificateChecker; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CertificateSamples; import google.registry.testing.SystemPropertyExtension; import google.registry.util.SelfSignedCaCertificate; @@ -44,7 +45,8 @@ import org.testcontainers.shaded.org.bouncycastle.util.io.pem.PemWriter; class EppLoginTlsTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @RegisterExtension @Order(value = Integer.MAX_VALUE) diff --git a/core/src/test/java/google/registry/flows/EppPointInTimeTest.java b/core/src/test/java/google/registry/flows/EppPointInTimeTest.java index 558d518f7..64f50308a 100644 --- a/core/src/test/java/google/registry/flows/EppPointInTimeTest.java +++ b/core/src/test/java/google/registry/flows/EppPointInTimeTest.java @@ -31,10 +31,12 @@ import com.google.common.collect.Iterables; import google.registry.flows.EppTestComponent.FakesAndMocksModule; import google.registry.model.domain.Domain; import google.registry.monitoring.whitebox.EppMetric; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.EppLoader; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; +import google.registry.testing.TaskQueueExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -46,8 +48,10 @@ class EppPointInTimeTest { private final FakeClock clock = new FakeClock(DateTime.now(UTC)); @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); private EppLoader eppLoader; diff --git a/core/src/test/java/google/registry/flows/EppXxeAttackTest.java b/core/src/test/java/google/registry/flows/EppXxeAttackTest.java index cf2ab941f..ab5fa31af 100644 --- a/core/src/test/java/google/registry/flows/EppXxeAttackTest.java +++ b/core/src/test/java/google/registry/flows/EppXxeAttackTest.java @@ -15,7 +15,8 @@ package google.registry.flows; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -23,7 +24,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppXxeAttackTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void testRemoteXmlExternalEntity() throws Exception { diff --git a/core/src/test/java/google/registry/flows/ExtensionManagerTest.java b/core/src/test/java/google/registry/flows/ExtensionManagerTest.java index 1028fb30c..9398dabee 100644 --- a/core/src/test/java/google/registry/flows/ExtensionManagerTest.java +++ b/core/src/test/java/google/registry/flows/ExtensionManagerTest.java @@ -34,19 +34,14 @@ import google.registry.model.domain.superuser.DomainTransferRequestSuperuserExte import google.registry.model.eppcommon.ProtocolDefinition.ServiceExtension; import google.registry.model.eppinput.EppInput; import google.registry.model.eppinput.EppInput.CommandExtension; -import google.registry.testing.AppEngineExtension; import google.registry.util.JdkLoggerConfig; import google.registry.util.TypeUtils; import java.util.logging.LogRecord; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ExtensionManager}. */ class ExtensionManagerTest { - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void testDuplicateExtensionsForbidden() { ExtensionManager manager = @@ -245,7 +240,8 @@ class ExtensionManagerTest { @Override public ImmutableList getExtensions() { return suppliedExtensions; - }}; + } + }; } } } diff --git a/core/src/test/java/google/registry/flows/FlowRunnerTest.java b/core/src/test/java/google/registry/flows/FlowRunnerTest.java index 27e15b238..27db271f5 100644 --- a/core/src/test/java/google/registry/flows/FlowRunnerTest.java +++ b/core/src/test/java/google/registry/flows/FlowRunnerTest.java @@ -35,7 +35,8 @@ import google.registry.model.eppcommon.Trid; import google.registry.model.eppoutput.EppOutput.ResponseOrGreeting; import google.registry.model.eppoutput.EppResponse; import google.registry.monitoring.whitebox.EppMetric; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; import google.registry.util.JdkLoggerConfig; @@ -51,8 +52,8 @@ import org.mockito.Mockito; class FlowRunnerTest { @RegisterExtension - final AppEngineExtension appEngineExtension = - new AppEngineExtension.Builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FlowRunner flowRunner = new FlowRunner(); private final EppMetric.Builder eppMetricBuilder = EppMetric.builderForRequest(new FakeClock()); diff --git a/core/src/test/java/google/registry/flows/FlowTestCase.java b/core/src/test/java/google/registry/flows/FlowTestCase.java index 3f51b34f9..f17d5187e 100644 --- a/core/src/test/java/google/registry/flows/FlowTestCase.java +++ b/core/src/test/java/google/registry/flows/FlowTestCase.java @@ -41,7 +41,8 @@ import google.registry.model.eppinput.EppInput; import google.registry.model.eppoutput.EppOutput; import google.registry.model.reporting.HistoryEntryDao; import google.registry.monitoring.whitebox.EppMetric; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.DatabaseHelper; import google.registry.testing.EppLoader; @@ -87,8 +88,8 @@ public abstract class FlowTestCase { private EppMetric.Builder eppMetricBuilder; @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withClock(clock).withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @BeforeEach public void beforeEachFlowTestCase() { diff --git a/core/src/test/java/google/registry/flows/TlsCredentialsTest.java b/core/src/test/java/google/registry/flows/TlsCredentialsTest.java index 745b13fdc..52adbf053 100644 --- a/core/src/test/java/google/registry/flows/TlsCredentialsTest.java +++ b/core/src/test/java/google/registry/flows/TlsCredentialsTest.java @@ -31,7 +31,8 @@ import google.registry.flows.TlsCredentials.MissingRegistrarCertificateException import google.registry.flows.TlsCredentials.RegistrarCertificateNotConfiguredException; import google.registry.flows.certs.CertificateChecker; import google.registry.model.registrar.Registrar; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.util.CidrAddressBlock; import google.registry.util.ProxyHttpHeaders; @@ -45,9 +46,10 @@ import org.junit.jupiter.api.extension.RegisterExtension; final class TlsCredentialsTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); - protected final FakeClock clock = new FakeClock(); + private final FakeClock clock = new FakeClock(); private final CertificateChecker certificateChecker = new CertificateChecker( diff --git a/core/src/test/java/google/registry/flows/contact/ContactTransferFlowTestCase.java b/core/src/test/java/google/registry/flows/contact/ContactTransferFlowTestCase.java index 4ab2c266f..3241fb34f 100644 --- a/core/src/test/java/google/registry/flows/contact/ContactTransferFlowTestCase.java +++ b/core/src/test/java/google/registry/flows/contact/ContactTransferFlowTestCase.java @@ -25,7 +25,7 @@ import google.registry.model.EppResource; import google.registry.model.contact.Contact; import google.registry.model.tld.Registry; import google.registry.model.transfer.TransferStatus; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -59,7 +59,10 @@ abstract class ContactTransferFlowTestCase { + @RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension(); + private static final String CLAIMS_KEY = "2013041500/2/6/9/rJ1NrDO92vDsAzf7EQzgjX4R0000000001"; private AllocationToken allocationToken; diff --git a/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java index c42f36284..54aa88282 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainDeleteFlowTest.java @@ -101,16 +101,20 @@ import google.registry.model.transfer.TransferResponse; import google.registry.model.transfer.TransferStatus; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; import java.util.Map; import org.joda.money.Money; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link DomainDeleteFlow}. */ class DomainDeleteFlowTest extends ResourceFlowTestCase { + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); + private Domain domain; private DomainHistory earlierHistoryEntry; diff --git a/core/src/test/java/google/registry/flows/domain/DomainFlowUtilsTest.java b/core/src/test/java/google/registry/flows/domain/DomainFlowUtilsTest.java index 6d77e2753..e3d04104e 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainFlowUtilsTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainFlowUtilsTest.java @@ -39,7 +39,7 @@ import google.registry.flows.domain.DomainFlowUtils.TldDoesNotExistException; import google.registry.flows.domain.DomainFlowUtils.TrailingDashException; import google.registry.model.domain.Domain; import google.registry.model.tld.Registry.TldType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import org.joda.money.Money; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -51,7 +51,7 @@ class DomainFlowUtilsTest extends ResourceFlowTestCase { void setup() { setEppInput("domain_info.xml"); createTld("tld"); - persistResource(AppEngineExtension.makeRegistrar1().asBuilder().build()); + persistResource(JpaTransactionManagerExtension.makeRegistrar1().asBuilder().build()); } @Test diff --git a/core/src/test/java/google/registry/flows/domain/DomainInfoFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainInfoFlowTest.java index 8a2bd3768..1cf00e475 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainInfoFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainInfoFlowTest.java @@ -74,7 +74,7 @@ import google.registry.model.host.Host; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import google.registry.testing.DatabaseHelper; import google.registry.xml.ValidationMode; import java.util.regex.Pattern; @@ -115,7 +115,10 @@ class DomainInfoFlowTest extends ResourceFlowTestCase { sessionMetadata.setRegistrarId("NewRegistrar"); createTld("tld"); persistResource( - AppEngineExtension.makeRegistrar1().asBuilder().setRegistrarId("ClientZ").build()); + JpaTransactionManagerExtension.makeRegistrar1() + .asBuilder() + .setRegistrarId("ClientZ") + .build()); } private void persistTestEntities(String domainName, boolean inactive) { diff --git a/core/src/test/java/google/registry/flows/domain/DomainPricingLogicTest.java b/core/src/test/java/google/registry/flows/domain/DomainPricingLogicTest.java index 03b09a9d9..f31c98387 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainPricingLogicTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainPricingLogicTest.java @@ -46,7 +46,8 @@ import google.registry.model.domain.DomainHistory; import google.registry.model.domain.fee.Fee; import google.registry.model.eppinput.EppInput; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeHttpSession; @@ -65,7 +66,8 @@ public class DomainPricingLogicTest { DomainPricingLogic domainPricingLogic; @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Inject Clock clock = new FakeClock(DateTime.now(UTC)); @Mock EppInput eppInput; diff --git a/core/src/test/java/google/registry/flows/domain/DomainRestoreRequestFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainRestoreRequestFlowTest.java index aa1b9b0af..449e218d6 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainRestoreRequestFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainRestoreRequestFlowTest.java @@ -75,16 +75,20 @@ import google.registry.model.reporting.DomainTransactionRecord.TransactionReport import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; import java.util.Map; import java.util.Optional; 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; /** Unit tests for {@link DomainRestoreRequestFlow}. */ class DomainRestoreRequestFlowTest extends ResourceFlowTestCase { + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); + private static final ImmutableMap FEE_06_MAP = ImmutableMap.of("FEE_VERSION", "0.6", "FEE_NS", "fee", "CURRENCY", "USD"); private static final ImmutableMap FEE_11_MAP = diff --git a/core/src/test/java/google/registry/flows/domain/DomainTransferFlowTestCase.java b/core/src/test/java/google/registry/flows/domain/DomainTransferFlowTestCase.java index 9a75d4524..78038ac26 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainTransferFlowTestCase.java +++ b/core/src/test/java/google/registry/flows/domain/DomainTransferFlowTestCase.java @@ -44,7 +44,7 @@ import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; import google.registry.model.transfer.TransferData; import google.registry.model.transfer.TransferStatus; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -86,7 +86,10 @@ abstract class DomainTransferFlowTestCase // Registrar ClientZ is used in tests that need another registrar that definitely doesn't own // the resources in question. persistResource( - AppEngineExtension.makeRegistrar1().asBuilder().setRegistrarId("ClientZ").build()); + JpaTransactionManagerExtension.makeRegistrar1() + .asBuilder() + .setRegistrarId("ClientZ") + .build()); } static Domain persistWithPendingTransfer(Domain domain) { diff --git a/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java index 957684537..ff06c2c24 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainUpdateFlowTest.java @@ -106,15 +106,19 @@ import google.registry.model.poll.PollMessage; import google.registry.model.tld.Registry; import google.registry.persistence.VKey; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; import java.util.Optional; 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; /** Unit tests for {@link DomainUpdateFlow}. */ class DomainUpdateFlowTest extends ResourceFlowTestCase { + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); + private static final DomainDsData SOME_DSDATA = DomainDsData.create( 1, diff --git a/core/src/test/java/google/registry/flows/domain/token/AllocationTokenFlowUtilsTest.java b/core/src/test/java/google/registry/flows/domain/token/AllocationTokenFlowUtilsTest.java index 95ce8c8b3..841aaf5cb 100644 --- a/core/src/test/java/google/registry/flows/domain/token/AllocationTokenFlowUtilsTest.java +++ b/core/src/test/java/google/registry/flows/domain/token/AllocationTokenFlowUtilsTest.java @@ -49,7 +49,8 @@ import google.registry.model.domain.token.AllocationToken.TokenStatus; import google.registry.model.domain.token.AllocationTokenExtension; import google.registry.model.reporting.HistoryEntry.HistoryEntryId; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import java.util.Optional; import org.joda.time.DateTime; @@ -64,7 +65,8 @@ class AllocationTokenFlowUtilsTest { new AllocationTokenFlowUtils(new AllocationTokenCustomLogic()); @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final AllocationTokenExtension allocationTokenExtension = mock(AllocationTokenExtension.class); diff --git a/core/src/test/java/google/registry/flows/host/HostCreateFlowTest.java b/core/src/test/java/google/registry/flows/host/HostCreateFlowTest.java index f2849087f..e7d8646db 100644 --- a/core/src/test/java/google/registry/flows/host/HostCreateFlowTest.java +++ b/core/src/test/java/google/registry/flows/host/HostCreateFlowTest.java @@ -54,12 +54,16 @@ import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; import google.registry.model.reporting.HistoryEntry; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link HostCreateFlow}. */ class HostCreateFlowTest extends ResourceFlowTestCase { + @RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension(); + private void setEppHostCreateInput(String hostName, String hostAddrs) { setEppInput( "host_create.xml", diff --git a/core/src/test/java/google/registry/flows/host/HostDeleteFlowTest.java b/core/src/test/java/google/registry/flows/host/HostDeleteFlowTest.java index 9ebeb286f..f2ff0f9a5 100644 --- a/core/src/test/java/google/registry/flows/host/HostDeleteFlowTest.java +++ b/core/src/test/java/google/registry/flows/host/HostDeleteFlowTest.java @@ -48,13 +48,17 @@ import google.registry.model.tld.Registry; import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferStatus; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; 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 HostDeleteFlow}. */ class HostDeleteFlowTest extends ResourceFlowTestCase { + @RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension(); + @BeforeEach void initFlowTest() { setEppInput("host_delete.xml", ImmutableMap.of("HOSTNAME", "ns1.example.tld")); diff --git a/core/src/test/java/google/registry/flows/host/HostFlowUtilsTest.java b/core/src/test/java/google/registry/flows/host/HostFlowUtilsTest.java index 06232d479..45abacb9a 100644 --- a/core/src/test/java/google/registry/flows/host/HostFlowUtilsTest.java +++ b/core/src/test/java/google/registry/flows/host/HostFlowUtilsTest.java @@ -25,7 +25,8 @@ import google.registry.flows.host.HostFlowUtils.HostNameNotPunyCodedException; import google.registry.flows.host.HostFlowUtils.HostNameTooLongException; import google.registry.flows.host.HostFlowUtils.HostNameTooShallowException; import google.registry.flows.host.HostFlowUtils.InvalidHostNameException; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -33,7 +34,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class HostFlowUtilsTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void test_validExternalHostName_validates() throws Exception { diff --git a/core/src/test/java/google/registry/flows/host/HostUpdateFlowTest.java b/core/src/test/java/google/registry/flows/host/HostUpdateFlowTest.java index 4432a16dc..b70024281 100644 --- a/core/src/test/java/google/registry/flows/host/HostUpdateFlowTest.java +++ b/core/src/test/java/google/registry/flows/host/HostUpdateFlowTest.java @@ -81,13 +81,17 @@ import google.registry.model.transfer.TransferStatus; import google.registry.persistence.VKey; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.DatabaseHelper; +import google.registry.testing.TaskQueueExtension; import javax.annotation.Nullable; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link HostUpdateFlow}. */ class HostUpdateFlowTest extends ResourceFlowTestCase { + @RegisterExtension TaskQueueExtension taskQueue = new TaskQueueExtension(); + private void setEppHostUpdateInput( String oldHostName, String newHostName, String ipOrStatusToAdd, String ipOrStatusToRem) { setEppInput( diff --git a/core/src/test/java/google/registry/model/EntityTestCase.java b/core/src/test/java/google/registry/model/EntityTestCase.java index f9473fd00..2f2852766 100644 --- a/core/src/test/java/google/registry/model/EntityTestCase.java +++ b/core/src/test/java/google/registry/model/EntityTestCase.java @@ -16,9 +16,13 @@ package google.registry.model; import static org.joda.time.DateTimeZone.UTC; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaEntityCoverageExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.RegisterExtension; /** Base class of all unit tests for entities which are persisted to SQL. */ @@ -36,18 +40,29 @@ public abstract class EntityTestCase { protected FakeClock fakeClock = new FakeClock(DateTime.now(UTC)); - @RegisterExtension public final AppEngineExtension appEngine; + @Order(Order.DEFAULT) + @RegisterExtension + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationTestExtension(); + + @Order(Order.DEFAULT + 1) + @RegisterExtension + final JpaEntityCoverageExtension coverage; protected EntityTestCase() { this(JpaEntityCoverageCheck.DISABLED); } protected EntityTestCase(JpaEntityCoverageCheck jpaEntityCoverageCheck) { - appEngine = - AppEngineExtension.builder() - .withCloudSql() - .enableJpaEntityCoverageCheck(jpaEntityCoverageCheck == JpaEntityCoverageCheck.ENABLED) - .withClock(fakeClock) - .build(); + coverage = + jpaEntityCoverageCheck == JpaEntityCoverageCheck.ENABLED + ? new JpaEntityCoverageExtension() + : new JpaEntityCoverageExtension() { + @Override + public void beforeEach(ExtensionContext context) {} + + @Override + public void afterEach(ExtensionContext context) {} + }; } } diff --git a/core/src/test/java/google/registry/model/EppResourceUtilsTest.java b/core/src/test/java/google/registry/model/EppResourceUtilsTest.java index ac91e1566..67e701f65 100644 --- a/core/src/test/java/google/registry/model/EppResourceUtilsTest.java +++ b/core/src/test/java/google/registry/model/EppResourceUtilsTest.java @@ -23,7 +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.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.joda.time.Duration; @@ -37,8 +38,8 @@ class EppResourceUtilsTest { private final FakeClock clock = new FakeClock(DateTime.now(UTC)); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/model/ImmutableObjectTest.java b/core/src/test/java/google/registry/model/ImmutableObjectTest.java index 9ef72a3ad..f8077254e 100644 --- a/core/src/test/java/google/registry/model/ImmutableObjectTest.java +++ b/core/src/test/java/google/registry/model/ImmutableObjectTest.java @@ -26,7 +26,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaUnitTestExtension; import google.registry.util.CidrAddressBlock; import java.lang.reflect.Field; import java.util.ArrayDeque; @@ -46,11 +47,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class ImmutableObjectTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .withJpaUnitTestEntities(ValueObject.class) - .build(); + final JpaUnitTestExtension jpa = + new JpaTestExtensions.Builder().withEntityClass(ValueObject.class).buildUnitTestExtension(); /** Simple subclass of ImmutableObject. */ public static class SimpleObject extends ImmutableObject { diff --git a/core/src/test/java/google/registry/model/ModelUtilsTest.java b/core/src/test/java/google/registry/model/ModelUtilsTest.java index a8dcd3600..ca609d4a4 100644 --- a/core/src/test/java/google/registry/model/ModelUtilsTest.java +++ b/core/src/test/java/google/registry/model/ModelUtilsTest.java @@ -17,19 +17,14 @@ package google.registry.model; import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; import java.lang.reflect.Field; import java.util.Map; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ModelUtils}. */ public class ModelUtilsTest { - @RegisterExtension - public AppEngineExtension appEngineExtension = new AppEngineExtension.Builder().build(); - /** Test class for reflection methods. */ public static class TestClass extends ImmutableObject implements Buildable { diff --git a/core/src/test/java/google/registry/model/OteAccountBuilderTest.java b/core/src/test/java/google/registry/model/OteAccountBuilderTest.java index 439726738..13b2cdf61 100644 --- a/core/src/test/java/google/registry/model/OteAccountBuilderTest.java +++ b/core/src/test/java/google/registry/model/OteAccountBuilderTest.java @@ -18,7 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth8.assertThat; import static google.registry.model.tld.Registry.TldState.GENERAL_AVAILABILITY; import static google.registry.model.tld.Registry.TldState.START_DATE_SUNRISE; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; import static google.registry.testing.CertificateSamples.SAMPLE_CERT; import static google.registry.testing.CertificateSamples.SAMPLE_CERT_HASH; import static google.registry.testing.DatabaseHelper.createTld; @@ -33,7 +33,8 @@ import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; import google.registry.model.tld.Registry; import google.registry.model.tld.Registry.TldState; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.util.CidrAddressBlock; import google.registry.util.SystemClock; import org.joda.money.Money; @@ -47,7 +48,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public final class OteAccountBuilderTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void testGetRegistrarToTldMap() { diff --git a/core/src/test/java/google/registry/model/OteStatsTest.java b/core/src/test/java/google/registry/model/OteStatsTest.java index e3f69d3a8..c4dcbd6e4 100644 --- a/core/src/test/java/google/registry/model/OteStatsTest.java +++ b/core/src/test/java/google/registry/model/OteStatsTest.java @@ -18,7 +18,8 @@ import static com.google.common.truth.Truth.assertThat; import static google.registry.testing.DatabaseHelper.createTld; import google.registry.model.OteStats.StatType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -26,7 +27,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public final class OteStatsTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/model/adapters/StatusValueAdapterTest.java b/core/src/test/java/google/registry/model/adapters/StatusValueAdapterTest.java index 1565d7005..c5de47c4b 100644 --- a/core/src/test/java/google/registry/model/adapters/StatusValueAdapterTest.java +++ b/core/src/test/java/google/registry/model/adapters/StatusValueAdapterTest.java @@ -28,18 +28,12 @@ import google.registry.model.eppoutput.EppOutput; import google.registry.model.eppoutput.EppResponse; import google.registry.model.host.HostCommand; import google.registry.model.host.HostInfoData; -import google.registry.testing.AppEngineExtension; import google.registry.testing.EppLoader; import google.registry.xml.ValidationMode; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; public class StatusValueAdapterTest { - // Needed to create Hosts. - @RegisterExtension - public AppEngineExtension appEngine = new AppEngineExtension.Builder().withCloudSql().build(); - @Test void testMarshalling() throws Exception { // Mangle the status value through marshalling by stuffing it in a host info response and then diff --git a/core/src/test/java/google/registry/model/contact/ContactCommandTest.java b/core/src/test/java/google/registry/model/contact/ContactCommandTest.java index 61d50e216..53d0edb14 100644 --- a/core/src/test/java/google/registry/model/contact/ContactCommandTest.java +++ b/core/src/test/java/google/registry/model/contact/ContactCommandTest.java @@ -25,17 +25,12 @@ import com.google.common.collect.ImmutableList; import google.registry.model.contact.ContactCommand.Update; import google.registry.model.contact.ContactCommand.Update.Change; import google.registry.model.eppinput.EppInput.ResourceCommandWrapper; -import google.registry.testing.AppEngineExtension; import google.registry.testing.EppLoader; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Test xml roundtripping of commands. */ public class ContactCommandTest { - @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - private void doXmlRoundtripTest(String inputFilename) throws Exception { EppLoader eppLoader = new EppLoader(this, inputFilename); // JAXB can unmarshal a "name" or an "id" into the "targetId" field, but when marshaling it diff --git a/core/src/test/java/google/registry/model/domain/DomainSqlTest.java b/core/src/test/java/google/registry/model/domain/DomainSqlTest.java index beee52028..b80fe856b 100644 --- a/core/src/test/java/google/registry/model/domain/DomainSqlTest.java +++ b/core/src/test/java/google/registry/model/domain/DomainSqlTest.java @@ -47,7 +47,8 @@ import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; import google.registry.model.transfer.ContactTransferData; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationWithCoverageExtension; import google.registry.testing.FakeClock; import google.registry.util.SerializeUtils; import java.util.Arrays; @@ -63,12 +64,8 @@ public class DomainSqlTest { protected FakeClock fakeClock = new FakeClock(DateTime.now(UTC)); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .enableJpaEntityCoverageCheck(true) - .withClock(fakeClock) - .build(); + final JpaIntegrationWithCoverageExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationWithCoverageExtension(); private Domain domain; private VKey contactKey; diff --git a/core/src/test/java/google/registry/model/domain/DomainTest.java b/core/src/test/java/google/registry/model/domain/DomainTest.java index fe83bea25..e1ee2f24d 100644 --- a/core/src/test/java/google/registry/model/domain/DomainTest.java +++ b/core/src/test/java/google/registry/model/domain/DomainTest.java @@ -65,7 +65,8 @@ import google.registry.model.tld.Registry; import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferStatus; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationWithCoverageExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import java.util.Optional; @@ -82,12 +83,8 @@ public class DomainTest { protected FakeClock fakeClock = new FakeClock(DateTime.now(UTC)); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .enableJpaEntityCoverageCheck(true) - .withClock(fakeClock) - .build(); + final JpaIntegrationWithCoverageExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationWithCoverageExtension(); private Domain domain; private VKey oneTimeBillKey; diff --git a/core/src/test/java/google/registry/model/domain/GracePeriodTest.java b/core/src/test/java/google/registry/model/domain/GracePeriodTest.java index 1a61838b3..8cae3768d 100644 --- a/core/src/test/java/google/registry/model/domain/GracePeriodTest.java +++ b/core/src/test/java/google/registry/model/domain/GracePeriodTest.java @@ -24,7 +24,8 @@ import google.registry.model.billing.BillingEvent.Recurring; import google.registry.model.domain.rgp.GracePeriodStatus; import google.registry.model.reporting.HistoryEntry.HistoryEntryId; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.joda.money.CurrencyUnit; import org.joda.money.Money; import org.joda.time.DateTime; @@ -36,10 +37,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class GracePeriodTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() // Needed to be able to construct Keys. - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DateTime now = DateTime.now(UTC); private BillingEvent.OneTime onetime; 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 6fc1459c1..662bab034 100644 --- a/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java +++ b/core/src/test/java/google/registry/model/poll/PollMessageExternalKeyConverterTest.java @@ -31,7 +31,8 @@ import google.registry.model.eppcommon.Trid; 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.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import org.joda.time.DateTime; @@ -43,7 +44,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class PollMessageExternalKeyConverterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private HistoryEntry historyEntry; private final FakeClock clock = new FakeClock(DateTime.parse("2007-07-07T01:01:01Z")); diff --git a/core/src/test/java/google/registry/model/smd/SignedMarkRevocationListTest.java b/core/src/test/java/google/registry/model/smd/SignedMarkRevocationListTest.java index 07b160d9a..bf83ace3c 100644 --- a/core/src/test/java/google/registry/model/smd/SignedMarkRevocationListTest.java +++ b/core/src/test/java/google/registry/model/smd/SignedMarkRevocationListTest.java @@ -20,7 +20,8 @@ import static org.joda.time.Duration.standardDays; import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; @@ -30,7 +31,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class SignedMarkRevocationListTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2013-01-01T00:00:00Z")); diff --git a/core/src/test/java/google/registry/model/tld/RegistriesTest.java b/core/src/test/java/google/registry/model/tld/RegistriesTest.java index b6ad68e5c..8295060fd 100644 --- a/core/src/test/java/google/registry/model/tld/RegistriesTest.java +++ b/core/src/test/java/google/registry/model/tld/RegistriesTest.java @@ -23,7 +23,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.net.InternetDomainName; import google.registry.model.tld.Registry.TldType; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -31,7 +32,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class RegistriesTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private void initTestTlds() { createTlds("foo", "a.b.c"); // Test a multipart tld. diff --git a/core/src/test/java/google/registry/model/tld/label/GenrulePremiumListTest.java b/core/src/test/java/google/registry/model/tld/label/GenrulePremiumListTest.java index f8e7033bc..eb4b52d0b 100644 --- a/core/src/test/java/google/registry/model/tld/label/GenrulePremiumListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/GenrulePremiumListTest.java @@ -21,11 +21,9 @@ import com.google.common.flogger.FluentLogger; import com.google.common.io.Resources; import com.google.common.reflect.ClassPath; import com.google.common.reflect.ClassPath.ResourceInfo; -import google.registry.testing.AppEngineExtension; import java.net.URL; import java.util.List; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Presubmit tests for {@link PremiumList} configuration files. */ class GenrulePremiumListTest { @@ -33,9 +31,6 @@ class GenrulePremiumListTest { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String LISTS_DIRECTORY = "google/registry/config/files/premium/"; - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void testParse_allPremiumLists() throws Exception { ClassPath classpath = ClassPath.from(getClass().getClassLoader()); diff --git a/core/src/test/java/google/registry/model/tld/label/GenruleReservedListTest.java b/core/src/test/java/google/registry/model/tld/label/GenruleReservedListTest.java index beb3d06f5..ce49d405a 100644 --- a/core/src/test/java/google/registry/model/tld/label/GenruleReservedListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/GenruleReservedListTest.java @@ -21,11 +21,9 @@ import com.google.common.flogger.FluentLogger; import com.google.common.io.Resources; import com.google.common.reflect.ClassPath; import com.google.common.reflect.ClassPath.ResourceInfo; -import google.registry.testing.AppEngineExtension; import java.net.URL; import java.util.List; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Presubmit tests for {@link ReservedList} configuration files. */ class GenruleReservedListTest { @@ -33,9 +31,6 @@ class GenruleReservedListTest { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String LISTS_DIRECTORY = "google/registry/config/files/reserved/"; - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void testParse_allReservedLists() throws Exception { ClassPath classpath = ClassPath.from(getClass().getClassLoader()); diff --git a/core/src/test/java/google/registry/model/tld/label/PremiumListDaoTest.java b/core/src/test/java/google/registry/model/tld/label/PremiumListDaoTest.java index 6e5a3cb60..20ded9d2b 100644 --- a/core/src/test/java/google/registry/model/tld/label/PremiumListDaoTest.java +++ b/core/src/test/java/google/registry/model/tld/label/PremiumListDaoTest.java @@ -28,7 +28,8 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.flogger.FluentLogger; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationWithCoverageExtension; import google.registry.testing.FakeClock; import google.registry.testing.TestCacheExtension; import java.math.BigDecimal; @@ -50,12 +51,8 @@ public class PremiumListDaoTest { private final FakeClock fakeClock = new FakeClock(); @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .enableJpaEntityCoverageCheck(true) - .withClock(fakeClock) - .build(); + final JpaIntegrationWithCoverageExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationWithCoverageExtension(); // Set long persist times on caches so they can be tested (cache times default to 0 in tests). @RegisterExtension diff --git a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java index 9c72fa5b0..8327cb671 100644 --- a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java @@ -29,7 +29,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.hash.BloomFilter; import google.registry.model.tld.Registry; import google.registry.model.tld.label.PremiumList.PremiumEntry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import java.math.BigDecimal; import org.joda.money.Money; import org.junit.jupiter.api.BeforeEach; @@ -40,7 +41,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class PremiumListTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void before() { diff --git a/core/src/test/java/google/registry/model/tld/label/PremiumListUtilsTest.java b/core/src/test/java/google/registry/model/tld/label/PremiumListUtilsTest.java index 9bf40dcf0..7abd8f5cb 100644 --- a/core/src/test/java/google/registry/model/tld/label/PremiumListUtilsTest.java +++ b/core/src/test/java/google/registry/model/tld/label/PremiumListUtilsTest.java @@ -20,17 +20,12 @@ import static org.joda.money.CurrencyUnit.USD; import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableList; -import google.registry.testing.AppEngineExtension; import java.math.BigDecimal; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link PremiumListUtils}. */ class PremiumListUtilsTest { - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void parseInputToPremiumList_works() { PremiumList premiumList = diff --git a/core/src/test/java/google/registry/model/tld/label/ReservedListTest.java b/core/src/test/java/google/registry/model/tld/label/ReservedListTest.java index 8a3f53362..d6ad3cfa3 100644 --- a/core/src/test/java/google/registry/model/tld/label/ReservedListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/ReservedListTest.java @@ -34,7 +34,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -47,8 +48,8 @@ class ReservedListTest { private FakeClock clock = new FakeClock(DateTime.parse("2010-01-01T10:00:00Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withClock(clock).withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/model/transfer/TransferDataTest.java b/core/src/test/java/google/registry/model/transfer/TransferDataTest.java index 07262810e..9a0857aa5 100644 --- a/core/src/test/java/google/registry/model/transfer/TransferDataTest.java +++ b/core/src/test/java/google/registry/model/transfer/TransferDataTest.java @@ -26,18 +26,13 @@ import google.registry.model.domain.Period; import google.registry.model.eppcommon.Trid; import google.registry.model.poll.PollMessage; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; 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 TransferData}. */ public class TransferDataTest { - @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - private final DateTime now = DateTime.now(UTC); private VKey transferBillingEventKey; diff --git a/core/src/test/java/google/registry/module/backend/BackendServletTest.java b/core/src/test/java/google/registry/module/backend/BackendServletTest.java index b5f5b7374..315aa9ac7 100644 --- a/core/src/test/java/google/registry/module/backend/BackendServletTest.java +++ b/core/src/test/java/google/registry/module/backend/BackendServletTest.java @@ -18,19 +18,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import google.registry.testing.AppEngineExtension; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link BackendServlet}. */ class BackendServletTest { - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().build(); - private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); diff --git a/core/src/test/java/google/registry/module/frontend/FrontendServletTest.java b/core/src/test/java/google/registry/module/frontend/FrontendServletTest.java index 45c776784..ab175d666 100644 --- a/core/src/test/java/google/registry/module/frontend/FrontendServletTest.java +++ b/core/src/test/java/google/registry/module/frontend/FrontendServletTest.java @@ -18,19 +18,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import google.registry.testing.AppEngineExtension; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link FrontendServlet}. */ class FrontendServletTest { - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().build(); - private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); diff --git a/core/src/test/java/google/registry/module/pubapi/PubApiServletTest.java b/core/src/test/java/google/registry/module/pubapi/PubApiServletTest.java index a49fced1b..ac5b48347 100644 --- a/core/src/test/java/google/registry/module/pubapi/PubApiServletTest.java +++ b/core/src/test/java/google/registry/module/pubapi/PubApiServletTest.java @@ -18,19 +18,13 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import google.registry.testing.AppEngineExtension; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link PubApiServlet}. */ class PubApiServletTest { - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().build(); - private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); diff --git a/core/src/test/java/google/registry/monitoring/whitebox/EppMetricTest.java b/core/src/test/java/google/registry/monitoring/whitebox/EppMetricTest.java index 1180c5771..548e17760 100644 --- a/core/src/test/java/google/registry/monitoring/whitebox/EppMetricTest.java +++ b/core/src/test/java/google/registry/monitoring/whitebox/EppMetricTest.java @@ -19,7 +19,8 @@ import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTlds; import com.google.common.collect.ImmutableSet; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -28,7 +29,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppMetricTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void test_invalidTld_isRecordedAsInvalid() { diff --git a/core/src/test/java/google/registry/persistence/converter/InetAddressSetConverterTest.java b/core/src/test/java/google/registry/persistence/converter/InetAddressSetConverterTest.java index 54cfdc7c1..fb5456271 100644 --- a/core/src/test/java/google/registry/persistence/converter/InetAddressSetConverterTest.java +++ b/core/src/test/java/google/registry/persistence/converter/InetAddressSetConverterTest.java @@ -22,7 +22,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.net.InetAddresses; import google.registry.model.ImmutableObject; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaUnitTestExtension; import java.net.InetAddress; import java.util.Set; import javax.annotation.Nullable; @@ -35,11 +36,10 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class InetAddressSetConverterTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .withJpaUnitTestEntities(InetAddressSetTestEntity.class) - .build(); + public final JpaUnitTestExtension jpa = + new JpaTestExtensions.Builder() + .withEntityClass(InetAddressSetTestEntity.class) + .buildUnitTestExtension(); @Test void roundTripConversion_returnsSameAddresses() { diff --git a/core/src/test/java/google/registry/persistence/transaction/DummyJpaTransactionManagerTest.java b/core/src/test/java/google/registry/persistence/transaction/DummyJpaTransactionManagerTest.java index c5a8bb229..d2f15f570 100644 --- a/core/src/test/java/google/registry/persistence/transaction/DummyJpaTransactionManagerTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/DummyJpaTransactionManagerTest.java @@ -17,15 +17,11 @@ package google.registry.persistence.transaction; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; import static org.junit.jupiter.api.Assertions.assertThrows; -import google.registry.testing.AppEngineExtension; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** JUnit test for {@link DummyJpaTransactionManager} */ class DummyJpaTransactionManagerTest { - @RegisterExtension final AppEngineExtension appEngine = AppEngineExtension.builder().build(); - @Test void throwsExceptionWhenAnyMethodIsInvoked() { assertThrows(UnsupportedOperationException.class, () -> tm().transact(() -> null)); diff --git a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerExtension.java b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerExtension.java index d304df01b..7275b99b3 100644 --- a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerExtension.java +++ b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerExtension.java @@ -54,6 +54,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Properties; +import java.util.TimeZone; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.persistence.Entity; @@ -80,7 +81,8 @@ import org.testcontainers.containers.PostgreSQLContainer; * itself, so that all SQL queries will be sent to the database instance created by {@link * PostgreSQLContainer} to achieve test purpose. */ -abstract class JpaTransactionManagerExtension implements BeforeEachCallback, AfterEachCallback { +public abstract class JpaTransactionManagerExtension + implements BeforeEachCallback, AfterEachCallback { private static final String DB_CLEANUP_SQL_PATH = "google/registry/persistence/transaction/cleanup_database.sql"; @@ -113,9 +115,11 @@ abstract class JpaTransactionManagerExtension implements BeforeEachCallback, Aft // to false. private boolean includeNomulusSchema = true; - // Whether to prepolulate some registrars for ease of testing. + // Whether to pre-polulate some registrars for ease of testing. private final boolean withCannedData; + private TimeZone originalDefaultTimeZone; + JpaTransactionManagerExtension( Clock clock, Optional initScriptPath, @@ -206,6 +210,8 @@ abstract class JpaTransactionManagerExtension implements BeforeEachCallback, Aft @Override public void beforeEach(ExtensionContext context) throws Exception { + originalDefaultTimeZone = TimeZone.getDefault(); + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); if (entityHash == emfEntityHash) { checkState(emf != null, "Missing EntityManagerFactory."); resetTablesAndSequences(); @@ -217,6 +223,16 @@ abstract class JpaTransactionManagerExtension implements BeforeEachCallback, Aft TransactionManagerFactory.setJpaTm(Suppliers.ofInstance(txnManager)); TransactionManagerFactory.setReplicaJpaTm( Suppliers.ofInstance(new ReplicaSimulatingJpaTransactionManager(txnManager))); + // Reset SQL Sequence based id allocation so that ids are deterministic in tests. + TransactionManagerFactory.tm() + .transact( + () -> + TransactionManagerFactory.tm() + .getEntityManager() + .createNativeQuery( + "alter sequence if exists project_wide_unique_id_seq start 1 minvalue 1" + + " restart with 1") + .executeUpdate()); if (withCannedData) { loadInitialData(); } @@ -227,6 +243,7 @@ abstract class JpaTransactionManagerExtension implements BeforeEachCallback, Aft TransactionManagerFactory.setJpaTm(Suppliers.ofInstance(cachedTm)); TransactionManagerFactory.setReplicaJpaTm(Suppliers.ofInstance(cachedTm)); cachedTm = null; + TimeZone.setDefault(originalDefaultTimeZone); } public JdbcDatabaseContainer getDatabase() { diff --git a/core/src/test/java/google/registry/pricing/PricingEngineProxyTest.java b/core/src/test/java/google/registry/pricing/PricingEngineProxyTest.java index bf7345f31..86560c391 100644 --- a/core/src/test/java/google/registry/pricing/PricingEngineProxyTest.java +++ b/core/src/test/java/google/registry/pricing/PricingEngineProxyTest.java @@ -28,7 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableSortedMap; import google.registry.model.tld.Registry; import google.registry.model.tld.label.PremiumList; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.util.Clock; import org.joda.money.Money; @@ -41,7 +42,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class PricingEngineProxyTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private Clock clock; diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java index fa36f8d18..d268b9f12 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java @@ -24,11 +24,12 @@ import static org.mockito.Mockito.mock; import com.google.appengine.api.users.User; import com.google.gson.JsonObject; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Actions; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.UserAuthInfo; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.util.Idn; @@ -43,7 +44,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; abstract class RdapActionBaseTestCase { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); protected static final AuthResult AUTH_RESULT = AuthResult.create( diff --git a/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java b/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java index e1183e8f0..02a8cf2aa 100644 --- a/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java +++ b/core/src/test/java/google/registry/rdap/RdapJsonFormatterTest.java @@ -42,12 +42,13 @@ import google.registry.model.registrar.RegistrarPoc; import google.registry.model.reporting.HistoryEntry; import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferStatus; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.rdap.RdapJsonFormatter.OutputDataType; import google.registry.rdap.RdapObjectClasses.BoilerplateType; import google.registry.rdap.RdapObjectClasses.RdapEntity; 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.FullFieldsTestEntityHelper; import org.joda.time.DateTime; @@ -59,7 +60,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class RdapJsonFormatterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("1999-01-01T00:00:00Z")); diff --git a/core/src/test/java/google/registry/rdap/UpdateRegistrarRdapBaseUrlsActionTest.java b/core/src/test/java/google/registry/rdap/UpdateRegistrarRdapBaseUrlsActionTest.java index 2daa8a9f2..78cadc312 100644 --- a/core/src/test/java/google/registry/rdap/UpdateRegistrarRdapBaseUrlsActionTest.java +++ b/core/src/test/java/google/registry/rdap/UpdateRegistrarRdapBaseUrlsActionTest.java @@ -15,7 +15,6 @@ package google.registry.rdap; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth8.assertThat; import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.loadRegistrar; import static google.registry.testing.DatabaseHelper.persistSimpleResource; @@ -31,7 +30,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarAddress; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -58,8 +58,8 @@ public final class UpdateRegistrarRdapBaseUrlsActionTest { + " Registrar,Reserved,\n"; @RegisterExtension - public AppEngineExtension appEngineExtension = - new AppEngineExtension.Builder().withCloudSql().build(); + public JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private static class TestHttpTransport extends MockHttpTransport { private MockLowLevelHttpRequest requestSent; diff --git a/core/src/test/java/google/registry/rde/BrdaCopyActionTest.java b/core/src/test/java/google/registry/rde/BrdaCopyActionTest.java index b413faf23..5ba60f216 100644 --- a/core/src/test/java/google/registry/rde/BrdaCopyActionTest.java +++ b/core/src/test/java/google/registry/rde/BrdaCopyActionTest.java @@ -37,8 +37,9 @@ import google.registry.model.common.Cursor; import google.registry.model.rde.RdeMode; import google.registry.model.rde.RdeRevision; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.NoContentException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.BouncyCastleProviderExtension; import google.registry.testing.FakeKeyringModule; import google.registry.testing.GpgSystemCommandExtension; @@ -73,7 +74,8 @@ public class BrdaCopyActionTest { public final BouncyCastleProviderExtension bouncy = new BouncyCastleProviderExtension(); @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @RegisterExtension public final GpgSystemCommandExtension gpg = diff --git a/core/src/test/java/google/registry/rde/ContactToXjcConverterTest.java b/core/src/test/java/google/registry/rde/ContactToXjcConverterTest.java index 6928ab980..b213ae25d 100644 --- a/core/src/test/java/google/registry/rde/ContactToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/ContactToXjcConverterTest.java @@ -33,7 +33,8 @@ import google.registry.model.eppcommon.StatusValue; import google.registry.model.eppcommon.Trid; import google.registry.model.transfer.ContactTransferData; import google.registry.model.transfer.TransferStatus; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.xjc.contact.XjcContactPostalInfoEnumType; import google.registry.xjc.contact.XjcContactPostalInfoType; import google.registry.xjc.contact.XjcContactStatusType; @@ -60,7 +61,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class ContactToXjcConverterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java b/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java index 6e7eb4c32..07137c4c7 100644 --- a/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/DomainToXjcConverterTest.java @@ -54,7 +54,8 @@ import google.registry.model.rde.RdeMode; import google.registry.model.reporting.HistoryEntry; import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferStatus; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.util.Idn; @@ -84,7 +85,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class DomainToXjcConverterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DateTime now = DateTime.parse("2014-01-01T00:00:00Z"); private final FakeClock clock = new FakeClock(now); diff --git a/core/src/test/java/google/registry/rde/EscrowTaskRunnerTest.java b/core/src/test/java/google/registry/rde/EscrowTaskRunnerTest.java index a4f0eb0d3..41b8446e3 100644 --- a/core/src/test/java/google/registry/rde/EscrowTaskRunnerTest.java +++ b/core/src/test/java/google/registry/rde/EscrowTaskRunnerTest.java @@ -27,10 +27,11 @@ import static org.mockito.Mockito.verify; import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.rde.EscrowTaskRunner.EscrowTask; import google.registry.request.HttpException.NoContentException; import google.registry.request.HttpException.ServiceUnavailableException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeLockHandler; import org.joda.time.DateTime; @@ -44,8 +45,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class EscrowTaskRunnerTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final EscrowTask task = mock(EscrowTask.class); private final FakeClock clock = new FakeClock(DateTime.parse("2000-01-01TZ")); diff --git a/core/src/test/java/google/registry/rde/HostToXjcConverterTest.java b/core/src/test/java/google/registry/rde/HostToXjcConverterTest.java index 27141a64b..fe6b2ba01 100644 --- a/core/src/test/java/google/registry/rde/HostToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/HostToXjcConverterTest.java @@ -25,7 +25,8 @@ import com.google.common.net.InetAddresses; import google.registry.model.domain.Domain; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.xjc.host.XjcHostStatusType; import google.registry.xjc.host.XjcHostStatusValueType; @@ -46,7 +47,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class HostToXjcConverterTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java b/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java index d6e76035e..ce1999943 100644 --- a/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java +++ b/core/src/test/java/google/registry/rde/PendingDepositCheckerTest.java @@ -32,7 +32,8 @@ import com.google.common.truth.Truth8; import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.junit.jupiter.api.BeforeEach; @@ -43,7 +44,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class PendingDepositCheckerTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(); private final PendingDepositChecker checker = new PendingDepositChecker(); diff --git a/core/src/test/java/google/registry/rde/RdeMarshallerTest.java b/core/src/test/java/google/registry/rde/RdeMarshallerTest.java index ea8ff5f99..6bb996816 100644 --- a/core/src/test/java/google/registry/rde/RdeMarshallerTest.java +++ b/core/src/test/java/google/registry/rde/RdeMarshallerTest.java @@ -18,7 +18,8 @@ import static com.google.common.truth.Truth.assertThat; import static google.registry.testing.DatabaseHelper.loadRegistrar; import static google.registry.xml.ValidationMode.STRICT; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.xml.XmlTestUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -30,7 +31,8 @@ public class RdeMarshallerTest { "\n"; @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Test void testMarshalRegistrar_validData_producesXmlFragment() throws Exception { diff --git a/core/src/test/java/google/registry/rde/RdeReportActionTest.java b/core/src/test/java/google/registry/rde/RdeReportActionTest.java index 98e8da1a4..9b2a9f547 100644 --- a/core/src/test/java/google/registry/rde/RdeReportActionTest.java +++ b/core/src/test/java/google/registry/rde/RdeReportActionTest.java @@ -48,9 +48,10 @@ import google.registry.gcs.GcsUtils; import google.registry.model.common.Cursor; import google.registry.model.rde.RdeRevision; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.InternalServerErrorException; import google.registry.request.HttpException.NoContentException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.BouncyCastleProviderExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeKeyringModule; @@ -82,7 +83,8 @@ public class RdeReportActionTest { public final BouncyCastleProviderExtension bouncy = new BouncyCastleProviderExtension(); @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeResponse response = new FakeResponse(); private final EscrowTaskRunner runner = mock(EscrowTaskRunner.class); diff --git a/core/src/test/java/google/registry/rde/RdeStagingActionTest.java b/core/src/test/java/google/registry/rde/RdeStagingActionTest.java index 1b470bdec..46bcba2eb 100644 --- a/core/src/test/java/google/registry/rde/RdeStagingActionTest.java +++ b/core/src/test/java/google/registry/rde/RdeStagingActionTest.java @@ -30,8 +30,9 @@ import com.google.common.collect.ImmutableSet; import google.registry.beam.BeamActionTestBase; import google.registry.gcs.GcsUtils; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.BadRequestException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import java.nio.charset.StandardCharsets; import java.util.Optional; @@ -50,8 +51,8 @@ public class RdeStagingActionTest extends BeamActionTestBase { private final RdeStagingAction action = new RdeStagingAction(); @RegisterExtension - public final AppEngineExtension extension = - AppEngineExtension.builder().withClock(clock).withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @BeforeEach @Override diff --git a/core/src/test/java/google/registry/rde/RdeUploadActionTest.java b/core/src/test/java/google/registry/rde/RdeUploadActionTest.java index c668fc6d7..e0dda61f1 100644 --- a/core/src/test/java/google/registry/rde/RdeUploadActionTest.java +++ b/core/src/test/java/google/registry/rde/RdeUploadActionTest.java @@ -55,10 +55,11 @@ import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; import google.registry.model.rde.RdeRevision; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.rde.JSchSshSession.JSchSshSessionFactory; import google.registry.request.HttpException.NoContentException; import google.registry.request.RequestParameters; -import google.registry.testing.AppEngineExtension; import google.registry.testing.BouncyCastleProviderExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; @@ -131,8 +132,8 @@ public class RdeUploadActionTest { RdeTestData.loadBytes("pgp-private-keyring-escrow.asc")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final PGPPublicKey encryptKey = new FakeKeyringModule().get().getRdeStagingEncryptionKey(); diff --git a/core/src/test/java/google/registry/rde/RegistrarToXjcConverterTest.java b/core/src/test/java/google/registry/rde/RegistrarToXjcConverterTest.java index af90729f7..f31085ef7 100644 --- a/core/src/test/java/google/registry/rde/RegistrarToXjcConverterTest.java +++ b/core/src/test/java/google/registry/rde/RegistrarToXjcConverterTest.java @@ -24,7 +24,8 @@ import com.google.common.collect.ImmutableList; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.Registrar.State; import google.registry.model.registrar.RegistrarAddress; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.xjc.rderegistrar.XjcRdeRegistrar; import google.registry.xjc.rderegistrar.XjcRdeRegistrarAddrType; @@ -48,8 +49,8 @@ public class RegistrarToXjcConverterTest { private final FakeClock clock = new FakeClock(DateTime.parse("2013-01-01T00:00:00Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); private Registrar registrar; diff --git a/core/src/test/java/google/registry/reporting/billing/CopyDetailReportsActionTest.java b/core/src/test/java/google/registry/reporting/billing/CopyDetailReportsActionTest.java index 35867b9f5..66b687997 100644 --- a/core/src/test/java/google/registry/reporting/billing/CopyDetailReportsActionTest.java +++ b/core/src/test/java/google/registry/reporting/billing/CopyDetailReportsActionTest.java @@ -32,8 +32,9 @@ import com.google.cloud.storage.BlobId; import com.google.cloud.storage.contrib.nio.testing.LocalStorageHelper; import com.google.common.net.MediaType; import google.registry.gcs.GcsUtils; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.storage.drive.DriveConnection; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.FakeSleeper; @@ -47,7 +48,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class CopyDetailReportsActionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final GcsUtils gcsUtils = new GcsUtils(LocalStorageHelper.getOptions()); diff --git a/core/src/test/java/google/registry/reporting/billing/GenerateInvoicesActionTest.java b/core/src/test/java/google/registry/reporting/billing/GenerateInvoicesActionTest.java index fafb4f09b..476ff8499 100644 --- a/core/src/test/java/google/registry/reporting/billing/GenerateInvoicesActionTest.java +++ b/core/src/test/java/google/registry/reporting/billing/GenerateInvoicesActionTest.java @@ -27,8 +27,9 @@ import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.net.MediaType; import google.registry.beam.BeamActionTestBase; import google.registry.model.common.Cursor; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.reporting.ReportingModule; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -45,8 +46,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class GenerateInvoicesActionTest extends BeamActionTestBase { @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final BillingEmailUtils emailUtils = mock(BillingEmailUtils.class); private FakeClock clock = new FakeClock(); diff --git a/core/src/test/java/google/registry/reporting/billing/PublishInvoicesActionTest.java b/core/src/test/java/google/registry/reporting/billing/PublishInvoicesActionTest.java index 8ae7b8f3d..48d2e7bfa 100644 --- a/core/src/test/java/google/registry/reporting/billing/PublishInvoicesActionTest.java +++ b/core/src/test/java/google/registry/reporting/billing/PublishInvoicesActionTest.java @@ -31,7 +31,6 @@ import com.google.api.services.dataflow.Dataflow.Projects.Locations.Jobs.Get; import com.google.api.services.dataflow.model.Job; import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.net.MediaType; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeResponse; @@ -40,7 +39,6 @@ import java.io.IOException; import org.joda.time.YearMonth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link PublishInvoicesAction}. */ class PublishInvoicesActionTest { @@ -57,9 +55,6 @@ class PublishInvoicesActionTest { private final CloudTasksUtils cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils(); private PublishInvoicesAction uploadAction; - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withTaskQueue().build(); - @BeforeEach void beforeEach() throws IOException { when(dataflow.projects()).thenReturn(projects); diff --git a/core/src/test/java/google/registry/reporting/icann/ActivityReportingQueryBuilderTest.java b/core/src/test/java/google/registry/reporting/icann/ActivityReportingQueryBuilderTest.java index 4367faf9b..015f8bdfa 100644 --- a/core/src/test/java/google/registry/reporting/icann/ActivityReportingQueryBuilderTest.java +++ b/core/src/test/java/google/registry/reporting/icann/ActivityReportingQueryBuilderTest.java @@ -18,18 +18,12 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; import org.joda.time.YearMonth; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ActivityReportingQueryBuilder}. */ class ActivityReportingQueryBuilderTest { - @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); - private final YearMonth yearMonth = new YearMonth(2017, 9); private ActivityReportingQueryBuilder createQueryBuilder(String datasetName) { diff --git a/core/src/test/java/google/registry/reporting/icann/IcannHttpReporterTest.java b/core/src/test/java/google/registry/reporting/icann/IcannHttpReporterTest.java index 5e6280f4f..34bd24980 100644 --- a/core/src/test/java/google/registry/reporting/icann/IcannHttpReporterTest.java +++ b/core/src/test/java/google/registry/reporting/icann/IcannHttpReporterTest.java @@ -31,7 +31,8 @@ import com.google.api.client.testing.http.MockLowLevelHttpResponse; import com.google.api.client.util.Base64; import com.google.api.client.util.StringUtils; import com.google.common.io.ByteSource; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import java.io.IOException; import java.util.List; import java.util.Map; @@ -49,7 +50,8 @@ class IcannHttpReporterTest { private MockLowLevelHttpRequest mockRequest; @RegisterExtension - AppEngineExtension appEngineExtension = new AppEngineExtension.Builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private MockHttpTransport createMockTransport( int statusCode, final ByteSource iirdeaResponse) { diff --git a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagerTest.java b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagerTest.java index 5e60af85f..5ab2921b0 100644 --- a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagerTest.java +++ b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagerTest.java @@ -31,13 +31,11 @@ import google.registry.bigquery.BigqueryConnection.DestinationTable; import google.registry.bigquery.BigqueryUtils.TableType; import google.registry.gcs.GcsUtils; import google.registry.reporting.icann.IcannReportingModule.ReportType; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeResponse; import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import org.joda.time.YearMonth; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link google.registry.reporting.icann.IcannReportingStager}. */ class IcannReportingStagerTest { @@ -48,10 +46,6 @@ class IcannReportingStagerTest { private String subdir = "icann/monthly/2017-06"; private GcsUtils gcsUtils = new GcsUtils(LocalStorageHelper.getOptions()); - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().build(); - private IcannReportingStager createStager() { IcannReportingStager action = new IcannReportingStager(); ActivityReportingQueryBuilder activityBuilder = diff --git a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java index 32d11b2e9..11048842f 100644 --- a/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java +++ b/core/src/test/java/google/registry/reporting/icann/IcannReportingStagingActionTest.java @@ -27,7 +27,6 @@ import com.google.common.collect.ImmutableSet; import google.registry.bigquery.BigqueryJobFailureException; import google.registry.reporting.icann.IcannReportingModule.ReportType; import google.registry.request.HttpException.BadRequestException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -43,7 +42,6 @@ import org.joda.time.Duration; import org.joda.time.YearMonth; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link google.registry.reporting.icann.IcannReportingStagingAction}. */ class IcannReportingStagingActionTest { @@ -56,10 +54,6 @@ class IcannReportingStagingActionTest { private FakeClock clock = new FakeClock(DateTime.parse("2021-01-02T11:00:00Z")); private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); - @BeforeEach void beforeEach() throws Exception { action = new IcannReportingStagingAction(); diff --git a/core/src/test/java/google/registry/reporting/icann/IcannReportingUploadActionTest.java b/core/src/test/java/google/registry/reporting/icann/IcannReportingUploadActionTest.java index 9f25098cf..888238a05 100644 --- a/core/src/test/java/google/registry/reporting/icann/IcannReportingUploadActionTest.java +++ b/core/src/test/java/google/registry/reporting/icann/IcannReportingUploadActionTest.java @@ -34,8 +34,9 @@ import google.registry.gcs.GcsUtils; import google.registry.model.common.Cursor; import google.registry.model.common.Cursor.CursorType; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.ServiceUnavailableException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeLockHandler; import google.registry.testing.FakeResponse; @@ -56,7 +57,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class IcannReportingUploadActionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private static final byte[] PAYLOAD_SUCCESS = "test,csv\n13,37".getBytes(UTF_8); private static final byte[] PAYLOAD_FAIL = "ahah,csv\n12,34".getBytes(UTF_8); diff --git a/core/src/test/java/google/registry/reporting/icann/TransactionsReportingQueryBuilderTest.java b/core/src/test/java/google/registry/reporting/icann/TransactionsReportingQueryBuilderTest.java index 4a10e8133..48524baa0 100644 --- a/core/src/test/java/google/registry/reporting/icann/TransactionsReportingQueryBuilderTest.java +++ b/core/src/test/java/google/registry/reporting/icann/TransactionsReportingQueryBuilderTest.java @@ -18,18 +18,12 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import google.registry.testing.AppEngineExtension; import org.joda.time.YearMonth; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link ActivityReportingQueryBuilder}. */ class TransactionsReportingQueryBuilderTest { - @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); - private final YearMonth yearMonth = new YearMonth(2017, 9); private TransactionsReportingQueryBuilder createQueryBuilder(String datasetName) { diff --git a/core/src/test/java/google/registry/reporting/spec11/GenerateSpec11ReportActionTest.java b/core/src/test/java/google/registry/reporting/spec11/GenerateSpec11ReportActionTest.java index 5c6ba202d..cc71db739 100644 --- a/core/src/test/java/google/registry/reporting/spec11/GenerateSpec11ReportActionTest.java +++ b/core/src/test/java/google/registry/reporting/spec11/GenerateSpec11ReportActionTest.java @@ -23,7 +23,6 @@ import com.google.cloud.tasks.v2.HttpMethod; import com.google.common.net.MediaType; import google.registry.beam.BeamActionTestBase; import google.registry.reporting.ReportingModule; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.FakeClock; @@ -32,15 +31,10 @@ import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.Duration; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link GenerateSpec11ReportAction}. */ class GenerateSpec11ReportActionTest extends BeamActionTestBase { - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); - private final FakeClock clock = new FakeClock(DateTime.parse("2018-06-11T12:23:56Z")); private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); private CloudTasksUtils cloudTasksUtils = cloudTasksHelper.getTestCloudTasksUtils(); diff --git a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java index 4da3c1e0b..e2092fa49 100644 --- a/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java +++ b/core/src/test/java/google/registry/reporting/spec11/Spec11EmailUtilsTest.java @@ -17,6 +17,7 @@ package google.registry.reporting.spec11; import static com.google.common.truth.Truth.assertThat; import static google.registry.model.eppcommon.StatusValue.CLIENT_HOLD; import static google.registry.model.eppcommon.StatusValue.SERVER_HOLD; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrarContact2; import static google.registry.reporting.spec11.Spec11RegistrarThreatMatchesParserTest.getMatchA; import static google.registry.reporting.spec11.Spec11RegistrarThreatMatchesParserTest.getMatchB; import static google.registry.reporting.spec11.Spec11RegistrarThreatMatchesParserTest.sampleThreatMatches; @@ -36,8 +37,9 @@ import com.google.common.collect.ImmutableSet; import com.google.common.net.MediaType; import google.registry.model.domain.Domain; import google.registry.model.host.Host; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.reporting.spec11.soy.Spec11EmailSoyInfo; -import google.registry.testing.AppEngineExtension; import google.registry.testing.DatabaseHelper; import google.registry.util.EmailMessage; import google.registry.util.SendEmailService; @@ -93,7 +95,8 @@ class Spec11EmailUtilsTest { + " notice, please contact abuse@test.com.

"; @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private SendEmailService emailService; private Spec11EmailUtils emailUtils; @@ -350,7 +353,7 @@ class Spec11EmailUtilsTest { void testSuccess_useWhoisAbuseEmailIfAvailable() throws Exception { // if John Doe is the whois abuse contact, email them instead of the regular email persistResource( - AppEngineExtension.makeRegistrarContact2() + makeRegistrarContact2() .asBuilder() .setEmailAddress("johndoe@theregistrar.com") .setVisibleInDomainWhoisAsAbuse(true) diff --git a/core/src/test/java/google/registry/request/RequestHandlerTest.java b/core/src/test/java/google/registry/request/RequestHandlerTest.java index 6684adbd0..05ac35cae 100644 --- a/core/src/test/java/google/registry/request/RequestHandlerTest.java +++ b/core/src/test/java/google/registry/request/RequestHandlerTest.java @@ -36,8 +36,6 @@ import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.RequestAuthenticator; import google.registry.request.auth.UserAuthInfo; -import google.registry.testing.AppEngineExtension; -import google.registry.testing.UserInfo; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Optional; @@ -46,18 +44,10 @@ import javax.servlet.http.HttpServletResponse; 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 RequestHandler}. */ public final class RequestHandlerTest { - @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .withUserService(UserInfo.create("test@example.com")) - .build(); - @Action( service = Action.Service.DEFAULT, path = "/bumblebee", 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 0b0d897e5..7cf8200e3 100644 --- a/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java +++ b/core/src/test/java/google/registry/request/auth/AuthenticatedRegistrarAccessorTest.java @@ -38,8 +38,9 @@ import google.registry.model.console.RegistrarRole; import google.registry.model.console.UserRoles; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.Registrar.State; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.auth.AuthenticatedRegistrarAccessor.RegistrarAccessDeniedException; -import google.registry.testing.AppEngineExtension; import google.registry.util.JdkLoggerConfig; import java.util.Optional; import java.util.logging.Level; @@ -61,7 +62,8 @@ import org.mockito.quality.Strictness; class AuthenticatedRegistrarAccessorTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock private HttpServletRequest req; @Mock private HttpServletResponse rsp; diff --git a/core/src/test/java/google/registry/request/auth/LegacyAuthenticationMechanismTest.java b/core/src/test/java/google/registry/request/auth/LegacyAuthenticationMechanismTest.java index ffafefadc..57f428177 100644 --- a/core/src/test/java/google/registry/request/auth/LegacyAuthenticationMechanismTest.java +++ b/core/src/test/java/google/registry/request/auth/LegacyAuthenticationMechanismTest.java @@ -24,8 +24,9 @@ import static org.mockito.Mockito.when; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import javax.servlet.http.HttpServletRequest; import org.junit.jupiter.api.AfterEach; @@ -43,7 +44,8 @@ import org.mockito.quality.Strictness; final class LegacyAuthenticationMechanismTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @Mock private UserService userService; @Mock private HttpServletRequest req; diff --git a/core/src/test/java/google/registry/request/auth/RequestAuthenticatorTest.java b/core/src/test/java/google/registry/request/auth/RequestAuthenticatorTest.java index b7cca3ac1..4757766ff 100644 --- a/core/src/test/java/google/registry/request/auth/RequestAuthenticatorTest.java +++ b/core/src/test/java/google/registry/request/auth/RequestAuthenticatorTest.java @@ -26,11 +26,12 @@ import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.auth.RequestAuthenticator.AuthMethod; import google.registry.request.auth.RequestAuthenticator.AuthSettings; import google.registry.request.auth.RequestAuthenticator.UserPolicy; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeOAuthService; import google.registry.testing.FakeUserService; @@ -44,7 +45,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class RequestAuthenticatorTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private static final AuthSettings AUTH_NONE = AuthSettings.create( diff --git a/core/src/test/java/google/registry/request/lock/LockHandlerImplTest.java b/core/src/test/java/google/registry/request/lock/LockHandlerImplTest.java index 21601f344..d00c2d257 100644 --- a/core/src/test/java/google/registry/request/lock/LockHandlerImplTest.java +++ b/core/src/test/java/google/registry/request/lock/LockHandlerImplTest.java @@ -21,8 +21,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import google.registry.model.server.Lock; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; +import google.registry.testing.UserServiceExtension; import google.registry.util.RequestStatusCheckerImpl; import java.util.Optional; import java.util.concurrent.Callable; @@ -40,8 +40,9 @@ final class LockHandlerImplTest { private final FakeClock clock = new FakeClock(DateTime.parse("2001-08-29T12:20:00Z")); - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + // We do not actually need to set up user service, rather, we just need this extension to set up + // App Engine environment so the status checker can make an App Engine API call. + @RegisterExtension UserServiceExtension userService = new UserServiceExtension(""); private static class CountingCallable implements Callable { int numCalled; diff --git a/core/src/test/java/google/registry/schema/integration/SqlIntegrationTestSuite.java b/core/src/test/java/google/registry/schema/integration/SqlIntegrationTestSuite.java index 5272899d0..d8e5e2d6d 100644 --- a/core/src/test/java/google/registry/schema/integration/SqlIntegrationTestSuite.java +++ b/core/src/test/java/google/registry/schema/integration/SqlIntegrationTestSuite.java @@ -43,7 +43,6 @@ import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationW import google.registry.schema.integration.SqlIntegrationTestSuite.AfterSuiteTest; import google.registry.schema.integration.SqlIntegrationTestSuite.BeforeSuiteTest; import google.registry.schema.registrar.RegistrarDaoTest; -import google.registry.testing.AppEngineExtension; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -56,9 +55,9 @@ import org.junit.runner.RunWith; * server/schema compatibility tests between releases. * *

Suite members are typically DAO tests, which perform simple create/update/delete operations on - * JPA entities. Each member class must call {@link - * AppEngineExtension.Builder#enableJpaEntityCoverageCheck} and have at least one test method that - * persists a JPA entity declared in persistence.xml. + * JPA entities. Each member class must register a {@link + * google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationWithCoverageExtension} + * and have at least one test method that persists a JPA entity declared in persistence.xml. * *

Note that with {@link JpaIntegrationWithCoverageExtension}, each method starts with an empty * database. Therefore this is not the right place for verifying backwards data compatibility in diff --git a/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java b/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java index 64a064cce..c1cbdc4d4 100644 --- a/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java +++ b/core/src/test/java/google/registry/security/XsrfTokenManagerTest.java @@ -19,7 +19,8 @@ import static google.registry.util.DateTimeUtils.START_OF_TIME; import com.google.appengine.api.users.User; import com.google.common.base.Splitter; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeUserService; import org.joda.time.Duration; @@ -31,7 +32,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class XsrfTokenManagerTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final User testUser = new User("test@example.com", "test@example.com"); private final FakeClock clock = new FakeClock(START_OF_TIME); diff --git a/core/src/test/java/google/registry/server/RegistryTestServerMain.java b/core/src/test/java/google/registry/server/RegistryTestServerMain.java index 416e86a08..1d5a125b1 100644 --- a/core/src/test/java/google/registry/server/RegistryTestServerMain.java +++ b/core/src/test/java/google/registry/server/RegistryTestServerMain.java @@ -23,9 +23,10 @@ import google.registry.model.console.GlobalRole; import google.registry.model.console.User; import google.registry.model.console.UserRoles; import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import google.registry.request.auth.IapHeaderAuthenticationMechanism; -import google.registry.testing.AppEngineExtension; import google.registry.testing.UserInfo; +import google.registry.testing.UserServiceExtension; import google.registry.tools.params.HostAndPortParameter; import google.registry.ui.ConsoleDebug; import java.util.List; @@ -131,17 +132,10 @@ public final class RegistryTestServerMain { final RegistryTestServer server = new RegistryTestServer(address); - System.out.printf("%sLoading SQL fixtures and AppEngineExtension...%s\n", BLUE, RESET); - AppEngineExtension appEngine = - AppEngineExtension.builder() - .withCloudSql() - .withUrlFetch() - .withTaskQueue() - .withLocalModules() - .withUserService( - loginIsAdmin ? UserInfo.createAdmin(loginEmail) : UserInfo.create(loginEmail)) - .build(); - appEngine.setUp(); + System.out.printf("%sLoading SQL fixtures and User service...%s\n", BLUE, RESET); + new UserServiceExtension( + loginIsAdmin ? UserInfo.createAdmin(loginEmail) : UserInfo.create(loginEmail)) + .beforeEach(null); UserRoles userRoles = new UserRoles.Builder().setIsAdmin(loginIsAdmin).setGlobalRole(GlobalRole.FTE).build(); User user = @@ -153,7 +147,7 @@ public final class RegistryTestServerMain { .build(); IapHeaderAuthenticationMechanism.setUserAuthInfoForTestServer(user); new JpaTestExtensions.Builder().buildIntegrationTestExtension().beforeEach(null); - AppEngineExtension.loadInitialData(); + JpaTransactionManagerExtension.loadInitialData(); System.out.printf("%sLoading fixtures...%s\n", BLUE, RESET); for (Fixture fixture : fixtures) { fixture.load(); @@ -169,7 +163,7 @@ public final class RegistryTestServerMain { } } finally { server.stop(); - appEngine.tearDown(); + // appEngine.tearDown(); } } diff --git a/core/src/test/java/google/registry/testing/AppEngineExtension.java b/core/src/test/java/google/registry/testing/AppEngineExtension.java deleted file mode 100644 index b8e35e6da..000000000 --- a/core/src/test/java/google/registry/testing/AppEngineExtension.java +++ /dev/null @@ -1,552 +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 static com.google.common.io.Files.asCharSink; -import static com.google.common.truth.Truth.assertWithMessage; -import static google.registry.persistence.transaction.TransactionManagerFactory.tm; -import static google.registry.testing.DatabaseHelper.insertSimpleResources; -import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; -import static google.registry.util.ResourceUtils.readResourceUtf8; -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.nio.file.Files.walk; -import static java.util.Comparator.reverseOrder; -import static org.json.XML.toJSONObject; - -import com.google.appengine.tools.development.testing.LocalModulesServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalServiceTestHelper; -import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; -import com.google.appengine.tools.development.testing.LocalURLFetchServiceTestConfig; -import com.google.appengine.tools.development.testing.LocalUserServiceTestConfig; -import com.google.apphosting.api.ApiProxy; -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Sets; -import com.google.common.io.Files; -import google.registry.model.registrar.Registrar; -import google.registry.model.registrar.Registrar.State; -import google.registry.model.registrar.RegistrarAddress; -import google.registry.model.registrar.RegistrarPoc; -import google.registry.persistence.transaction.JpaTestExtensions; -import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; -import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationWithCoverageExtension; -import google.registry.persistence.transaction.JpaTestExtensions.JpaUnitTestExtension; -import google.registry.util.Clock; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.logging.LogManager; -import java.util.stream.Stream; -import javax.annotation.Nullable; -import org.joda.money.CurrencyUnit; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.io.TempDir; - -/** - * JUnit extension for managing the App Engine testing environment. - * - *

Generally you'll want to configure the environment using only the services you need (because - * each service is expensive to create). - * - *

This extension also resets global Objectify for the current thread. - */ -public final class AppEngineExtension implements BeforeEachCallback, AfterEachCallback { - - /** - * The GAE testing library requires queue.xml to be a file, not a resource in a jar, so we read it - * in here and write it to a temporary file later. - */ - private static final String QUEUE_XML = - readResourceUtf8("google/registry/env/common/default/WEB-INF/queue.xml"); - - /** A parsed version of the indexes used in the prod code. */ - private static final Set MANUAL_INDEXES = - getIndexXmlStrings( - readResourceUtf8("google/registry/env/common/default/WEB-INF/datastore-indexes.xml")); - - private static final String LOGGING_PROPERTIES = - readResourceUtf8(AppEngineExtension.class, "logging.properties"); - - private LocalServiceTestHelper helper; - - /** - * A temporary directory for AppEngineExtension's internal temp files that is different for each - * test. - * - *

Note that we can't use {@link TempDir} here because that only works in test classes, not - * extensions. - */ - File tmpDir; - - /** - * Sets up a SQL database. This is for test classes that are not a member of the {@code - * SqlIntegrationTestSuite}. - */ - private JpaIntegrationTestExtension jpaIntegrationTestExtension = null; - - /** - * Sets up a SQL database and records the JPA entities tested by each test class. This is for - * {@code SqlIntegrationTestSuite} members. - */ - private JpaIntegrationWithCoverageExtension jpaIntegrationWithCoverageExtension = null; - - private JpaUnitTestExtension jpaUnitTestExtension; - - private boolean withoutCannedData; - private boolean withCloudSql; - private boolean enableJpaEntityCoverageCheck; - private boolean withJpaUnitTest; - private boolean withLocalModules; - private boolean withTaskQueue; - private boolean withUserService; - private boolean withUrlFetch; - private Clock clock; - - private String taskQueueXml; - private UserInfo userInfo; - - // Test Objectify entity classes to be used with this AppEngineExtension instance. - private ImmutableList> jpaTestEntities; - - public Optional getJpaIntegrationTestExtension() { - return Optional.ofNullable(jpaIntegrationTestExtension); - } - - /** Builder for {@link AppEngineExtension}. */ - public static class Builder { - - private AppEngineExtension extension = new AppEngineExtension(); - private ImmutableList.Builder> jpaTestEntities = new ImmutableList.Builder<>(); - - /** Turns on Cloud SQL only, for use by test data generators. */ - public Builder withCloudSql() { - extension.withCloudSql = true; - return this; - } - - /** Disables insertion of canned data. */ - public Builder withoutCannedData() { - extension.withoutCannedData = true; - return this; - } - - /** - * Enables JPA entity coverage check if {@code enabled} is true. This should only be enabled for - * members of SqlIntegrationTestSuite. - */ - public Builder enableJpaEntityCoverageCheck(boolean enabled) { - extension.enableJpaEntityCoverageCheck = enabled; - return this; - } - - /** Turn on the use of local modules. */ - public Builder withLocalModules() { - extension.withLocalModules = true; - return this; - } - - /** Turn on the task queue service. */ - public Builder withTaskQueue() { - return withTaskQueue(QUEUE_XML); - } - - /** Turn on the task queue service with a specified set of queues. */ - public Builder withTaskQueue(String taskQueueXml) { - extension.withTaskQueue = true; - extension.taskQueueXml = taskQueueXml; - return this; - } - - /** Turn on the URL Fetch service. */ - public Builder withUrlFetch() { - extension.withUrlFetch = true; - return this; - } - - public Builder withClock(Clock clock) { - extension.clock = clock; - return this; - } - - public Builder withUserService(UserInfo userInfo) { - extension.withUserService = true; - extension.userInfo = userInfo; - return this; - } - - public Builder withJpaUnitTestEntities(Class... entities) { - jpaTestEntities.add(entities); - extension.withJpaUnitTest = true; - return this; - } - - public AppEngineExtension build() { - checkState( - !extension.enableJpaEntityCoverageCheck || extension.withCloudSql, - "withJpaEntityCoverageCheck enabled without Cloud SQL"); - checkState( - !extension.withJpaUnitTest || extension.withCloudSql, - "withJpaUnitTestEntities enabled without Cloud SQL"); - checkState( - !extension.withJpaUnitTest || !extension.enableJpaEntityCoverageCheck, - "withJpaUnitTestEntities cannot be set when enableJpaEntityCoverageCheck"); - extension.jpaTestEntities = this.jpaTestEntities.build(); - return extension; - } - } - - public static Builder builder() { - return new Builder(); - } - - private static Registrar.Builder makeRegistrarCommon() { - return new Registrar.Builder() - .setType(Registrar.Type.REAL) - .setState(State.ACTIVE) - .setIcannReferralEmail("lol@sloth.test") - .setUrl("http://my.fake.url") - .setInternationalizedAddress( - new RegistrarAddress.Builder() - .setStreet(ImmutableList.of("123 Example Boulevard")) - .setCity("Williamsburg") - .setState("NY") - .setZip("11211") - .setCountryCode("US") - .build()) - .setLocalizedAddress( - new RegistrarAddress.Builder() - .setStreet(ImmutableList.of("123 Example B\u0151ulevard")) - .setCity("Williamsburg") - .setState("NY") - .setZip("11211") - .setCountryCode("US") - .build()) - .setPhoneNumber("+1.3334445555") - .setPhonePasscode("12345") - .setBillingAccountMap(ImmutableMap.of(CurrencyUnit.USD, "abc123")) - .setContactsRequireSyncing(true); - } - - /** Public factory for first Registrar to allow comparison against stored value in unit tests. */ - public static Registrar makeRegistrar1() { - return makeRegistrarCommon() - .setRegistrarId("NewRegistrar") - .setRegistrarName("New Registrar") - .setEmailAddress("new.registrar@example.com") - .setIanaIdentifier(8L) - .setPassword("foo-BAR2") - .setPhoneNumber("+1.3334445555") - .setPhonePasscode("12345") - .setRegistryLockAllowed(false) - .build(); - } - - /** Public factory for second Registrar to allow comparison against stored value in unit tests. */ - public static Registrar makeRegistrar2() { - return makeRegistrarCommon() - .setRegistrarId("TheRegistrar") - .setRegistrarName("The Registrar") - .setEmailAddress("the.registrar@example.com") - .setIanaIdentifier(1L) - .setPassword("password2") - .setPhoneNumber("+1.2223334444") - .setPhonePasscode("22222") - .setRegistryLockAllowed(true) - .build(); - } - - /** - * Public factory for first RegistrarContact to allow comparison against stored value in unit - * tests. - */ - public static RegistrarPoc makeRegistrarContact1() { - return new RegistrarPoc.Builder() - .setRegistrar(makeRegistrar1()) - .setName("Jane Doe") - .setVisibleInWhoisAsAdmin(true) - .setVisibleInWhoisAsTech(false) - .setEmailAddress("janedoe@theregistrar.com") - .setPhoneNumber("+1.1234567890") - .setTypes(ImmutableSet.of(RegistrarPoc.Type.ADMIN)) - .build(); - } - - /** - * Public factory for second RegistrarContact to allow comparison against stored value in unit - * tests. - */ - public static RegistrarPoc makeRegistrarContact2() { - return new RegistrarPoc.Builder() - .setRegistrar(makeRegistrar2()) - .setName("John Doe") - .setEmailAddress("johndoe@theregistrar.com") - .setPhoneNumber("+1.1234567890") - .setTypes(ImmutableSet.of(RegistrarPoc.Type.ADMIN)) - .setLoginEmailAddress("johndoe@theregistrar.com") - .build(); - } - - public static RegistrarPoc makeRegistrarContact3() { - return new RegistrarPoc.Builder() - .setRegistrar(makeRegistrar2()) - .setName("Marla Singer") - .setEmailAddress("Marla.Singer@crr.com") - .setRegistryLockEmailAddress("Marla.Singer.RegistryLock@crr.com") - .setPhoneNumber("+1.2128675309") - .setTypes(ImmutableSet.of(RegistrarPoc.Type.TECH)) - .setLoginEmailAddress("Marla.Singer@crr.com") - .setAllowedToSetRegistryLockPassword(true) - .setRegistryLockPassword("hi") - .build(); - } - - /** Called before every test method. */ - @Override - public void beforeEach(ExtensionContext context) throws Exception { - checkArgumentNotNull(context, "The ExtensionContext must not be null"); - setUp(); - if (withCloudSql) { - JpaTestExtensions.Builder builder = - new JpaTestExtensions.Builder().withEntityClass(jpaTestEntities.toArray(new Class[0])); - if (withoutCannedData) { - builder.withoutCannedData(); - } - if (clock != null) { - builder.withClock(clock); - } - if (enableJpaEntityCoverageCheck) { - jpaIntegrationWithCoverageExtension = builder.buildIntegrationWithCoverageExtension(); - jpaIntegrationWithCoverageExtension.beforeEach(context); - } else if (withJpaUnitTest) { - jpaUnitTestExtension = builder.buildUnitTestExtension(); - jpaUnitTestExtension.beforeEach(context); - } else { - jpaIntegrationTestExtension = builder.buildIntegrationTestExtension(); - jpaIntegrationTestExtension.beforeEach(context); - } - - // Reset SQL Sequence based id allocation so that ids are deterministic in tests. - tm().transact( - () -> - tm().getEntityManager() - .createNativeQuery( - "alter sequence if exists project_wide_unique_id_seq start 1 minvalue 1" - + " restart with 1") - .executeUpdate()); - } - if (withCloudSql) { - if (!withoutCannedData && !withJpaUnitTest) { - loadInitialData(); - } - } - } - - /** - * Prepares the fake App Engine environment for use. - * - *

This should only be called from a non-test context, e.g. {@link - * google.registry.server.RegistryTestServerMain}, as it doesn't do any of the setup that requires - * the existence of an {@link ExtensionContext}, which is only available from inside the JUnit - * runner. - */ - public void setUp() throws Exception { - tmpDir = Files.createTempDir(); - setupLogging(); - Set configs = new HashSet<>(); - if (withUrlFetch) { - configs.add(new LocalURLFetchServiceTestConfig()); - } - - if (withLocalModules) { - configs.add( - new LocalModulesServiceTestConfig() - .addBasicScalingModuleVersion("default", "1", 1) - .addBasicScalingModuleVersion("tools", "1", 1) - .addBasicScalingModuleVersion("backend", "1", 1)); - } - if (withTaskQueue) { - File queueFile = new File(tmpDir, "queue.xml"); - asCharSink(queueFile, UTF_8).write(taskQueueXml); - configs.add(new LocalTaskQueueTestConfig().setQueueXmlPath(queueFile.getAbsolutePath())); - } - if (withUserService) { - configs.add(new LocalUserServiceTestConfig()); - } - - helper = new LocalServiceTestHelper(configs.toArray(new LocalServiceTestConfig[] {})); - - if (withUserService) { - // Set top-level properties on LocalServiceTestConfig for user login. - helper - .setEnvIsLoggedIn(userInfo.isLoggedIn()) - .setEnvAuthDomain(userInfo.authDomain()) - .setEnvEmail(userInfo.email()) - .setEnvIsAdmin(userInfo.isAdmin()); - } - - if (withLocalModules) { - helper.setEnvInstance("0"); - } - helper.setUp(); - } - - /** Called after each test method. */ - @Override - public void afterEach(ExtensionContext context) throws Exception { - checkArgumentNotNull(context, "The ExtensionContext must not be null"); - if (withCloudSql) { - if (enableJpaEntityCoverageCheck) { - jpaIntegrationWithCoverageExtension.afterEach(context); - } else if (withJpaUnitTest) { - jpaUnitTestExtension.afterEach(context); - } else { - jpaIntegrationTestExtension.afterEach(context); - } - } - tearDown(); - } - - /** - * Tears down the fake App Engine environment after use. - * - *

This should only be called from a non-test context, e.g. {@link - * google.registry.server.RegistryTestServerMain}, as it doesn't do any of the setup that requires - * the existence of an {@link ExtensionContext}, which is only available from inside the JUnit - * runner. - */ - public void tearDown() throws Exception { - // Resets Objectify. Although it would seem more obvious to do this at the start of a request - // instead of at the end, this is more consistent with what ObjectifyFilter does in real code. - helper.tearDown(); - helper = null; - // Test that Datastore didn't need any indexes we don't have listed in our index file. - File indexFile = new File(tmpDir, "datastore-indexes-auto.xml"); - try { - if (!indexFile.exists()) { - return; - } - String indexFileContent = Files.asCharSource(indexFile, UTF_8).read(); - if (indexFileContent.trim().isEmpty()) { - return; - } - Set autoIndexes = getIndexXmlStrings(indexFileContent); - Set missingIndexes = Sets.difference(autoIndexes, MANUAL_INDEXES); - if (!missingIndexes.isEmpty()) { - assertWithMessage("Missing indexes:\n%s", Joiner.on('\n').join(missingIndexes)).fail(); - } - } catch (IOException e) { - throw new RuntimeException(e); - } finally { - // Delete the temp directory's contents and then the temp directory itself. - try (Stream filesToDelete = walk(tmpDir.toPath())) { - filesToDelete.sorted(reverseOrder()).map(Path::toFile).forEach(File::delete); - } - // Clean up environment setting left behind by AppEngine test instance. - ApiProxy.setEnvironmentForCurrentThread(null); - } - } - - /** Install {@code testing/logging.properties} so logging is less noisy. */ - private static void setupLogging() throws IOException { - LogManager.getLogManager() - .readConfiguration(new ByteArrayInputStream(LOGGING_PROPERTIES.getBytes(UTF_8))); - } - - /** Read a Datastore index file, and parse the indexes into individual strings. */ - private static Set getIndexXmlStrings(String indexFile) { - ImmutableSet.Builder builder = new ImmutableSet.Builder<>(); - try { - // To normalize the indexes, we are going to pass them through JSON and then rewrite the xml. - JSONObject datastoreIndexes = new JSONObject(); - JSONObject indexFileObject = toJSONObject(indexFile); - Object indexes = indexFileObject.get("datastore-indexes"); - if (indexes instanceof JSONObject) { - datastoreIndexes = (JSONObject) indexes; - } - for (JSONObject index : getJsonAsArray(datastoreIndexes.opt("datastore-index"))) { - builder.add(getIndexXmlString(index)); - } - } catch (JSONException e) { - throw new RuntimeException( - String.format("Error parsing datastore-indexes-auto.xml: [%s]", indexFile), e); - } - return builder.build(); - } - - /** - * Normalize a value from JSONObject that represents zero, one, or many values. If there were zero - * values this will be null or an empty JSONArray, depending on how the field was represented in - * JSON. If there was one value, the object passed in will be that value. If there were more than - * one values, the object will be a JSONArray containing those values. We will return a list in - * all cases. - */ - private static List getJsonAsArray(@Nullable Object object) throws JSONException { - ImmutableList.Builder builder = new ImmutableList.Builder<>(); - if (object instanceof JSONArray) { - for (int i = 0; i < ((JSONArray) object).length(); ++i) { - builder.add(((JSONArray) object).getJSONObject(i)); - } - } else if (object instanceof JSONObject) { - // When there's only a single entry it won't be wrapped in an array. - builder.add((JSONObject) object); - } - return builder.build(); - } - - /** Turn a JSON representation of an index into xml. */ - private static String getIndexXmlString(JSONObject source) throws JSONException { - StringBuilder builder = new StringBuilder(); - builder.append( - String.format( - "\n", - source.getString("kind"), source.get("ancestor").toString())); - for (JSONObject property : getJsonAsArray(source.get("property"))) { - builder.append( - String.format( - " \n", - property.getString("name"), property.getString("direction"))); - } - return builder.append("").toString(); - } - - /** Create some fake registrars. */ - public static void loadInitialData() { - insertSimpleResources( - ImmutableList.of( - makeRegistrar1(), - makeRegistrarContact1(), - makeRegistrar2(), - makeRegistrarContact2(), - makeRegistrarContact3())); - } - - boolean isWithCloudSql() { - return withCloudSql; - } -} diff --git a/core/src/test/java/google/registry/testing/AppEngineExtensionTest.java b/core/src/test/java/google/registry/testing/AppEngineExtensionTest.java deleted file mode 100644 index 05c129a04..000000000 --- a/core/src/test/java/google/registry/testing/AppEngineExtensionTest.java +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2019 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.io.Files.asCharSink; -import static com.google.common.truth.Truth.assertWithMessage; -import static google.registry.persistence.transaction.TransactionManagerFactory.tm; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import com.google.common.base.Joiner; -import google.registry.persistence.transaction.JpaTransactionManager; -import java.io.File; -import java.io.IOException; -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 AppEngineExtension}. - * - *

Tests focus on Datastore-related assertions made during teardown checks. - */ -class AppEngineExtensionTest { - - // An arbitrary index in google/registry/env/common/default/WEB-INF/datastore-indexes.xml - private static final String DECLARED_INDEX = - Joiner.on('\n') - .join( - "", - " ", - " ", - " ", - " ", - " ", - ""); - - private static final String UNDECLARED_INDEX = - DECLARED_INDEX.replace("Contact", "NoSuchResource"); - - /** - * Sets up test AppEngine instance. - * - *

Not registered as extension since this instance's afterEach() method is also under test. All - * methods should call {@link AppEngineExtension#afterEach appEngine.afterEach} explicitly. - */ - private final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - - private JpaTransactionManager originalJpa; - - @RegisterExtension - final ContextCapturingMetaExtension context = new ContextCapturingMetaExtension(); - - @BeforeEach - void beforeEach() throws Exception { - originalJpa = tm(); - appEngine.beforeEach(context.getContext()); - } - - @AfterEach - void afterEach() { - // Note: cannot use isSameInstanceAs() because DummyTransactionManager would throw on any - // access. - assertWithMessage("Original state not restore. Is appEngine.afterEach not called by this test?") - .that(originalJpa == tm()) - .isTrue(); - } - - @Test - void testTeardown_successNoAutoIndexFile() throws Exception { - appEngine.afterEach(context.getContext()); - } - - @Test - void testTeardown_successEmptyAutoIndexFile() throws Exception { - writeAutoIndexFile(""); - appEngine.afterEach(context.getContext()); - } - - @Test - void testTeardown_successWhiteSpacesOnlyAutoIndexFile() throws Exception { - writeAutoIndexFile(" "); - appEngine.afterEach(context.getContext()); - } - - @Test - void testTeardown_successOnlyDeclaredIndexesUsed() throws Exception { - writeAutoIndexFile(DECLARED_INDEX); - appEngine.afterEach(context.getContext()); - } - - @Test - void testTeardown_failureUndeclaredIndexesUsed() throws Exception { - writeAutoIndexFile(UNDECLARED_INDEX); - assertThrows(AssertionError.class, () -> appEngine.afterEach(context.getContext())); - } - - private void writeAutoIndexFile(String content) throws IOException { - asCharSink(new File(appEngine.tmpDir, "datastore-indexes-auto.xml"), UTF_8).write(content); - } -} diff --git a/core/src/test/java/google/registry/testing/FakeUserService.java b/core/src/test/java/google/registry/testing/FakeUserService.java index 5c3938b41..a78a5fcb5 100644 --- a/core/src/test/java/google/registry/testing/FakeUserService.java +++ b/core/src/test/java/google/registry/testing/FakeUserService.java @@ -16,12 +16,12 @@ package google.registry.testing; import com.google.appengine.api.users.User; import com.google.appengine.api.users.UserService; +import google.registry.model.annotations.DeleteAfterMigration; import java.util.Set; import javax.annotation.Nullable; -// TODO: Consider reconciling this with AppEngineExtension.withUserService() - /** Fake implementation of {@link UserService} for testing. */ +@DeleteAfterMigration public class FakeUserService implements UserService { @Nullable private User user = null; diff --git a/core/src/test/java/google/registry/testing/SqlHelper.java b/core/src/test/java/google/registry/testing/SqlHelper.java index fbc2f43fc..04d16ad27 100644 --- a/core/src/test/java/google/registry/testing/SqlHelper.java +++ b/core/src/test/java/google/registry/testing/SqlHelper.java @@ -15,8 +15,8 @@ package google.registry.testing; import static com.google.common.truth.Truth.assertThat; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar1; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; -import static google.registry.testing.AppEngineExtension.makeRegistrar1; import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.base.Throwables; @@ -30,7 +30,7 @@ import javax.persistence.PersistenceException; import org.junit.jupiter.api.function.Executable; /** Static utils for setting up and retrieving test resources from the SQL database. */ -public class SqlHelper { +public final class SqlHelper { public static RegistryLock saveRegistryLock(RegistryLock lock) { return tm().transact(() -> RegistryLockDao.save(lock)); diff --git a/core/src/test/java/google/registry/testing/TaskQueueExtension.java b/core/src/test/java/google/registry/testing/TaskQueueExtension.java new file mode 100644 index 000000000..5dd81dd76 --- /dev/null +++ b/core/src/test/java/google/registry/testing/TaskQueueExtension.java @@ -0,0 +1,64 @@ +// Copyright 2023 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.io.Files.asCharSink; +import static google.registry.util.ResourceUtils.readResourceUtf8; +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.google.appengine.tools.development.testing.LocalServiceTestHelper; +import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; +import com.google.apphosting.api.ApiProxy; +import google.registry.model.annotations.DeleteAfterMigration; +import java.io.File; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +/** JUnit extension that sets up App Engine task queue environment. */ +@DeleteAfterMigration +public final class TaskQueueExtension implements BeforeEachCallback, AfterEachCallback { + + /** + * The GAE testing library requires queue.xml to be a file, not a resource in a jar, so we read it + * in here and write it to a temporary file later. + */ + private static final String QUEUE_XML = + readResourceUtf8("google/registry/env/common/default/WEB-INF/queue.xml"); + + private LocalServiceTestHelper helper; + private String taskQueueXml; + private File tmpDir; + + public TaskQueueExtension() { + this.taskQueueXml = QUEUE_XML; + } + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + File queueFile = new File(tmpDir, "queue.xml"); + asCharSink(queueFile, UTF_8).write(taskQueueXml); + helper = + new LocalServiceTestHelper( + new LocalTaskQueueTestConfig().setQueueXmlPath(queueFile.getAbsolutePath())); + helper.setUp(); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + helper.tearDown(); + ApiProxy.setEnvironmentForCurrentThread(null); + } +} diff --git a/core/src/test/java/google/registry/testing/UserInfo.java b/core/src/test/java/google/registry/testing/UserInfo.java index e573db11a..288174a95 100644 --- a/core/src/test/java/google/registry/testing/UserInfo.java +++ b/core/src/test/java/google/registry/testing/UserInfo.java @@ -17,7 +17,7 @@ package google.registry.testing; import com.google.auto.value.AutoValue; /** - * Container for values passed to {@link AppEngineExtension} to set the logged-in user for tests. + * Container for values passed to {@link UserServiceExtension} to set the logged-in user for tests. */ @AutoValue public abstract class UserInfo { diff --git a/core/src/test/java/google/registry/testing/UserServiceExtension.java b/core/src/test/java/google/registry/testing/UserServiceExtension.java new file mode 100644 index 000000000..be1ece14d --- /dev/null +++ b/core/src/test/java/google/registry/testing/UserServiceExtension.java @@ -0,0 +1,57 @@ +// Copyright 2023 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 com.google.appengine.tools.development.testing.LocalServiceTestHelper; +import com.google.appengine.tools.development.testing.LocalUserServiceTestConfig; +import com.google.apphosting.api.ApiProxy; +import google.registry.model.annotations.DeleteAfterMigration; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +/** JUnit extension that sets up App Engine User service environment. */ +@DeleteAfterMigration +public final class UserServiceExtension implements BeforeEachCallback, AfterEachCallback { + + private final LocalServiceTestHelper helper = + new LocalServiceTestHelper(new LocalUserServiceTestConfig()); + private final UserInfo userInfo; + + public UserServiceExtension(String email) { + this.userInfo = UserInfo.create(email); + } + + public UserServiceExtension(UserInfo userInfo) { + this.userInfo = userInfo; + } + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + // Set top-level properties on LocalServiceTestConfig for user login. + helper + .setEnvIsLoggedIn(userInfo.isLoggedIn()) + .setEnvAuthDomain(userInfo.authDomain()) + .setEnvEmail(userInfo.email()) + .setEnvIsAdmin(userInfo.isAdmin()); + helper.setUp(); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + helper.tearDown(); + ApiProxy.setEnvironmentForCurrentThread(null); + } +} diff --git a/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java b/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java index 9798bf830..be59a804a 100644 --- a/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java +++ b/core/src/test/java/google/registry/tmch/LordnTaskUtilsTest.java @@ -25,8 +25,10 @@ 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.registrar.Registrar.Type; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; +import google.registry.testing.TaskQueueExtension; import google.registry.testing.TaskQueueHelper.TaskMatcher; import google.registry.util.Clock; import org.joda.time.DateTime; @@ -40,8 +42,10 @@ public class LordnTaskUtilsTest { private static final Clock clock = new FakeClock(DateTime.parse("2010-05-01T10:11:12Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java b/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java index 040fbc1ce..b3f1b74d7 100644 --- a/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java +++ b/core/src/test/java/google/registry/tmch/NordnUploadActionTest.java @@ -49,11 +49,13 @@ import com.google.common.collect.ImmutableList; import google.registry.model.domain.Domain; import google.registry.model.domain.launch.LaunchNotice; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; import google.registry.testing.FakeUrlConnectionService; +import google.registry.testing.TaskQueueExtension; import google.registry.testing.TaskQueueHelper.TaskMatcher; import google.registry.util.Retrier; import google.registry.util.TaskQueueUtils; @@ -90,8 +92,10 @@ class NordnUploadActionTest { private final FakeClock clock = new FakeClock(DateTime.parse("2010-05-01T10:11:12Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); + + @RegisterExtension final TaskQueueExtension taskQueueExtension = new TaskQueueExtension(); private final LordnRequestInitializer lordnRequestInitializer = new LordnRequestInitializer(Optional.of("attack")); diff --git a/core/src/test/java/google/registry/tmch/NordnVerifyActionTest.java b/core/src/test/java/google/registry/tmch/NordnVerifyActionTest.java index 0ca497ec3..2c0e341f3 100644 --- a/core/src/test/java/google/registry/tmch/NordnVerifyActionTest.java +++ b/core/src/test/java/google/registry/tmch/NordnVerifyActionTest.java @@ -31,8 +31,9 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.ConflictException; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeResponse; import google.registry.testing.FakeUrlConnectionService; import java.io.ByteArrayInputStream; @@ -73,8 +74,8 @@ class NordnVerifyActionTest { + "bogpog,4611\n"; @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeResponse response = new FakeResponse(); private final LordnRequestInitializer lordnRequestInitializer = diff --git a/core/src/test/java/google/registry/tmch/SmdrlCsvParserTest.java b/core/src/test/java/google/registry/tmch/SmdrlCsvParserTest.java index 1971352d7..9a8e8b750 100644 --- a/core/src/test/java/google/registry/tmch/SmdrlCsvParserTest.java +++ b/core/src/test/java/google/registry/tmch/SmdrlCsvParserTest.java @@ -23,18 +23,13 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableList; import com.google.common.io.CharSource; import google.registry.model.smd.SignedMarkRevocationList; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link SmdrlCsvParser}. */ class SmdrlCsvParserTest { - @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().build(); - private final FakeClock clock = new FakeClock(); private static final CharSource SMDRL_LATEST_CSV = diff --git a/core/src/test/java/google/registry/tmch/TmchActionTestCase.java b/core/src/test/java/google/registry/tmch/TmchActionTestCase.java index 99066559e..507be4d47 100644 --- a/core/src/test/java/google/registry/tmch/TmchActionTestCase.java +++ b/core/src/test/java/google/registry/tmch/TmchActionTestCase.java @@ -18,7 +18,8 @@ import static javax.servlet.http.HttpServletResponse.SC_OK; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.BouncyCastleProviderExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeUrlConnectionService; @@ -40,7 +41,8 @@ abstract class TmchActionTestCase { static final String MARKSDB_URL = "http://127.0.0.1/love"; @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @RegisterExtension public final BouncyCastleProviderExtension bouncy = new BouncyCastleProviderExtension(); diff --git a/core/src/test/java/google/registry/tmch/TmchCertificateAuthorityTest.java b/core/src/test/java/google/registry/tmch/TmchCertificateAuthorityTest.java index a4a7c5b04..081e338f7 100644 --- a/core/src/test/java/google/registry/tmch/TmchCertificateAuthorityTest.java +++ b/core/src/test/java/google/registry/tmch/TmchCertificateAuthorityTest.java @@ -23,7 +23,8 @@ import static google.registry.util.X509Utils.loadCertificate; import static org.junit.jupiter.api.Assertions.assertThrows; import google.registry.model.tmch.TmchCrl; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import java.security.SignatureException; import java.security.cert.CertificateExpiredException; @@ -40,9 +41,10 @@ class TmchCertificateAuthorityTest { private static final String REVOKED_TEST_CERTIFICATE = loadFile("icann-tmch-test-revoked.crt"); @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + public final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); - private FakeClock clock = new FakeClock(DateTime.parse("2014-01-01T00:00:00Z")); + private final FakeClock clock = new FakeClock(DateTime.parse("2014-01-01T00:00:00Z")); @Test void testFailure_prodRootExpired() { diff --git a/core/src/test/java/google/registry/tmch/TmchTestDataExpirationTest.java b/core/src/test/java/google/registry/tmch/TmchTestDataExpirationTest.java index a54719248..52fabcd38 100644 --- a/core/src/test/java/google/registry/tmch/TmchTestDataExpirationTest.java +++ b/core/src/test/java/google/registry/tmch/TmchTestDataExpirationTest.java @@ -21,7 +21,8 @@ import google.registry.config.RegistryConfig.ConfigModule.TmchCaMode; import google.registry.flows.EppException; import google.registry.flows.domain.DomainFlowTmchUtils; import google.registry.model.smd.EncodedSignedMark; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.util.SystemClock; import org.joda.time.DateTime; import org.junit.jupiter.api.Test; @@ -31,7 +32,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class TmchTestDataExpirationTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); /** * Verifies the currently-active signed mark file provided by ICANN. diff --git a/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java b/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java index 9191254f8..01e87be3b 100644 --- a/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java +++ b/core/src/test/java/google/registry/tmch/TmchXmlSignatureTest.java @@ -19,7 +19,8 @@ import static google.registry.tmch.TmchTestData.loadSmd; import static org.junit.jupiter.api.Assertions.assertThrows; import google.registry.config.RegistryConfig.ConfigModule.TmchCaMode; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.tmch.TmchXmlSignature.CertificateSignatureException; import java.security.cert.CertificateExpiredException; @@ -39,7 +40,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class TmchXmlSignatureTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); // 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 diff --git a/core/src/test/java/google/registry/tools/CommandTestCase.java b/core/src/test/java/google/registry/tools/CommandTestCase.java index 9d887c21b..726ea7d68 100644 --- a/core/src/test/java/google/registry/tools/CommandTestCase.java +++ b/core/src/test/java/google/registry/tools/CommandTestCase.java @@ -29,7 +29,8 @@ import com.google.common.collect.ObjectArrays; import com.google.common.io.Files; import com.google.common.reflect.TypeToken; import google.registry.model.poll.PollMessage; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CertificateSamples; import google.registry.testing.FakeClock; import google.registry.testing.SystemPropertyExtension; @@ -65,8 +66,8 @@ public abstract class CommandTestCase { protected final FakeClock fakeClock = new FakeClock(DateTime.parse("2022-09-01T00:00:00.000Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(fakeClock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationTestExtension(); @RegisterExtension final SystemPropertyExtension systemPropertyExtension = new SystemPropertyExtension(); diff --git a/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java b/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java index ab139d867..6d698c7cb 100644 --- a/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java +++ b/core/src/test/java/google/registry/tools/CreateRegistrarCommandTest.java @@ -1644,7 +1644,7 @@ class CreateRegistrarCommandTest extends CommandTestCase @Test void testFailure_registrarNameSimilarToExisting() { // Note that "tHeRe GiStRaR" normalizes identically to "The Registrar", which is created by - // AppEngineExtension. + // JpaTransactionManagerExtension. IllegalArgumentException thrown = assertThrows( IllegalArgumentException.class, diff --git a/core/src/test/java/google/registry/tools/DomainLockUtilsTest.java b/core/src/test/java/google/registry/tools/DomainLockUtilsTest.java index c472c50f0..c6935725a 100644 --- a/core/src/test/java/google/registry/tools/DomainLockUtilsTest.java +++ b/core/src/test/java/google/registry/tools/DomainLockUtilsTest.java @@ -43,14 +43,14 @@ import google.registry.model.domain.RegistryLock; import google.registry.model.host.Host; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.CloudTasksHelper.TaskMatcher; import google.registry.testing.DatabaseHelper; import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.testing.SqlHelper; -import google.registry.testing.UserInfo; import google.registry.util.StringGenerator.Alphabets; import java.util.Optional; import java.util.Set; @@ -74,13 +74,8 @@ public final class DomainLockUtilsTest { private CloudTasksHelper cloudTasksHelper = new CloudTasksHelper(clock); @RegisterExtension - public final AppEngineExtension appEngineExtension = - AppEngineExtension.builder() - .withCloudSql() - .withClock(clock) - .withTaskQueue() - .withUserService(UserInfo.create(POC_ID)) - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); private Domain domain; diff --git a/core/src/test/java/google/registry/tools/EppLifecycleToolsTest.java b/core/src/test/java/google/registry/tools/EppLifecycleToolsTest.java index 52e6aacb1..79c4cbf39 100644 --- a/core/src/test/java/google/registry/tools/EppLifecycleToolsTest.java +++ b/core/src/test/java/google/registry/tools/EppLifecycleToolsTest.java @@ -28,7 +28,8 @@ import google.registry.model.billing.BillingEvent.Reason; import google.registry.model.domain.Domain; import google.registry.model.domain.DomainHistory; import google.registry.model.reporting.HistoryEntry.Type; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.TestCacheExtension; import google.registry.util.Clock; import java.time.Duration; @@ -43,8 +44,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class EppLifecycleToolsTest extends EppTestCase { @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withClock(clock).withCloudSql().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @RegisterExtension public final TestCacheExtension testCacheExtension = diff --git a/core/src/test/java/google/registry/tools/GetRegistrarCommandTest.java b/core/src/test/java/google/registry/tools/GetRegistrarCommandTest.java index 040fa6d3f..3a01b66ef 100644 --- a/core/src/test/java/google/registry/tools/GetRegistrarCommandTest.java +++ b/core/src/test/java/google/registry/tools/GetRegistrarCommandTest.java @@ -25,13 +25,13 @@ class GetRegistrarCommandTest extends CommandTestCase { @Test void testSuccess() throws Exception { - // This registrar is created by AppEngineExtension. + // This registrar is created by JpaTransactionManagerExtension. runCommand("NewRegistrar"); } @Test void testSuccess_multipleArguments() throws Exception { - // Registrars are created by AppEngineExtension. + // Registrars are created by JpaTransactionManagerExtension. runCommand("NewRegistrar", "TheRegistrar"); } diff --git a/core/src/test/java/google/registry/tools/MutatingCommandTest.java b/core/src/test/java/google/registry/tools/MutatingCommandTest.java index 38d3c8d3c..a3d42b286 100644 --- a/core/src/test/java/google/registry/tools/MutatingCommandTest.java +++ b/core/src/test/java/google/registry/tools/MutatingCommandTest.java @@ -32,7 +32,8 @@ import google.registry.model.ImmutableObject; import google.registry.model.host.Host; import google.registry.model.registrar.Registrar; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import java.util.Optional; import java.util.stream.Stream; import org.joda.time.DateTime; @@ -44,7 +45,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class MutatingCommandTest { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private Registrar registrar1; private Registrar registrar2; diff --git a/core/src/test/java/google/registry/tools/RegistryToolTest.java b/core/src/test/java/google/registry/tools/RegistryToolTest.java index 8f53a3318..8f9e85fe5 100644 --- a/core/src/test/java/google/registry/tools/RegistryToolTest.java +++ b/core/src/test/java/google/registry/tools/RegistryToolTest.java @@ -18,21 +18,16 @@ import static com.google.common.truth.Truth.assertThat; import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.jupiter.api.Assertions.assertThrows; -import google.registry.testing.AppEngineExtension; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.util.concurrent.locks.ReentrantLock; 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 google.registry.tools.RegistryTool}. */ public class RegistryToolTest { - @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - // Lock for stdout/stderr. Note that this is static: since we're dealing with globals, we need // to lock for the entire JVM. private static final ReentrantLock stdoutLock = new ReentrantLock(); diff --git a/core/src/test/java/google/registry/tools/UpdateRegistrarCommandTest.java b/core/src/test/java/google/registry/tools/UpdateRegistrarCommandTest.java index a6e749df6..7ac8d8ae3 100644 --- a/core/src/test/java/google/registry/tools/UpdateRegistrarCommandTest.java +++ b/core/src/test/java/google/registry/tools/UpdateRegistrarCommandTest.java @@ -39,7 +39,7 @@ import google.registry.flows.certs.CertificateChecker.InsecureCertificateExcepti import google.registry.model.registrar.Registrar; import google.registry.model.registrar.Registrar.State; import google.registry.model.registrar.Registrar.Type; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import google.registry.util.CidrAddressBlock; import java.math.BigDecimal; import java.util.Optional; @@ -885,7 +885,7 @@ class UpdateRegistrarCommandTest extends CommandTestCase @Test void testFailure_registrarNameSimilarToExisting() { // Note that "tHeRe GiStRaR" normalizes identically to "The Registrar", which is created by - // AppEngineExtension. + // JpaTransactionManagerExtension. assertThrows( IllegalArgumentException.class, () -> runCommand("--name tHeRe GiStRaR", "--force", "NewRegistrar")); @@ -924,7 +924,7 @@ class UpdateRegistrarCommandTest extends CommandTestCase private void persistWhoisAbuseContact() { persistResource( - AppEngineExtension.makeRegistrarContact1() + JpaTransactionManagerExtension.makeRegistrarContact1() .asBuilder() .setVisibleInDomainWhoisAsAbuse(true) .build()); diff --git a/core/src/test/java/google/registry/tools/server/CreateGroupsActionTest.java b/core/src/test/java/google/registry/tools/server/CreateGroupsActionTest.java index 58af7e0c1..b492d6108 100644 --- a/core/src/test/java/google/registry/tools/server/CreateGroupsActionTest.java +++ b/core/src/test/java/google/registry/tools/server/CreateGroupsActionTest.java @@ -24,10 +24,11 @@ import static org.mockito.Mockito.when; import google.registry.groups.DirectoryGroupsConnection; import google.registry.groups.GroupsConnection.Role; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.HttpException.BadRequestException; import google.registry.request.HttpException.InternalServerErrorException; import google.registry.request.Response; -import google.registry.testing.AppEngineExtension; import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -36,7 +37,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class CreateGroupsActionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final DirectoryGroupsConnection connection = mock(DirectoryGroupsConnection.class); private final Response response = mock(Response.class); diff --git a/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java b/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java index aff3fd252..d53956953 100644 --- a/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java +++ b/core/src/test/java/google/registry/tools/server/GenerateZoneFilesActionTest.java @@ -36,7 +36,8 @@ import google.registry.model.domain.secdns.DomainDsData; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import java.net.InetAddress; @@ -51,8 +52,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class GenerateZoneFilesActionTest { @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); + public final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final GcsUtils gcsUtils = new GcsUtils(LocalStorageHelper.getOptions()); diff --git a/core/src/test/java/google/registry/tools/server/ListActionTestCase.java b/core/src/test/java/google/registry/tools/server/ListActionTestCase.java index 24b863e7b..04fd81e5b 100644 --- a/core/src/test/java/google/registry/tools/server/ListActionTestCase.java +++ b/core/src/test/java/google/registry/tools/server/ListActionTestCase.java @@ -17,7 +17,8 @@ package google.registry.tools.server; import static com.google.common.truth.Truth.assertThat; import static javax.servlet.http.HttpServletResponse.SC_OK; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeJsonResponse; import java.util.List; import java.util.Optional; @@ -30,7 +31,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; public class ListActionTestCase { @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private FakeJsonResponse response; diff --git a/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java b/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java index 25ec9d1cb..5f5dac655 100644 --- a/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java +++ b/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java @@ -31,7 +31,8 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import com.google.common.collect.ImmutableSet; import google.registry.dns.DnsQueue; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import java.util.Random; @@ -53,8 +54,8 @@ public class RefreshDnsForAllDomainsActionTest { private final FakeResponse response = new FakeResponse(); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withLocalModules().withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/tools/server/VerifyOteActionTest.java b/core/src/test/java/google/registry/tools/server/VerifyOteActionTest.java index 92cee8835..995406c96 100644 --- a/core/src/test/java/google/registry/tools/server/VerifyOteActionTest.java +++ b/core/src/test/java/google/registry/tools/server/VerifyOteActionTest.java @@ -19,7 +19,8 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import google.registry.model.OteStatsTestHelper; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import java.util.Map; import java.util.regex.Pattern; import org.junit.jupiter.api.Test; @@ -29,7 +30,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class VerifyOteActionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final VerifyOteAction action = new VerifyOteAction(); diff --git a/core/src/test/java/google/registry/ui/server/registrar/ConsoleOteSetupActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/ConsoleOteSetupActionTest.java index 74677c30a..7d45bd09f 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/ConsoleOteSetupActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/ConsoleOteSetupActionTest.java @@ -32,17 +32,19 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSetMultimap; import google.registry.config.RegistryEnvironment; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Action.Method; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.UserAuthInfo; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.SystemPropertyExtension; +import google.registry.testing.UserServiceExtension; import google.registry.ui.server.SendEmailUtils; import google.registry.util.EmailMessage; import google.registry.util.SendEmailService; @@ -63,8 +65,10 @@ import org.mockito.junit.jupiter.MockitoExtension; public final class ConsoleOteSetupActionTest { @RegisterExtension - public final AppEngineExtension appEngineExtension = - AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension final UserServiceExtension userService = new UserServiceExtension(""); @RegisterExtension @Order(value = Integer.MAX_VALUE) diff --git a/core/src/test/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorActionTest.java index b3b7c32ca..55fa141a0 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/ConsoleRegistrarCreatorActionTest.java @@ -32,17 +32,19 @@ import google.registry.config.RegistryEnvironment; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarAddress; import google.registry.model.registrar.RegistrarPoc; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Action.Method; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.UserAuthInfo; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.SystemPropertyExtension; +import google.registry.testing.UserServiceExtension; import google.registry.ui.server.SendEmailUtils; import google.registry.util.EmailMessage; import google.registry.util.SendEmailService; @@ -63,7 +65,10 @@ import org.mockito.junit.jupiter.MockitoExtension; final class ConsoleRegistrarCreatorActionTest { @RegisterExtension - final AppEngineExtension appEngineExtension = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension final UserServiceExtension userService = new UserServiceExtension(""); @RegisterExtension @Order(Integer.MAX_VALUE) diff --git a/core/src/test/java/google/registry/ui/server/registrar/ConsoleUiActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/ConsoleUiActionTest.java index 580221ddd..b3eae498d 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/ConsoleUiActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/ConsoleUiActionTest.java @@ -28,16 +28,17 @@ import com.google.appengine.api.users.UserServiceFactory; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSetMultimap; import com.google.common.net.MediaType; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Action.Method; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.UserAuthInfo; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.UserInfo; +import google.registry.testing.UserServiceExtension; import java.util.Optional; import javax.servlet.http.HttpServletRequest; import org.junit.jupiter.api.AfterEach; @@ -49,11 +50,11 @@ import org.junit.jupiter.api.extension.RegisterExtension; class ConsoleUiActionTest { @RegisterExtension - final AppEngineExtension appEngineExtension = - AppEngineExtension.builder() - .withCloudSql() - .withUserService(UserInfo.create("marla.singer@example.com")) - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + + @RegisterExtension + final UserServiceExtension userService = new UserServiceExtension("marla.singer@example.com"); private final HttpServletRequest request = mock(HttpServletRequest.class); private final FakeResponse response = new FakeResponse(); diff --git a/core/src/test/java/google/registry/ui/server/registrar/ContactSettingsTest.java b/core/src/test/java/google/registry/ui/server/registrar/ContactSettingsTest.java index 7e25260f6..6368b4c8b 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/ContactSettingsTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/ContactSettingsTest.java @@ -25,7 +25,7 @@ import com.google.common.collect.Iterables; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; import google.registry.model.registrar.RegistrarPoc.Type; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import java.util.List; import java.util.Map; import org.junit.jupiter.api.Test; @@ -110,7 +110,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact2().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact2().toJsonMap(), techContact.asBuilder().setPhoneNumber(null).build().toJsonMap())); Map response = action.handleJsonRequest( @@ -130,7 +130,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { // First make the contact's info visible in whois as abuse contact info. Registrar registrar = loadRegistrar(CLIENT_ID); RegistrarPoc rc = - AppEngineExtension.makeRegistrarContact2() + JpaTransactionManagerExtension.makeRegistrarContact2() .asBuilder() .setVisibleInDomainWhoisAsAbuse(true) .build(); @@ -157,7 +157,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { // First make the contact's info visible in whois as abuse contact info. Registrar registrar = loadRegistrar(CLIENT_ID); RegistrarPoc rc = - AppEngineExtension.makeRegistrarContact2() + JpaTransactionManagerExtension.makeRegistrarContact2() .asBuilder() .setVisibleInDomainWhoisAsAbuse(true) .build(); @@ -182,7 +182,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { @Test void testSuccess_setRegistryLockPassword() { addPasswordToContactTwo(); - String emailAddress = AppEngineExtension.makeRegistrarContact2().getEmailAddress(); + String emailAddress = JpaTransactionManagerExtension.makeRegistrarContact2().getEmailAddress(); RegistrarPoc newContactWithPassword = loadRegistrar(CLIENT_ID).getContacts().stream() .filter(rc -> rc.getEmailAddress().equals(emailAddress)) @@ -195,7 +195,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { @Test void testSuccess_setRegistryLockPassword_notOverriddenLater() { addPasswordToContactTwo(); - String emailAddress = AppEngineExtension.makeRegistrarContact2().getEmailAddress(); + String emailAddress = JpaTransactionManagerExtension.makeRegistrarContact2().getEmailAddress(); RegistrarPoc newContactWithPassword = loadRegistrar(CLIENT_ID).getContacts().stream() .filter(rc -> rc.getEmailAddress().equals(emailAddress)) @@ -209,9 +209,9 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact1().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact1().toJsonMap(), newContactMap, - AppEngineExtension.makeRegistrarContact3().toJsonMap())); + JpaTransactionManagerExtension.makeRegistrarContact3().toJsonMap())); clock.advanceOneMilli(); Map response = action.handleJsonRequest(ImmutableMap.of("op", "update", "id", CLIENT_ID, "args", reqJson)); @@ -227,7 +227,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { private void addPasswordToContactTwo() { RegistrarPoc contact = persistResource( - AppEngineExtension.makeRegistrarContact2() + JpaTransactionManagerExtension.makeRegistrarContact2() .asBuilder() .setRegistryLockEmailAddress("johndoe@theregistrar.com") .setAllowedToSetRegistryLockPassword(true) @@ -238,9 +238,9 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact1().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact1().toJsonMap(), contactMap, - AppEngineExtension.makeRegistrarContact3().toJsonMap())); + JpaTransactionManagerExtension.makeRegistrarContact3().toJsonMap())); Map response = action.handleJsonRequest(ImmutableMap.of("op", "update", "id", CLIENT_ID, "args", reqJson)); assertThat(response).containsAtLeastEntriesIn(ImmutableMap.of("status", "SUCCESS")); @@ -252,7 +252,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact2() + JpaTransactionManagerExtension.makeRegistrarContact2() .asBuilder() .setEmailAddress("someotheremail@example.com") .setRegistryLockEmailAddress("someotherexample@example.com") @@ -278,16 +278,17 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { void testPost_failure_setRegistryLockPassword_notAllowed() { // "allowedToSetRegistryLockPassword" must be set through the back end first // before we can set a password through the UI - Map contactMap = AppEngineExtension.makeRegistrarContact2().toJsonMap(); + Map contactMap = + JpaTransactionManagerExtension.makeRegistrarContact2().toJsonMap(); contactMap.put("allowedToSetRegistryLockPassword", true); contactMap.put("registryLockPassword", "hellothere"); Map reqJson = loadRegistrar(CLIENT_ID).toJsonMap(); reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact1().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact1().toJsonMap(), contactMap, - AppEngineExtension.makeRegistrarContact3().toJsonMap())); + JpaTransactionManagerExtension.makeRegistrarContact3().toJsonMap())); Map response = action.handleJsonRequest(ImmutableMap.of("op", "update", "id", CLIENT_ID, "args", reqJson)); @@ -309,7 +310,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact2().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact2().toJsonMap(), techContact.asBuilder().setAllowedToSetRegistryLockPassword(true).build().toJsonMap())); Map response = @@ -329,7 +330,7 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { void testPost_failure_setRegistryLockEmail() { addPasswordToContactTwo(); Map reqJson = loadRegistrar(CLIENT_ID).toJsonMap(); - String emailAddress = AppEngineExtension.makeRegistrarContact2().getEmailAddress(); + String emailAddress = JpaTransactionManagerExtension.makeRegistrarContact2().getEmailAddress(); RegistrarPoc newContactWithPassword = loadRegistrar(CLIENT_ID).getContacts().stream() .filter(rc -> rc.getEmailAddress().equals(emailAddress)) @@ -340,9 +341,9 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { reqJson.put( "contacts", ImmutableList.of( - AppEngineExtension.makeRegistrarContact1().toJsonMap(), + JpaTransactionManagerExtension.makeRegistrarContact1().toJsonMap(), contactJson, - AppEngineExtension.makeRegistrarContact3().toJsonMap())); + JpaTransactionManagerExtension.makeRegistrarContact3().toJsonMap())); Map response = action.handleJsonRequest(ImmutableMap.of("op", "update", "id", CLIENT_ID, "args", reqJson)); @@ -390,7 +391,8 @@ class ContactSettingsTest extends RegistrarSettingsActionTestCase { Map reqJson = loadRegistrar(CLIENT_ID).toJsonMap(); reqJson.put( "contacts", - ImmutableList.of(AppEngineExtension.makeRegistrarContact2().toJsonMap(), contactMap)); + ImmutableList.of( + JpaTransactionManagerExtension.makeRegistrarContact2().toJsonMap(), contactMap)); Map response = action.handleJsonRequest(ImmutableMap.of("op", "update", "id", CLIENT_ID, "args", reqJson)); diff --git a/core/src/test/java/google/registry/ui/server/registrar/OteStatusActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/OteStatusActionTest.java index 52edc8952..58a5359c8 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/OteStatusActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/OteStatusActionTest.java @@ -27,9 +27,10 @@ import google.registry.model.OteAccountBuilder; import google.registry.model.OteStats.StatType; import google.registry.model.OteStatsTestHelper; import google.registry.model.registrar.Registrar.Type; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.AuthenticatedRegistrarAccessor.Role; -import google.registry.testing.AppEngineExtension; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -46,7 +47,8 @@ public final class OteStatusActionTest { private final OteStatusAction action = new OteStatusAction(); @RegisterExtension - public final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/ui/server/registrar/RegistrarSettingsActionTestCase.java b/core/src/test/java/google/registry/ui/server/registrar/RegistrarSettingsActionTestCase.java index 82fe2e4a6..bc94bef13 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/RegistrarSettingsActionTestCase.java +++ b/core/src/test/java/google/registry/ui/server/registrar/RegistrarSettingsActionTestCase.java @@ -37,6 +37,8 @@ import com.google.common.collect.ImmutableSortedMap; import com.google.common.truth.Truth; import google.registry.flows.certs.CertificateChecker; import google.registry.model.registrar.RegistrarPoc; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.JsonActionRunner; import google.registry.request.JsonResponse; import google.registry.request.ResponseImpl; @@ -44,7 +46,6 @@ import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.UserAuthInfo; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.FakeClock; import google.registry.ui.server.SendEmailUtils; @@ -76,8 +77,8 @@ public abstract class RegistrarSettingsActionTestCase { final FakeClock clock = new FakeClock(DateTime.parse("2014-01-01T00:00:00Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).withTaskQueue().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @Mock HttpServletRequest req; @Mock HttpServletResponse rsp; @@ -97,7 +98,7 @@ public abstract class RegistrarSettingsActionTestCase { disallowRegistrarAccess(CLIENT_ID, "newtld"); // Add a technical contact to the registrar (in addition to the default admin contact created by - // AppEngineExtension). + // JpaTransactionManagerExtension). techContact = getOnlyElement(loadRegistrar(CLIENT_ID).getContactsOfType(RegistrarPoc.Type.TECH)); diff --git a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockGetActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockGetActionTest.java index 87ef36d21..c78b2edd2 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockGetActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockGetActionTest.java @@ -15,11 +15,11 @@ package google.registry.ui.server.registrar; import static com.google.common.truth.Truth.assertThat; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar2; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrarContact2; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrarContact3; import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.ADMIN; import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.OWNER; -import static google.registry.testing.AppEngineExtension.makeRegistrar2; -import static google.registry.testing.AppEngineExtension.makeRegistrarContact2; -import static google.registry.testing.AppEngineExtension.makeRegistrarContact3; import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.SqlHelper.saveRegistryLock; import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; @@ -36,12 +36,13 @@ import google.registry.model.console.RegistrarRole; import google.registry.model.console.UserRoles; import google.registry.model.domain.RegistryLock; import google.registry.model.registrar.RegistrarPoc; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.Action.Method; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.UserAuthInfo; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import java.util.Map; @@ -60,8 +61,8 @@ final class RegistryLockGetActionTest { private final FakeClock fakeClock = new FakeClock(); @RegisterExtension - final AppEngineExtension appEngineExtension = - AppEngineExtension.builder().withCloudSql().withClock(fakeClock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationTestExtension(); private final FakeResponse response = new FakeResponse(); diff --git a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java index bac6ebe0e..2449c98de 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockPostActionTest.java @@ -37,6 +37,9 @@ import google.registry.model.console.RegistrarRole; import google.registry.model.console.UserRoles; import google.registry.model.domain.Domain; import google.registry.model.domain.RegistryLock; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; +import google.registry.persistence.transaction.JpaTransactionManagerExtension; import google.registry.request.JsonActionRunner; import google.registry.request.JsonResponse; import google.registry.request.ResponseImpl; @@ -45,7 +48,6 @@ import google.registry.request.auth.AuthResult; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.request.auth.AuthenticatedRegistrarAccessor.Role; import google.registry.request.auth.UserAuthInfo; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.DatabaseHelper; import google.registry.testing.DeterministicStringGenerator; @@ -85,8 +87,8 @@ final class RegistryLockPostActionTest { private final FakeClock clock = new FakeClock(); @RegisterExtension - final AppEngineExtension appEngineExtension = - AppEngineExtension.builder().withCloudSql().withClock(clock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); private User userWithoutPermission; private User userWithLockPermission; @@ -101,8 +103,10 @@ final class RegistryLockPostActionTest { @BeforeEach void beforeEach() throws Exception { - userWithLockPermission = userFromRegistrarPoc(AppEngineExtension.makeRegistrarContact3()); - userWithoutPermission = userFromRegistrarPoc(AppEngineExtension.makeRegistrarContact2()); + userWithLockPermission = + userFromRegistrarPoc(JpaTransactionManagerExtension.makeRegistrarContact3()); + userWithoutPermission = + userFromRegistrarPoc(JpaTransactionManagerExtension.makeRegistrarContact2()); createTld("tld"); domain = persistResource(DatabaseHelper.newDomain("example.tld")); diff --git a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockVerifyActionTest.java b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockVerifyActionTest.java index 4ab5214ab..6b8fb01ce 100644 --- a/core/src/test/java/google/registry/ui/server/registrar/RegistryLockVerifyActionTest.java +++ b/core/src/test/java/google/registry/ui/server/registrar/RegistryLockVerifyActionTest.java @@ -40,17 +40,18 @@ import google.registry.model.domain.RegistryLock; import google.registry.model.host.Host; import google.registry.model.reporting.HistoryEntry; import google.registry.model.tld.Registry; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.auth.AuthLevel; import google.registry.request.auth.AuthResult; import google.registry.request.auth.UserAuthInfo; import google.registry.security.XsrfTokenManager; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CloudTasksHelper; import google.registry.testing.DatabaseHelper; import google.registry.testing.DeterministicStringGenerator; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; -import google.registry.testing.UserInfo; +import google.registry.testing.UserServiceExtension; import google.registry.tools.DomainLockUtils; import google.registry.util.StringGenerator; import google.registry.util.StringGenerator.Alphabets; @@ -66,12 +67,12 @@ final class RegistryLockVerifyActionTest { private final FakeClock fakeClock = new FakeClock(); @RegisterExtension - final AppEngineExtension appEngineExtension = - AppEngineExtension.builder() - .withCloudSql() - .withClock(fakeClock) - .withUserService(UserInfo.create("marla.singer@example.com")) - .build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(fakeClock).buildIntegrationTestExtension(); + + @RegisterExtension + final UserServiceExtension userServiceExtension = + new UserServiceExtension("marla.singer@example.com"); private final HttpServletRequest request = mock(HttpServletRequest.class); private final UserService userService = UserServiceFactory.getUserService(); diff --git a/core/src/test/java/google/registry/util/ConcurrentTest.java b/core/src/test/java/google/registry/util/ConcurrentTest.java index 5d2c71759..39aafcc8d 100644 --- a/core/src/test/java/google/registry/util/ConcurrentTest.java +++ b/core/src/test/java/google/registry/util/ConcurrentTest.java @@ -20,17 +20,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableList; import com.google.common.testing.NullPointerTester; import com.google.common.util.concurrent.UncheckedExecutionException; -import google.registry.testing.AppEngineExtension; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; /** Unit tests for {@link Concurrent}. */ class ConcurrentTest { - @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); - @Test void testTransform_emptyList_returnsEmptyList() { assertThat(Concurrent.transform(ImmutableList.of(), x -> x)).isEmpty(); diff --git a/core/src/test/java/google/registry/util/RequestStatusCheckerImplTest.java b/core/src/test/java/google/registry/util/RequestStatusCheckerImplTest.java index ced60fe5d..ca2bff6fc 100644 --- a/core/src/test/java/google/registry/util/RequestStatusCheckerImplTest.java +++ b/core/src/test/java/google/registry/util/RequestStatusCheckerImplTest.java @@ -26,7 +26,7 @@ import com.google.appengine.api.log.RequestLogs; import com.google.apphosting.api.ApiProxy; import com.google.common.collect.ImmutableList; import com.google.common.testing.TestLogHandler; -import google.registry.testing.AppEngineExtension; +import google.registry.testing.UserServiceExtension; import java.util.logging.Level; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -57,7 +57,9 @@ final class RequestStatusCheckerImplTest { }); } - @RegisterExtension AppEngineExtension appEngineExtension = AppEngineExtension.builder().build(); + // We do not actually need to set up user service, rather, we just need this extension to set up + // App Engine environment so the status checker can make an App Engine API call. + @RegisterExtension UserServiceExtension userService = new UserServiceExtension(""); @BeforeEach void beforeEach() { diff --git a/core/src/test/java/google/registry/util/TaskQueueUtilsTest.java b/core/src/test/java/google/registry/util/TaskQueueUtilsTest.java index 44ff610e8..1d0a009b4 100644 --- a/core/src/test/java/google/registry/util/TaskQueueUtilsTest.java +++ b/core/src/test/java/google/registry/util/TaskQueueUtilsTest.java @@ -29,9 +29,9 @@ import com.google.appengine.api.taskqueue.TaskHandle; import com.google.appengine.api.taskqueue.TaskOptions; import com.google.appengine.api.taskqueue.TransientFailureException; import com.google.common.collect.ImmutableList; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeSleeper; +import google.registry.testing.TaskQueueExtension; import org.joda.time.DateTime; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -43,9 +43,7 @@ public final class TaskQueueUtilsTest { private static final int MAX_RETRIES = 3; - @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withTaskQueue().build(); + @RegisterExtension final TaskQueueExtension taskQueue = new TaskQueueExtension(); private int origBatchSize; diff --git a/core/src/test/java/google/registry/webdriver/RegistrarConsoleScreenshotTest.java b/core/src/test/java/google/registry/webdriver/RegistrarConsoleScreenshotTest.java index afcac3959..07c52835e 100644 --- a/core/src/test/java/google/registry/webdriver/RegistrarConsoleScreenshotTest.java +++ b/core/src/test/java/google/registry/webdriver/RegistrarConsoleScreenshotTest.java @@ -15,10 +15,11 @@ package google.registry.webdriver; import static com.google.common.truth.Truth.assertThat; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrar2; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrarContact2; +import static google.registry.persistence.transaction.JpaTransactionManagerExtension.makeRegistrarContact3; import static google.registry.server.Fixture.BASIC; import static google.registry.server.Route.route; -import static google.registry.testing.AppEngineExtension.makeRegistrar2; -import static google.registry.testing.AppEngineExtension.makeRegistrarContact2; import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.loadRegistrar; import static google.registry.testing.DatabaseHelper.persistActiveDomain; @@ -34,7 +35,6 @@ import google.registry.model.registrar.Registrar.State; import google.registry.model.registrar.RegistrarPoc; import google.registry.module.frontend.FrontendServlet; import google.registry.server.RegistryTestServer; -import google.registry.testing.AppEngineExtension; import google.registry.testing.CertificateSamples; import google.registry.testing.DatabaseHelper; import java.util.Optional; @@ -58,7 +58,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { route("/registry-lock-get", FrontendServlet.class), route("/registry-lock-verify", FrontendServlet.class)) .setFixtures(BASIC) - .setEmail("Marla.Singer@crr.com") // from AppEngineExtension.makeRegistrarContact3 + .setEmail("Marla.Singer@crr.com") // from makeRegistrarContact3 .build(); @RetryingTest(3) @@ -140,8 +140,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void settingsContactEdit_setRegistryLockPassword() throws Throwable { - server.runInAppEngineEnvironment( - () -> { persistResource(makeRegistrar2().asBuilder().setRegistryLockAllowed(true).build()); persistResource( makeRegistrarContact2() @@ -149,8 +147,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { .setRegistryLockEmailAddress("johndoe.registrylock@example.com") .setAllowedToSetRegistryLockPassword(true) .build()); - return null; - }); driver.manage().window().setSize(new Dimension(1050, 2000)); driver.get(server.getUrl("/registrar#contact-settings/johndoe@theregistrar.com")); driver.waitForDisplayedElement(By.tagName("h1")); @@ -175,24 +171,18 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { By.id("reg-app-btn-edit")); driver.diffPage("contact_view"); - server.runInAppEngineEnvironment( - () -> { - RegistrarPoc contact = - loadRegistrar("TheRegistrar").getContacts().stream() - .filter(c -> c.getEmailAddress().equals("johndoe@theregistrar.com")) - .findFirst() - .get(); + RegistrarPoc contact = + loadRegistrar("TheRegistrar").getContacts().stream() + .filter(c -> "johndoe@theregistrar.com".equals(c.getEmailAddress())) + .findFirst() + .get(); assertThat(contact.verifyRegistryLockPassword("password")).isTrue(); assertThat(contact.getRegistryLockEmailAddress()) .isEqualTo(Optional.of("johndoe.registrylock@example.com")); - return null; - }); } @RetryingTest(3) void settingsContactEdit_setRegistryLockPassword_alreadySet() throws Throwable { - server.runInAppEngineEnvironment( - () -> { persistResource( makeRegistrarContact2() .asBuilder() @@ -200,8 +190,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { .setRegistryLockPassword("hi") .build()); persistResource(makeRegistrar2().asBuilder().setRegistryLockAllowed(true).build()); - return null; - }); driver.manage().window().setSize(new Dimension(1050, 2000)); driver.get(server.getUrl("/registrar#contact-settings/johndoe@theregistrar.com")); driver.waitForDisplayedElement(By.tagName("h1")); @@ -211,8 +199,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void settingsContactEdit_setRegistryLockPassword_notAllowedForContact() throws Throwable { - server.runInAppEngineEnvironment( - () -> persistResource(makeRegistrar2().asBuilder().setRegistryLockAllowed(true).build())); + persistResource(makeRegistrar2().asBuilder().setRegistryLockAllowed(true).build()); driver.manage().window().setSize(new Dimension(1050, 2000)); driver.get(server.getUrl("/registrar#contact-settings/johndoe@theregistrar.com")); driver.waitForDisplayedElement(By.tagName("h1")); @@ -250,8 +237,8 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { * Makes sure the user can't "manually" enter the admin-settings. * *

Users don't have the "admin setting" tab (see the {@link #index_owner()} test). However, we - * also want to make sure that if a user enter's the URL fragment manually they don't get the - * admin page. + * also want to make sure that if a user enters the URL fragment manually they don't get the admin + * page. * *

Note that failure here is a UI issue only and not a security issue, since any "admin" change * a user tries to do is validated on the backend and fails for non-admins. @@ -278,7 +265,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { driver.get(server.getUrl("/registrar?clientId=oteunfinished-1#admin-settings")); driver.findElement(By.id("btn-ote-status")).click(); driver.findElement(By.id("ote-results-table")).click(); - // the 'hover' styling takes a bit to go away--sleep so we don't flake + // the 'hover' styling takes a bit to go away--sleep, so we don't flake Thread.sleep(250); driver.diffPage("result"); } @@ -291,7 +278,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { driver.diffPage("before_click"); driver.findElement(By.id("btn-ote-status")).click(); driver.findElement(By.id("ote-results-table")).click(); - // the 'hover' styling takes a bit to go away--sleep so we don't flake + // the 'hover' styling takes a bit to go away--sleep, so we don't flake Thread.sleep(250); driver.diffPage("result"); } @@ -319,16 +306,12 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void settingsSecurityWithCerts() throws Throwable { - server.runInAppEngineEnvironment( - () -> { persistResource( loadRegistrar("TheRegistrar") .asBuilder() .setClientCertificate(CertificateSamples.SAMPLE_CERT, START_OF_TIME) .setFailoverClientCertificate(CertificateSamples.SAMPLE_CERT2, START_OF_TIME) .build()); - return null; - }); driver.manage().window().setSize(new Dimension(1050, 2000)); driver.get(server.getUrl("/registrar#security-settings")); driver.waitForDisplayedElement(By.tagName("h1")); @@ -340,10 +323,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void index_registrarDisabled() throws Throwable { - server.runInAppEngineEnvironment( - () -> - persistResource( - loadRegistrar("TheRegistrar").asBuilder().setState(State.DISABLED).build())); + persistResource(loadRegistrar("TheRegistrar").asBuilder().setState(State.DISABLED).build()); driver.get(server.getUrl("/registrar")); driver.waitForDisplayedElement(By.tagName("h1")); driver.diffPage("view"); @@ -391,8 +371,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLockVerify_success() throws Throwable { String lockVerificationCode = "f1be78a2-2d61-458c-80f0-9dd8f2f8625f"; - server.runInAppEngineEnvironment( - () -> { createTld("tld"); persistResource(DatabaseHelper.newDomain("example-lock.tld")); saveRegistryLock( @@ -404,8 +382,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { .isSuperuser(false) .setDomainName("example-lock.tld") .build()); - return null; - }); driver.get( server.getUrl( "/registry-lock-verify?isLock=true&lockVerificationCode=" + lockVerificationCode)); @@ -429,11 +405,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_notAllowed() throws Throwable { - server.runInAppEngineEnvironment( - () -> { persistResource(makeRegistrar2().asBuilder().setRegistryLockAllowed(false).build()); - return null; - }); driver.get(server.getUrl("/registrar?clientId=TheRegistrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.diffPage("page"); @@ -441,11 +413,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_nonEmpty() throws Throwable { - server.runInAppEngineEnvironment( - () -> { createDomainAndSaveLock(); - return null; - }); driver.get(server.getUrl("/registrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.diffPage("page"); @@ -453,8 +421,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_nonEmpty_admin() throws Throwable { - server.runInAppEngineEnvironment( - () -> { createTld("tld"); // expired unlock request Domain expiredUnlockRequestDomain = persistActiveDomain("expiredunlock.tld"); @@ -497,8 +463,6 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { .setLockCompletionTime(START_OF_TIME) .setUnlockRequestTime(START_OF_TIME) .build()); - return null; - }); driver.get(server.getUrl("/registrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.diffPage("page"); @@ -506,11 +470,7 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_unlockModal() throws Throwable { - server.runInAppEngineEnvironment( - () -> { createDomainAndSaveLock(); - return null; - }); driver.get(server.getUrl("/registrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.findElement(By.id("button-unlock-example.tld")).click(); @@ -522,12 +482,8 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_lockModal() throws Throwable { server.setIsAdmin(true); - server.runInAppEngineEnvironment( - () -> { createTld("tld"); persistActiveDomain("example.tld"); - return null; - }); driver.get(server.getUrl("/registrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.findElement(By.id("button-lock-domain")).click(); @@ -538,27 +494,20 @@ class RegistrarConsoleScreenshotTest extends WebDriverTestCase { @RetryingTest(3) void registryLock_notAllowedForUser() throws Throwable { - server.runInAppEngineEnvironment( - () -> { - persistResource( - AppEngineExtension.makeRegistrarContact3() - .asBuilder() - .setAllowedToSetRegistryLockPassword(true) - .build()); - return null; - }); + persistResource( + makeRegistrarContact3().asBuilder().setAllowedToSetRegistryLockPassword(true).build()); driver.get(server.getUrl("/registrar?clientId=TheRegistrar#registry-lock")); driver.waitForDisplayedElement(By.tagName("h2")); driver.diffPage("page"); } - private void createDomainAndSaveLock() { + private static void createDomainAndSaveLock() { createTld("tld"); Domain domain = persistActiveDomain("example.tld"); saveRegistryLock(createRegistryLock(domain)); } - private RegistryLock createRegistryLock(Domain domain) { + private static RegistryLock createRegistryLock(Domain domain) { return new RegistryLock.Builder() .setVerificationCode(UUID.randomUUID().toString()) .isSuperuser(false) diff --git a/core/src/test/java/google/registry/webdriver/RegistrarConsoleWebTest.java b/core/src/test/java/google/registry/webdriver/RegistrarConsoleWebTest.java index d10f39945..d0db419a2 100644 --- a/core/src/test/java/google/registry/webdriver/RegistrarConsoleWebTest.java +++ b/core/src/test/java/google/registry/webdriver/RegistrarConsoleWebTest.java @@ -157,7 +157,7 @@ public class RegistrarConsoleWebTest extends WebDriverTestCase { .build()); driver.findElement(By.id("reg-app-btn-save")).click(); Thread.sleep(1000); - Registrar registrar = server.runInAppEngineEnvironment(() -> loadRegistrar("TheRegistrar")); + Registrar registrar = loadRegistrar("TheRegistrar"); assertThat(registrar.getEmailAddress()).isEqualTo("test1@example.com"); assertThat(registrar.getRegistrarId()).isEqualTo("TheRegistrar"); assertThat(registrar.getWhoisServer()).isEqualTo("foo.bar.baz"); @@ -176,9 +176,7 @@ public class RegistrarConsoleWebTest extends WebDriverTestCase { void testContactSettingsView() throws Throwable { driver.get(server.getUrl("/registrar#contact-settings")); driver.waitForDisplayedElement(By.id("reg-app-btn-add")); - ImmutableList contacts = - server.runInAppEngineEnvironment( - () -> loadRegistrar("TheRegistrar").getContacts().asList()); + ImmutableList contacts = loadRegistrar("TheRegistrar").getContacts().asList(); for (RegistrarPoc contact : contacts) { assertEltTextPresent(By.id("contacts[0].name"), contact.getName()); assertEltTextPresent(By.id("contacts[0].emailAddress"), contact.getEmailAddress()); @@ -190,7 +188,7 @@ public class RegistrarConsoleWebTest extends WebDriverTestCase { void testSecuritySettingsView() throws Throwable { driver.get(server.getUrl("/registrar#security-settings")); driver.waitForDisplayedElement(By.id("reg-app-btn-edit")); - Registrar registrar = server.runInAppEngineEnvironment(() -> loadRegistrar("TheRegistrar")); + Registrar registrar = loadRegistrar("TheRegistrar"); assertThat(driver.findElement(By.id("phonePasscode")).getAttribute("value")) .isEqualTo(registrar.getPhonePasscode()); } diff --git a/core/src/test/java/google/registry/webdriver/TestServerExtension.java b/core/src/test/java/google/registry/webdriver/TestServerExtension.java index 2b34601e3..503bf0a93 100644 --- a/core/src/test/java/google/registry/webdriver/TestServerExtension.java +++ b/core/src/test/java/google/registry/webdriver/TestServerExtension.java @@ -23,38 +23,33 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.net.HostAndPort; import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.auth.AuthenticatedRegistrarAccessor; import google.registry.server.Fixture; import google.registry.server.Route; import google.registry.server.TestServer; -import google.registry.testing.AppEngineExtension; import google.registry.testing.UserInfo; +import google.registry.testing.UserServiceExtension; import java.net.URL; import java.net.UnknownHostException; import java.nio.file.Path; import java.time.Duration; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; import java.util.concurrent.LinkedBlockingDeque; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; -/** - * JUnit extension that sets up and tears down {@link TestServer}. - * - *

Warning: App Engine testing environments are thread local. This extension will spawn - * that testing environment in a separate thread from your unit tests. Therefore any modifications - * you need to make to that testing environment (e.g. Datastore interactions) must be done through - * the {@link #runInAppEngineEnvironment(Callable)} method. - */ +/** JUnit extension that sets up and tears down {@link TestServer}. */ public final class TestServerExtension implements BeforeEachCallback, AfterEachCallback { private static final Duration SERVER_STATUS_POLLING_INTERVAL = Duration.ofSeconds(5); private final ImmutableList fixtures; - private final AppEngineExtension appEngineExtension; + private final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); + private final UserServiceExtension userService; private final BlockingQueue> jobs = new LinkedBlockingDeque<>(); private final ImmutableMap runfiles; private final ImmutableList routes; @@ -72,14 +67,7 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC this.fixtures = fixtures; // We create an GAE-Admin user, and then use AuthenticatedRegistrarAccessor.bypassAdminCheck to // choose whether the user is an admin or not. - this.appEngineExtension = - AppEngineExtension.builder() - .withCloudSql() - .withLocalModules() - .withUrlFetch() - .withTaskQueue() - .withUserService(UserInfo.createAdmin(email)) - .build(); + this.userService = new UserServiceExtension(UserInfo.createAdmin(email)); } @Override @@ -113,7 +101,7 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC @Override public void afterEach(ExtensionContext context) { // Reset the global state AuthenticatedRegistrarAccessor.bypassAdminCheck - // to the default value so it doesn't interfere with other tests + // to the default value, so it doesn't interfere with other tests AuthenticatedRegistrarAccessor.bypassAdminCheck = false; serverThread.interrupt(); try { @@ -131,7 +119,7 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC * Set the current user's Admin status. * *

This is sort of a hack because we can't actually change the user itself, nor that user's GAE - * roles. Instead we created a GAE-admin user in the constructor and we "bypass the admin check" + * roles. Instead, we created a GAE-admin user in the constructor and we "bypass the admin check" * if we want that user to not be an admin. * *

A better implementation would be to replace the AuthenticatedRegistrarAccessor - that way we @@ -147,19 +135,6 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC return testServer.getUrl(path); } - /** - * Runs arbitrary code inside server event loop thread. - * - *

You should use this method when you want to do things like change Datastore, because the App - * Engine testing environment is thread-local. - */ - T runInAppEngineEnvironment(Callable callback) throws Throwable { - FutureTask job = new FutureTask<>(callback); - jobs.add(job); - testServer.ping(); - return job.get(); - } - enum ServerStatus { NOT_STARTED, RUNNING, @@ -180,12 +155,14 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC public void run() { try { try { - appEngineExtension.beforeEach(context); + jpa.beforeEach(context); + userService.beforeEach(context); this.runInner(); } catch (InterruptedException e) { // This is what we expect to happen. } finally { - appEngineExtension.afterEach(context); + userService.afterEach(context); + jpa.afterEach(context); } } catch (Throwable e) { serverStatus = ServerStatus.FAILED; @@ -194,12 +171,6 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC } void runInner() throws Exception { - // Clear the SQL database and set it as primary (we have to do this out of band because the - // AppEngineExtension can't natively do it for us yet due to remaining ofy dependencies) - new JpaTestExtensions.Builder().buildIntegrationTestExtension().beforeEach(null); - // sleep a few millis to make sure we get to SQL-primary mode - Thread.sleep(4); - AppEngineExtension.loadInitialData(); for (Fixture fixture : fixtures) { fixture.load(); } @@ -210,6 +181,7 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC TestServerExtension.this.notify(); } try { + //noinspection InfiniteLoopStatement while (true) { testServer.process(); flushJobs(); @@ -256,14 +228,14 @@ public final class TestServerExtension implements BeforeEachCallback, AfterEachC return this; } - /** Sets an ordered list of Datastore fixtures that should be loaded on startup. */ + /** Sets an ordered list of fixtures that should be loaded on startup. */ public Builder setFixtures(Fixture... fixtures) { this.fixtures = ImmutableList.copyOf(fixtures); return this; } /** - * Sets information about the logged in user. + * Sets information about the logged-in user. * *

This unfortunately cannot be changed by test methods. */ diff --git a/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java b/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java index 2e68a3ee2..7edaa02bb 100644 --- a/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java +++ b/core/src/test/java/google/registry/whois/DomainWhoisResponseTest.java @@ -37,7 +37,8 @@ import google.registry.model.host.Host; import google.registry.model.registrar.Registrar; import google.registry.model.registrar.RegistrarPoc; import google.registry.persistence.VKey; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.whois.WhoisResponse.WhoisResponseResults; import org.joda.time.DateTime; @@ -49,7 +50,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class DomainWhoisResponseTest { @RegisterExtension - final AppEngineExtension gae = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private Host host1; private Host host2; diff --git a/core/src/test/java/google/registry/whois/NameserverWhoisResponseTest.java b/core/src/test/java/google/registry/whois/NameserverWhoisResponseTest.java index 74ee02bb6..f1d426f55 100644 --- a/core/src/test/java/google/registry/whois/NameserverWhoisResponseTest.java +++ b/core/src/test/java/google/registry/whois/NameserverWhoisResponseTest.java @@ -27,7 +27,8 @@ import com.google.common.net.InetAddresses; import google.registry.model.domain.Domain; import google.registry.model.host.Host; import google.registry.model.registrar.Registrar; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.whois.WhoisResponse.WhoisResponseResults; @@ -40,7 +41,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class NameserverWhoisResponseTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private Host host1; private Host host2; diff --git a/core/src/test/java/google/registry/whois/RegistrarWhoisResponseTest.java b/core/src/test/java/google/registry/whois/RegistrarWhoisResponseTest.java index 0e242b6c6..2150e7efc 100644 --- a/core/src/test/java/google/registry/whois/RegistrarWhoisResponseTest.java +++ b/core/src/test/java/google/registry/whois/RegistrarWhoisResponseTest.java @@ -25,7 +25,8 @@ import com.google.common.collect.ImmutableSet; 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.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.whois.WhoisResponse.WhoisResponseResults; import org.joda.time.DateTime; @@ -36,7 +37,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class RegistrarWhoisResponseTest { @RegisterExtension - final AppEngineExtension gae = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(DateTime.parse("2009-05-29T20:15:00Z")); diff --git a/core/src/test/java/google/registry/whois/WhoisActionTest.java b/core/src/test/java/google/registry/whois/WhoisActionTest.java index a2d7f4fd6..3e8409d3a 100644 --- a/core/src/test/java/google/registry/whois/WhoisActionTest.java +++ b/core/src/test/java/google/registry/whois/WhoisActionTest.java @@ -48,7 +48,8 @@ import google.registry.model.registrar.Registrar; import google.registry.model.tld.Registry; import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferStatus; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.FakeSleeper; @@ -72,8 +73,8 @@ public class WhoisActionTest { private final FakeClock clock = new FakeClock(DateTime.parse("2009-06-29T20:13:00Z")); @RegisterExtension - public final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @RegisterExtension public final TestCacheExtension testCacheExtension = diff --git a/core/src/test/java/google/registry/whois/WhoisCommandFactoryTest.java b/core/src/test/java/google/registry/whois/WhoisCommandFactoryTest.java index e8234eceb..ed0f6726d 100644 --- a/core/src/test/java/google/registry/whois/WhoisCommandFactoryTest.java +++ b/core/src/test/java/google/registry/whois/WhoisCommandFactoryTest.java @@ -27,7 +27,8 @@ import google.registry.config.RegistryConfig; import google.registry.model.domain.Domain; import google.registry.model.host.Host; import google.registry.model.registrar.Registrar; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.DatabaseHelper; import google.registry.testing.FakeClock; import google.registry.testing.TestCacheExtension; @@ -43,8 +44,8 @@ class WhoisCommandFactoryTest { FakeClock clock = new FakeClock(); @RegisterExtension - final AppEngineExtension appEngine = - AppEngineExtension.builder().withCloudSql().withClock(clock).build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().withClock(clock).buildIntegrationTestExtension(); @RegisterExtension final TestCacheExtension testCacheExtension = diff --git a/core/src/test/java/google/registry/whois/WhoisHttpActionTest.java b/core/src/test/java/google/registry/whois/WhoisHttpActionTest.java index 820141a09..a7eb02857 100644 --- a/core/src/test/java/google/registry/whois/WhoisHttpActionTest.java +++ b/core/src/test/java/google/registry/whois/WhoisHttpActionTest.java @@ -37,7 +37,8 @@ import static org.mockito.Mockito.when; import google.registry.model.contact.Contact; import google.registry.model.registrar.Registrar; import google.registry.model.tld.Registry; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.testing.FakeResponse; import google.registry.testing.FullFieldsTestEntityHelper; @@ -60,7 +61,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class WhoisHttpActionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeResponse response = new FakeResponse(); private final FakeClock clock = new FakeClock(DateTime.parse("2009-06-29T20:13:00Z")); diff --git a/core/src/test/java/google/registry/whois/WhoisInjectionTest.java b/core/src/test/java/google/registry/whois/WhoisInjectionTest.java index 14ab68ea1..34d91af6c 100644 --- a/core/src/test/java/google/registry/whois/WhoisInjectionTest.java +++ b/core/src/test/java/google/registry/whois/WhoisInjectionTest.java @@ -21,8 +21,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.request.RequestModule; -import google.registry.testing.AppEngineExtension; import google.registry.testing.FullFieldsTestEntityHelper; import java.io.BufferedReader; import java.io.PrintWriter; @@ -38,7 +39,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; final class WhoisInjectionTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final HttpServletRequest req = mock(HttpServletRequest.class); private final HttpServletResponse rsp = mock(HttpServletResponse.class); diff --git a/core/src/test/java/google/registry/whois/WhoisReaderTest.java b/core/src/test/java/google/registry/whois/WhoisReaderTest.java index d8eef1988..6524b02f5 100644 --- a/core/src/test/java/google/registry/whois/WhoisReaderTest.java +++ b/core/src/test/java/google/registry/whois/WhoisReaderTest.java @@ -20,7 +20,8 @@ import static google.registry.testing.LogsSubject.assertAboutLogs; import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.testing.TestLogHandler; -import google.registry.testing.AppEngineExtension; +import google.registry.persistence.transaction.JpaTestExtensions; +import google.registry.persistence.transaction.JpaTestExtensions.JpaIntegrationTestExtension; import google.registry.testing.FakeClock; import google.registry.util.JdkLoggerConfig; import java.io.StringReader; @@ -33,7 +34,8 @@ import org.junit.jupiter.api.extension.RegisterExtension; class WhoisReaderTest { @RegisterExtension - final AppEngineExtension appEngine = AppEngineExtension.builder().withCloudSql().build(); + final JpaIntegrationTestExtension jpa = + new JpaTestExtensions.Builder().buildIntegrationTestExtension(); private final FakeClock clock = new FakeClock(); private final TestLogHandler testLogHandler = new TestLogHandler();