Improve running spanner emulator in docker

- use GCloud testcontainer module [1] instead of generic container
- use SpannerEmulatorContainer [2] from the GCloud testcontainer module
- update testcontainers to 1.9.0
- rename the class preparing a database for SpannerGlobalRefdatabase to
  EmulatedSpannerRefDatabase

[1] https://java.testcontainers.org/modules/gcloud/
[2] https://java.testcontainers.org/modules/gcloud/#spanner

Change-Id: I14decdce8c2d6bcf9a0af14f676fb530b23c97d5
diff --git a/BUILD b/BUILD
index 5b434d5..f4d80f3 100644
--- a/BUILD
+++ b/BUILD
@@ -120,10 +120,10 @@
         "@docker-java-transport//jar",
         "@duct-tape//jar",
         "@global-refdb//jar",
+        "@google-auth-library-oauth2-http//jar",
         "@google-cloud-core//jar",
         "@google-cloud-spanner//jar",
-        "@testcontainer-localstack//jar",
+        "@testcontainer-gcloud//jar",
         "@testcontainers//jar",
-        "@google-auth-library-oauth2-http//jar",
     ],
 )
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index b4dba16..94f3ae3 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -417,18 +417,18 @@
         artifact = "com.gerritforge:global-refdb:3.3.2.1",
     )
 
-    TESTCONTAINERS_VERSION = "1.18.3"
+    TESTCONTAINERS_VERSION = "1.19.0"
 
     maven_jar(
         name = "testcontainers",
         artifact = "org.testcontainers:testcontainers:" + TESTCONTAINERS_VERSION,
-        sha1 = "a82f6258f92d50d278b9c67bdf5eabcaa5c08654",
+        sha1 = "f7794a79339b2e35f6be6507987deb7f7e3c3c0d",
     )
 
     maven_jar(
-        name = "testcontainer-localstack",
-        artifact = "org.testcontainers:localstack:" + TESTCONTAINERS_VERSION,
-        sha1 = "2b7a8d4522330217545c4234b916b6b77f5c6f95",
+        name = "testcontainer-gcloud",
+        artifact = "org.testcontainers:gcloud:" + TESTCONTAINERS_VERSION,
+        sha1 = "cea5741575fc8892f432991203aa8cbf8ddf85b4",
     )
 
     DOCKER_JAVA_VERS = "3.3.2"
diff --git a/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerEmulatorContainer.java b/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/EmulatedSpannerRefDb.java
similarity index 81%
rename from src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerEmulatorContainer.java
rename to src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/EmulatedSpannerRefDb.java
index 9ee1043..8b7fcfe 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerEmulatorContainer.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/EmulatedSpannerRefDb.java
@@ -39,29 +39,17 @@
 import java.util.concurrent.ExecutionException;
 import org.eclipse.jgit.lib.Config;
 import org.junit.Ignore;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.Wait;
+import org.testcontainers.containers.SpannerEmulatorContainer;
+import org.testcontainers.utility.DockerImageName;
 
 @Ignore
-public class SpannerEmulatorContainer {
-  public static class Container extends GenericContainer<Container> {
-    public static String EMULATOR_VERSION = "1.5.7";
-
-    public Container() {
-      super("gcr.io/cloud-spanner-emulator/emulator:" + EMULATOR_VERSION);
-    }
-  }
-
+public class EmulatedSpannerRefDb {
   public static final String PROJECT_ID = "test";
   public static final String SPANNER_INSTANCE_ID = "instance";
   public static final String SPANNER_DATABASE_ID = "refdb";
-  private static final int GRPC_PORT = 9010;
-  private static final int REST_PORT = 9020;
   private static final String pluginName = "spanner-refdb";
 
-  private final Container container;
-  private final Integer grpcPort;
-  private final Integer restPort;
+  private final SpannerEmulatorContainer container;
 
   private final Spanner spanner;
   private final InstanceAdminClient instanceAdminClient;
@@ -72,18 +60,15 @@
   private final Configuration pluginConfig;
 
   @Inject
-  @SuppressWarnings("resource")
-  public SpannerEmulatorContainer() throws Exception {
+  public EmulatedSpannerRefDb() throws Exception {
     container =
-        new Container().withExposedPorts(GRPC_PORT, REST_PORT).waitingFor(Wait.forListeningPort());
+        new SpannerEmulatorContainer(
+            DockerImageName.parse("gcr.io/cloud-spanner-emulator/emulator").withTag("1.5.9"));
     container.start();
-    grpcPort = container.getMappedPort(GRPC_PORT);
-    restPort = container.getMappedPort(REST_PORT);
     System.out.println(
-        "Spanner emulator container started and is listening on ports "
-            + grpcPort
-            + ", "
-            + restPort);
+        String.format(
+            "Spanner emulator container started and is listening on %s",
+            container.getEmulatorGrpcEndpoint()));
 
     spanner = getEmulatorOptions().getService();
     instanceAdminClient = spanner.getInstanceAdminClient();
@@ -111,18 +96,10 @@
     System.out.println("Spanner emulator container was stopped");
   }
 
-  public Container getContainer() {
+  public SpannerEmulatorContainer getContainer() {
     return container;
   }
 
-  public Integer getGrpcPort() {
-    return grpcPort;
-  }
-
-  public Integer getRestPort() {
-    return restPort;
-  }
-
   public Database getSpannerDatabase() {
     return spannerDatabase;
   }
@@ -133,7 +110,7 @@
 
   private SpannerOptions getEmulatorOptions() {
     return SpannerOptions.newBuilder()
-        .setEmulatorHost("localhost:" + getGrpcPort())
+        .setEmulatorHost(container.getEmulatorGrpcEndpoint())
         .setCredentials(NoCredentials.getInstance())
         .setProjectId(PROJECT_ID)
         .build();
diff --git a/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerRefDatabaseTest.java b/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerRefDatabaseTest.java
index 751e7bc..607256b 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerRefDatabaseTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/spannerrefdb/SpannerRefDatabaseTest.java
@@ -30,12 +30,12 @@
 
 public class SpannerRefDatabaseTest implements RefFixture {
 
-  private SpannerEmulatorContainer emulator;
+  private EmulatedSpannerRefDb emulator;
   private SpannerRefDatabase refdb;
 
   @Before
   public void setup() throws Exception {
-    emulator = new SpannerEmulatorContainer();
+    emulator = new EmulatedSpannerRefDb();
     refdb = emulator.getSpannerRefDatabase();
   }