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();