You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by ki...@apache.org on 2022/10/11 08:21:26 UTC

[incubator-seatunnel] branch dev updated: [improve][e2e] Containers disable using enum classes (#3058)

This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 857f61992 [improve][e2e] Containers disable using enum classes (#3058)
857f61992 is described below

commit 857f6199222673928c72dc8564f3a924700dd4c8
Author: Zongwen Li <zo...@apache.org>
AuthorDate: Tue Oct 11 16:21:20 2022 +0800

    [improve][e2e] Containers disable using enum classes (#3058)
---
 .../{TestContainer.java => EngineType.java}        | 31 +++++++------
 .../e2e/common/container/TestContainer.java        |  2 +-
 .../{TestContainer.java => TestContainerId.java}   | 36 ++++++++-------
 .../common/container/flink/Flink13Container.java   |  5 ++-
 .../container/seatunnel/SeaTunnelContainer.java    |  5 ++-
 .../common/container/spark/Spark2Container.java    |  5 ++-
 .../seatunnel/e2e/common/junit/AnnotationUtil.java | 51 ++++++++++++++++++++++
 .../common/junit/ContainerTestingExtension.java    | 14 +-----
 .../e2e/common/junit/DisabledOnContainer.java      |  6 ++-
 .../junit/TestCaseInvocationContextProvider.java   | 16 +------
 .../apache/seatunnel/e2e/flink/FlinkContainer.java |  5 ++-
 .../apache/seatunnel/e2e/flink/FlinkContainer.java |  5 ++-
 .../seatunnel/e2e/flink/sql/FlinkContainer.java    |  5 ++-
 .../apache/seatunnel/e2e/spark/SparkContainer.java |  5 ++-
 .../apache/seatunnel/e2e/spark/SparkContainer.java |  5 ++-
 15 files changed, 120 insertions(+), 76 deletions(-)

diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/EngineType.java
similarity index 62%
copy from seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
copy to seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/EngineType.java
index 7189ffdb6..b964bd5b4 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/EngineType.java
@@ -17,20 +17,19 @@
 
 package org.apache.seatunnel.e2e.common.container;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.Network;
-
-import java.io.IOException;
-
-public interface TestContainer extends TestResource {
-
-    Network NETWORK = Network.newNetwork();
-
-    String identifier();
-
-    void executeExtraCommands(ContainerExtendedFactory extendedFactory) throws IOException, InterruptedException;
-
-    Container.ExecResult executeJob(String confFile) throws IOException, InterruptedException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum EngineType {
+    FLINK("Flink"),
+    SPARK("Spark"),
+    SEATUNNEL("SeaTunnel");
+    private final String name;
+
+    @Override
+    public String toString() {
+        return name;
+    }
 }
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
index 7189ffdb6..7632d8ade 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
@@ -28,7 +28,7 @@ public interface TestContainer extends TestResource {
 
     Network NETWORK = Network.newNetwork();
 
-    String identifier();
+    TestContainerId identifier();
 
     void executeExtraCommands(ContainerExtendedFactory extendedFactory) throws IOException, InterruptedException;
 
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainerId.java
similarity index 60%
copy from seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
copy to seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainerId.java
index 7189ffdb6..4097c04b7 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainer.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/TestContainerId.java
@@ -17,20 +17,24 @@
 
 package org.apache.seatunnel.e2e.common.container;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.Network;
-
-import java.io.IOException;
-
-public interface TestContainer extends TestResource {
-
-    Network NETWORK = Network.newNetwork();
-
-    String identifier();
-
-    void executeExtraCommands(ContainerExtendedFactory extendedFactory) throws IOException, InterruptedException;
-
-    Container.ExecResult executeJob(String confFile) throws IOException, InterruptedException;
+import static org.apache.seatunnel.e2e.common.container.EngineType.FLINK;
+import static org.apache.seatunnel.e2e.common.container.EngineType.SPARK;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public enum TestContainerId {
+    FLINK_1_13(FLINK, "1.13.6"),
+    SPARK_2_4(SPARK, "2.4.3"),
+    SEATUNNEL(EngineType.SEATUNNEL, "2.2.0");
+
+    private final EngineType engineType;
+    private final String version;
+
+    @Override
+    public String toString() {
+        return engineType.toString() + ":" + version;
+    }
 }
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/Flink13Container.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/Flink13Container.java
index 362bc7795..0a7af6454 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/Flink13Container.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/Flink13Container.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.common.container.flink;
 
 import org.apache.seatunnel.e2e.common.container.TestContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 import com.google.auto.service.AutoService;
 import lombok.NoArgsConstructor;
@@ -32,8 +33,8 @@ import lombok.NoArgsConstructor;
 public class Flink13Container extends AbstractTestFlinkContainer {
 
     @Override
-    public String identifier() {
-        return "flink:1.13.6";
+    public TestContainerId identifier() {
+        return TestContainerId.FLINK_1_13;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/seatunnel/SeaTunnelContainer.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/seatunnel/SeaTunnelContainer.java
index e53942e43..2a3187a80 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/seatunnel/SeaTunnelContainer.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/seatunnel/SeaTunnelContainer.java
@@ -19,6 +19,7 @@ package org.apache.seatunnel.e2e.common.container.seatunnel;
 
 import org.apache.seatunnel.e2e.common.container.AbstractTestContainer;
 import org.apache.seatunnel.e2e.common.container.ContainerExtendedFactory;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 import lombok.NoArgsConstructor;
 import org.slf4j.Logger;
@@ -108,8 +109,8 @@ public class SeaTunnelContainer extends AbstractTestContainer {
     }
 
     @Override
-    public String identifier() {
-        return "SeaTunnel";
+    public TestContainerId identifier() {
+        return TestContainerId.SEATUNNEL;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/Spark2Container.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/Spark2Container.java
index dd09bcda0..a997481f9 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/Spark2Container.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/Spark2Container.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.common.container.spark;
 
 import org.apache.seatunnel.e2e.common.container.TestContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 import com.google.auto.service.AutoService;
 import lombok.NoArgsConstructor;
@@ -31,8 +32,8 @@ import lombok.NoArgsConstructor;
 public class Spark2Container extends AbstractTestSparkContainer {
 
     @Override
-    public String identifier() {
-        return "spark:2.4.3";
+    public TestContainerId identifier() {
+        return TestContainerId.SPARK_2_4;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/AnnotationUtil.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/AnnotationUtil.java
new file mode 100644
index 000000000..b48712de7
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/AnnotationUtil.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.seatunnel.e2e.common.junit;
+
+import org.apache.seatunnel.e2e.common.container.EngineType;
+import org.apache.seatunnel.e2e.common.container.TestContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.junit.platform.commons.util.AnnotationUtils;
+
+import java.lang.reflect.AnnotatedElement;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class AnnotationUtil {
+
+    public static List<TestContainer> filterDisabledContainers(List<TestContainer> containers, AnnotatedElement annotatedElement) {
+        // Filters disabled containers
+        final List<TestContainerId> disabledContainers = new ArrayList<>();
+        final List<EngineType> disabledEngineTypes = new ArrayList<>();
+        AnnotationUtils.findAnnotation(annotatedElement, DisabledOnContainer.class)
+            .ifPresent(annotation -> {
+                Collections.addAll(disabledContainers, annotation.value());
+                Collections.addAll(disabledEngineTypes, annotation.type());
+            });
+        return containers.stream()
+            .filter(container -> !disabledContainers.contains(container.identifier()))
+            .filter(container -> !disabledEngineTypes.contains(container.identifier().getEngineType()))
+            .collect(Collectors.toList());
+    }
+}
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/ContainerTestingExtension.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/ContainerTestingExtension.java
index b2175c20e..d36c65140 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/ContainerTestingExtension.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/ContainerTestingExtension.java
@@ -25,14 +25,10 @@ import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.platform.commons.support.AnnotationSupport;
-import org.junit.platform.commons.util.AnnotationUtils;
 
 import java.lang.annotation.Annotation;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class ContainerTestingExtension implements BeforeAllCallback, AfterAllCallback {
     public static final ExtensionContext.Namespace TEST_RESOURCE_NAMESPACE =
@@ -62,14 +58,8 @@ public class ContainerTestingExtension implements BeforeAllCallback, AfterAllCal
 
         checkExactlyOneAnnotatedField(containersFactories, TestContainers.class);
 
-        // Filters disabled containers
-        final List<String> disabledContainers = new ArrayList<>();
-        AnnotationUtils.findAnnotation(context.getRequiredTestInstance().getClass(), DisabledOnContainer.class)
-            .ifPresent(annotation -> Collections.addAll(disabledContainers, annotation.value()));
-        List<TestContainer> testContainers = containersFactories.get(0).create()
-            .stream()
-            .filter(container -> !disabledContainers.contains(container.identifier()))
-            .collect(Collectors.toList());
+        List<TestContainer> testContainers = AnnotationUtil.filterDisabledContainers(containersFactories.get(0).create(),
+            context.getRequiredTestInstance().getClass());
         context.getStore(TEST_RESOURCE_NAMESPACE)
             .put(TEST_CONTAINERS_STORE_KEY, testContainers);
     }
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/DisabledOnContainer.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/DisabledOnContainer.java
index d908d5e27..dcebfa72c 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/DisabledOnContainer.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/DisabledOnContainer.java
@@ -17,7 +17,9 @@
 
 package org.apache.seatunnel.e2e.common.junit;
 
+import org.apache.seatunnel.e2e.common.container.EngineType;
 import org.apache.seatunnel.e2e.common.container.TestContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -31,7 +33,9 @@ public @interface DisabledOnContainer {
     /**
      * {@link TestContainer#identifier()}
      */
-    String[] value();
+    TestContainerId[] value();
+
+    EngineType[] type() default {};
 
     /**
      * Custom reason to provide if the test container is disabled.
diff --git a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TestCaseInvocationContextProvider.java b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TestCaseInvocationContextProvider.java
index f73f5af7f..cd4818470 100644
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TestCaseInvocationContextProvider.java
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TestCaseInvocationContextProvider.java
@@ -34,13 +34,9 @@ import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
 import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
 import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
-import org.junit.platform.commons.util.AnnotationUtils;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 @Slf4j
@@ -57,16 +53,8 @@ public class TestCaseInvocationContextProvider implements TestTemplateInvocation
     @SuppressWarnings("unchecked")
     @Override
     public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
-        final List<String> disabledContainers = new ArrayList<>();
-        AnnotationUtils.findAnnotation(context.getRequiredTestMethod(), DisabledOnContainer.class)
-            .ifPresent(annotation -> Collections.addAll(disabledContainers, annotation.value()));
-
-        // Filters disabled containers
-        List<TestContainer> testContainers = ((List<TestContainer>) context.getStore(TEST_RESOURCE_NAMESPACE)
-            .get(TEST_CONTAINERS_STORE_KEY))
-            .stream()
-            .filter(container -> !disabledContainers.contains(container.identifier()))
-            .collect(Collectors.toList());
+        List<TestContainer> testContainers = AnnotationUtil.filterDisabledContainers((List<TestContainer>) context.getStore(TEST_RESOURCE_NAMESPACE)
+            .get(TEST_CONTAINERS_STORE_KEY), context.getRequiredTestMethod());
 
         ContainerExtendedFactory containerExtendedFactory = (ContainerExtendedFactory) context.getStore(TEST_RESOURCE_NAMESPACE)
             .get(TEST_EXTENDED_FACTORY_STORE_KEY);
diff --git a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
index d1c9e8640..21c96ac8f 100644
--- a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
+++ b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.flink;
 
 import org.apache.seatunnel.e2e.common.AbstractFlinkContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 /**
  * This class is the base class of FlinkEnvironment test for new seatunnel connector API.
@@ -27,8 +28,8 @@ import org.apache.seatunnel.e2e.common.AbstractFlinkContainer;
 public abstract class FlinkContainer extends AbstractFlinkContainer {
 
     @Override
-    public String identifier() {
-        return "connector-v2/flink:1.13.6";
+    public TestContainerId identifier() {
+        return TestContainerId.FLINK_1_13;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
index 169af78f4..d6774a63e 100644
--- a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
+++ b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/FlinkContainer.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.flink;
 
 import org.apache.seatunnel.e2e.common.AbstractFlinkContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 /**
  * This class is the base class of FlinkEnvironment test.
@@ -27,8 +28,8 @@ import org.apache.seatunnel.e2e.common.AbstractFlinkContainer;
 public abstract class FlinkContainer extends AbstractFlinkContainer {
 
     @Override
-    public String identifier() {
-        return "connector-v1/flink:1.13.6";
+    public TestContainerId identifier() {
+        return TestContainerId.FLINK_1_13;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/sql/FlinkContainer.java b/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/sql/FlinkContainer.java
index 5231369d1..97547e164 100644
--- a/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/sql/FlinkContainer.java
+++ b/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-e2e-base/src/test/java/org/apache/seatunnel/e2e/flink/sql/FlinkContainer.java
@@ -20,6 +20,7 @@ package org.apache.seatunnel.e2e.flink.sql;
 import static org.apache.seatunnel.e2e.common.util.ContainerUtil.copyConfigFileToContainer;
 
 import org.apache.seatunnel.e2e.common.AbstractFlinkContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 import org.testcontainers.containers.Container;
 
@@ -33,8 +34,8 @@ import java.io.IOException;
 public abstract class FlinkContainer extends AbstractFlinkContainer {
 
     @Override
-    public String identifier() {
-        return "connector-v1/flink-sql:1.13.6";
+    public TestContainerId identifier() {
+        return TestContainerId.FLINK_1_13;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
index 9c3d5a415..98be4f031 100644
--- a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
+++ b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.spark;
 
 import org.apache.seatunnel.e2e.common.AbstractSparkContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 /**
  * This class is the base class of SparkEnvironment test. The before method will create a Spark master, and after method will close the Spark master.
@@ -26,8 +27,8 @@ import org.apache.seatunnel.e2e.common.AbstractSparkContainer;
 public abstract class SparkContainer extends AbstractSparkContainer {
 
     @Override
-    public String identifier() {
-        return "connector-v2/spark:2.4.3";
+    public TestContainerId identifier() {
+        return TestContainerId.SPARK_2_4;
     }
 
     @Override
diff --git a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java b/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
index 2aa88a4da..87f5ca0d7 100644
--- a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
+++ b/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-e2e-base/src/test/java/org/apache/seatunnel/e2e/spark/SparkContainer.java
@@ -18,6 +18,7 @@
 package org.apache.seatunnel.e2e.spark;
 
 import org.apache.seatunnel.e2e.common.AbstractSparkContainer;
+import org.apache.seatunnel.e2e.common.container.TestContainerId;
 
 /**
  * This class is the base class of SparkEnvironment test. The before method will create a Spark master, and after method will close the Spark master.
@@ -26,8 +27,8 @@ import org.apache.seatunnel.e2e.common.AbstractSparkContainer;
 public abstract class SparkContainer extends AbstractSparkContainer {
 
     @Override
-    public String identifier() {
-        return "connector-v1/spark:2.4.3";
+    public TestContainerId identifier() {
+        return TestContainerId.SPARK_2_4;
     }
 
     @Override