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