diff --git a/core/src/test/java/google/registry/beam/initsql/WriteToSqlTest.java b/core/src/test/java/google/registry/beam/initsql/WriteToSqlTest.java index 0dbb28aef..f0ed6463b 100644 --- a/core/src/test/java/google/registry/beam/initsql/WriteToSqlTest.java +++ b/core/src/test/java/google/registry/beam/initsql/WriteToSqlTest.java @@ -26,6 +26,7 @@ import google.registry.model.registrar.Registrar; import google.registry.persistence.transaction.JpaTestRules; import google.registry.persistence.transaction.JpaTestRules.JpaIntegrationTestRule; import google.registry.testing.AppEngineRule; +import google.registry.testing.DatastoreEntityExtension; import google.registry.testing.DatastoreHelper; import google.registry.testing.FakeClock; import google.registry.testing.InjectRule; @@ -41,6 +42,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -54,10 +56,14 @@ public class WriteToSqlTest implements Serializable { @Rule public final transient InjectRule injectRule = new InjectRule(); - @Rule - public transient JpaIntegrationTestRule jpaRule = + // For use in the RuleChain below. Saves a reference to retrieve Database connection config. + public final transient JpaIntegrationTestRule database = new JpaTestRules.Builder().withClock(fakeClock).buildIntegrationTestRule(); + @Rule + public final transient RuleChain jpaRules = + RuleChain.outerRule(new DatastoreEntityExtension()).around(database); + @Rule public transient TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule @@ -91,7 +97,9 @@ public class WriteToSqlTest implements Serializable { new PrintStream(credentialFile) .printf( "%s %s %s", - jpaRule.getDatabaseUrl(), jpaRule.getDatabaseUsername(), jpaRule.getDatabasePassword()) + database.getDatabaseUrl(), + database.getDatabaseUsername(), + database.getDatabasePassword()) .close(); } diff --git a/core/src/test/java/google/registry/testing/DatastoreEntityExtension.java b/core/src/test/java/google/registry/testing/DatastoreEntityExtension.java index a18ebda1f..6de5092f5 100644 --- a/core/src/test/java/google/registry/testing/DatastoreEntityExtension.java +++ b/core/src/test/java/google/registry/testing/DatastoreEntityExtension.java @@ -20,6 +20,7 @@ import java.util.Map; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.rules.ExternalResource; import org.testcontainers.shaded.com.google.common.collect.ImmutableMap; /** @@ -33,7 +34,8 @@ import org.testcontainers.shaded.com.google.common.collect.ImmutableMap; * href="https://junit.org/junit5/docs/current/user-guide/#extensions-registration-programmatic"> * JUnit 5 User Guide for details of extension ordering. */ -public class DatastoreEntityExtension implements BeforeEachCallback, AfterEachCallback { +public class DatastoreEntityExtension extends ExternalResource + implements BeforeEachCallback, AfterEachCallback { private static final Environment PLACEHOLDER_ENV = new PlaceholderEnvironment(); @@ -48,6 +50,16 @@ public class DatastoreEntityExtension implements BeforeEachCallback, AfterEachCa ApiProxy.setEnvironmentForCurrentThread(null); } + @Override + protected void before() { + beforeEach(null); + } + + @Override + protected void after() { + afterEach(null); + } + private static final class PlaceholderEnvironment implements Environment { @Override