From 73c6c717d3d9870db19871babe47d452b6aef1c9 Mon Sep 17 00:00:00 2001
From: Honnix <honnix@users.noreply.github.com>
Date: Mon, 16 Oct 2023 09:01:26 +0200
Subject: [PATCH] Upgrade testcontainers (#261)

Signed-off-by: Hongxin Liang <honnix@users.noreply.github.com>
---
 .../test/java/org/flyte/utils/FlyteSandboxClient.java |  2 +-
 .../java/org/flyte/utils/FlyteSandboxContainer.java   |  9 ++++++---
 .../java/org/flyte/utils/FlyteSandboxNetwork.java     |  3 +--
 .../java/org/flyte/jflyte/aws/S3FileSystemIT.java     | 11 +++++++++--
 pom.xml                                               |  4 ++--
 5 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxClient.java b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxClient.java
index f614ef596..2acdf083f 100644
--- a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxClient.java
+++ b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxClient.java
@@ -44,7 +44,7 @@ public class FlyteSandboxClient {
   public static FlyteSandboxClient create() {
     String version = String.valueOf(System.currentTimeMillis());
 
-    String address = FlyteSandboxContainer.INSTANCE.getContainerIpAddress();
+    String address = FlyteSandboxContainer.INSTANCE.getHost();
     int port = FlyteSandboxContainer.INSTANCE.getMappedPort(30081);
 
     ManagedChannel channel =
diff --git a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxContainer.java b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxContainer.java
index c64c948bb..6d868e0c4 100644
--- a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxContainer.java
+++ b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxContainer.java
@@ -58,6 +58,10 @@ private static void startContainer() {
         IOUtils.copy(imageInputStream, outputStream);
       }
 
+      // for some reason, when running on Mac, the above copied file is not fully ready after the
+      // stream being closed; sleeping a little bit could work around that
+      Thread.sleep(1000);
+
       ExecResult execResult =
           INSTANCE.execInContainer(
               "docker", "load", "-i", "integration-tests/target/jflyte.tar.gz");
@@ -106,9 +110,8 @@ public void start() {
 
     logger().info("Flyte is ready!");
 
-    String consoleUri =
-        String.format("http://%s:%d/console", getContainerIpAddress(), getMappedPort(30081));
-    String k8sUri = String.format("http://%s:%d", getContainerIpAddress(), getMappedPort(30082));
+    String consoleUri = String.format("http://%s:%d/console", getHost(), getMappedPort(30081));
+    String k8sUri = String.format("http://%s:%d", getHost(), getMappedPort(30082));
 
     logger().info("Flyte UI is available at " + consoleUri);
     logger().info("K8s dashboard is available at " + k8sUri);
diff --git a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxNetwork.java b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxNetwork.java
index 4ecb5688f..3b46d9935 100644
--- a/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxNetwork.java
+++ b/integration-tests/src/test/java/org/flyte/utils/FlyteSandboxNetwork.java
@@ -24,7 +24,6 @@
 import org.junit.rules.ExternalResource;
 import org.testcontainers.DockerClientFactory;
 import org.testcontainers.containers.Network;
-import org.testcontainers.utility.ResourceReaper;
 
 // see https://github.com/testcontainers/testcontainers-java/issues/3081
 
@@ -79,7 +78,7 @@ protected void after() {
   @Override
   public void close() {
     if (initialized.getAndSet(false)) {
-      ResourceReaper.instance().removeNetworkById(NAME);
+      DockerClientFactory.instance().client().removeNetworkCmd(NAME).exec();
     }
   }
 }
diff --git a/jflyte-aws/src/test/java/org/flyte/jflyte/aws/S3FileSystemIT.java b/jflyte-aws/src/test/java/org/flyte/jflyte/aws/S3FileSystemIT.java
index 2e8300fff..00685f89a 100644
--- a/jflyte-aws/src/test/java/org/flyte/jflyte/aws/S3FileSystemIT.java
+++ b/jflyte-aws/src/test/java/org/flyte/jflyte/aws/S3FileSystemIT.java
@@ -21,6 +21,9 @@
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.testcontainers.containers.localstack.LocalStackContainer.Service.S3;
 
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3ClientBuilder;
 import com.amazonaws.util.IOUtils;
@@ -52,8 +55,12 @@ public class S3FileSystemIT {
   public void setUp() {
     s3 =
         AmazonS3ClientBuilder.standard()
-            .withEndpointConfiguration(localStack.getEndpointConfiguration(S3))
-            .withCredentials(localStack.getDefaultCredentialsProvider())
+            .withEndpointConfiguration(
+                new EndpointConfiguration(
+                    localStack.getEndpointOverride(S3).toString(), localStack.getRegion()))
+            .withCredentials(
+                new AWSStaticCredentialsProvider(
+                    new BasicAWSCredentials(localStack.getAccessKey(), localStack.getSecretKey())))
             .build();
 
     s3.createBucket("flyteorg");
diff --git a/pom.xml b/pom.xml
index 0b6208c8e..aa74b601d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -374,7 +374,7 @@
       <dependency>
         <groupId>net.java.dev.jna</groupId>
         <artifactId>jna</artifactId>
-        <version>5.8.0</version>
+        <version>5.12.1</version>
       </dependency>
       <dependency>
         <groupId>com.fasterxml.jackson</groupId>
@@ -400,7 +400,7 @@
       <dependency>
         <groupId>org.testcontainers</groupId>
         <artifactId>testcontainers-bom</artifactId>
-        <version>1.15.3</version>
+        <version>1.19.1</version>
         <type>pom</type>
         <scope>import</scope>
       </dependency>