You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/08/07 13:19:30 UTC

[skywalking] branch master updated: Support for the remote debugging of local E2E testing framework (#5198)

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

kezhenxu94 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new 4b441f0  Support for the remote debugging of local E2E testing framework (#5198)
4b441f0 is described below

commit 4b441f06c3b84914117964fa81bce91b8178228e
Author: CoderGang <32...@qq.com>
AuthorDate: Fri Aug 7 21:19:10 2020 +0800

    Support for the remote debugging of local E2E testing framework (#5198)
---
 .../skywalking/e2e/SkyWalkingAnnotations.java      | 39 ++++++++++++-
 .../skywalking/e2e/docker/DockerComposeFile.java   | 40 +++++++++++++
 .../org/apache/skywalking/e2e/utils/Yamls.java     |  9 +++
 .../e2e/docker/DockerComposeFileTest.java          | 66 ++++++++++++++++++++++
 .../src/test/resources}/docker-compose.yml         | 47 +++++++--------
 test/e2e/e2e-test/docker/base-compose.yml          |  8 +++
 .../e2e/e2e-test/docker/cluster/docker-compose.yml |  3 +
 .../docker/cluster/docker-compose.zk.es6.yml       |  2 +
 .../docker/cluster/docker-compose.zk.es7.yml       |  2 +
 .../docker/cluster/docker-compose.zk.influxdb.yml  |  2 +
 .../docker/cluster/docker-compose.zk.mysql.yml     |  2 +
 .../e2e/e2e-test/docker/gateway/docker-compose.yml |  2 +
 .../e2e-test/docker/simple/auth/docker-compose.yml |  1 +
 13 files changed, 195 insertions(+), 28 deletions(-)

diff --git a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/SkyWalkingAnnotations.java b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/SkyWalkingAnnotations.java
index 1dd7b6b..5318536 100644
--- a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/SkyWalkingAnnotations.java
+++ b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/SkyWalkingAnnotations.java
@@ -20,15 +20,17 @@ package org.apache.skywalking.e2e;
 
 import com.google.common.base.Strings;
 import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import lombok.extern.slf4j.Slf4j;
@@ -99,6 +101,9 @@ public final class SkyWalkingAnnotations {
             ? (System.getenv("GITHUB_WORKSPACE") + "/logs") : "/tmp/skywalking/logs";
     private static final Path LOG_DIR = Paths.get(LOG_DIR_ENV);
 
+    private static final List<String> REMOTE_SERVICE_NAMES = new LinkedList<>();
+    private static final int REMOTE_DEBUG_PORT = 5005;
+
     static {
         LOGGER.info("IDENTIFIER={}", IDENTIFIER);
         LOGGER.info("LOG_DIR={}", LOG_DIR);
@@ -164,6 +169,17 @@ public final class SkyWalkingAnnotations {
                 field.set(testClass, HostAndPort.builder().host(host).port(port).build());
             }
         }
+        if (!IS_CI) {
+            File portFile = new File("remote_real_port");
+            portFile.createNewFile();
+            FileWriter fileWriter = new FileWriter(portFile.getName());
+            for (String service : REMOTE_SERVICE_NAMES) {
+                fileWriter.write(String.format("%s-%s:%s\n", service, compose.getServiceHost(service, REMOTE_DEBUG_PORT),
+                        compose.getServicePort(service, REMOTE_DEBUG_PORT)));
+            }
+            fileWriter.flush();
+            fileWriter.close();
+        }
     }
 
     private static Optional<DockerComposeContainer<?>> initDockerComposeField(final Object testClass) throws Exception {
@@ -186,6 +202,25 @@ public final class SkyWalkingAnnotations {
                                        .map(File::new).collect(Collectors.toList());
         final DockerComposeContainer<?> compose = new DockerComposeContainer<>(IDENTIFIER, files);
 
+        if (!IS_CI) {
+            files.forEach(file -> {
+                try {
+                    DockerComposeFile dockerComposeFile = DockerComposeFile.getAllConfigInfo(
+                            file.getAbsolutePath());
+                    LOGGER.info(file.getAbsolutePath());
+                    dockerComposeFile.getServices().forEach(
+                            (service, ignored) -> {
+                                if (dockerComposeFile.isExposedPort(service, REMOTE_DEBUG_PORT)) {
+                                    REMOTE_SERVICE_NAMES.add(service);
+                                    compose.withExposedService(service, REMOTE_DEBUG_PORT, Wait.forListeningPort());
+                                }
+                            });
+                } catch (IOException | InterruptedException e) {
+                    LOGGER.error(e.getMessage(), e);
+                }
+            });
+        }
+
         for (final Field field : fields) {
             if (field.isAnnotationPresent(ContainerHost.class) && field.isAnnotationPresent(ContainerPort.class)) {
                 throw new RuntimeException(
diff --git a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/docker/DockerComposeFile.java b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/docker/DockerComposeFile.java
index d83e1b4..dc5e1ea 100644
--- a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/docker/DockerComposeFile.java
+++ b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/docker/DockerComposeFile.java
@@ -18,12 +18,52 @@
 
 package org.apache.skywalking.e2e.docker;
 
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import lombok.Data;
 
+import static org.apache.skywalking.e2e.utils.Yamls.load;
+
 @Data
 public final class DockerComposeFile {
     private String version;
     private Map<String, Map<String, Object>> services;
     private Map<String, Map<String, Object>> networks;
+
+    public static DockerComposeFile getAllConfigInfo(String composeFile) throws IOException, InterruptedException {
+        String shStr = String.format("docker-compose -f %s config", composeFile);
+        Process process = Runtime.getRuntime().exec(shStr, null, null);
+        InputStreamReader ir = new InputStreamReader(process.getInputStream());
+        LineNumberReader input = new LineNumberReader(ir);
+        String line;
+        StringBuilder result = new StringBuilder();
+        process.waitFor();
+        while ((line = input.readLine()) != null) {
+            result.append(line).append("\n");
+        }
+        return load(result).as(DockerComposeFile.class);
+    }
+
+    public List<String> getServiceExposedPorts(String serviceName) {
+        Map<String, Object> service = services.get(serviceName);
+        List tmp = (List) service.get("expose");
+        if (tmp == null) {
+            return new LinkedList<>();
+        }
+        List<String> ports = new LinkedList<>();
+        for (Object item: tmp) {
+            ports.add(item.toString());
+        }
+        return ports;
+    }
+
+    public boolean isExposedPort(String serviceName, Integer port) {
+        List<String> ports = getServiceExposedPorts(serviceName);
+        return ports.contains(String.valueOf(port));
+    }
+
 }
diff --git a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/utils/Yamls.java b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/utils/Yamls.java
index 9e497c6..054f753 100644
--- a/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/utils/Yamls.java
+++ b/test/e2e/e2e-common/src/main/java/org/apache/skywalking/e2e/utils/Yamls.java
@@ -59,4 +59,13 @@ public final class Yamls {
             }
         };
     }
+
+    public static AsTypeBuilder load(final StringBuilder content) {
+        return new AsTypeBuilder() {
+            @Override
+            public <T> T as(final Class<T> klass) {
+                return new Yaml().loadAs(content.toString(), klass);
+            }
+        };
+    }
 }
diff --git a/test/e2e/e2e-common/src/test/java/org/apache/skywalking/e2e/docker/DockerComposeFileTest.java b/test/e2e/e2e-common/src/test/java/org/apache/skywalking/e2e/docker/DockerComposeFileTest.java
new file mode 100644
index 0000000..120c27f
--- /dev/null
+++ b/test/e2e/e2e-common/src/test/java/org/apache/skywalking/e2e/docker/DockerComposeFileTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.skywalking.e2e.docker;
+
+import org.apache.skywalking.e2e.utils.Yamls;
+import org.junit.Assert;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.List;
+
+class DockerComposeFileTest {
+    private static DockerComposeFile COMPOSE_FILE = null;
+
+    @BeforeAll
+    static void setUp() throws Exception {
+        COMPOSE_FILE = Yamls.load("docker-compose.yml").as(DockerComposeFile.class);
+    }
+
+    @Test
+    void getAllConfigInfo() throws IOException, InterruptedException, URISyntaxException {
+        File file = new File(DockerComposeFileTest.class
+                .getClassLoader()
+                .getResource("docker-compose.yml")
+                .toURI());
+        DockerComposeFile testFile = DockerComposeFile.getAllConfigInfo(file.getAbsolutePath());
+        Assert.assertNotNull(testFile);
+        Assert.assertNotNull(testFile.getServices());
+        Assert.assertEquals(COMPOSE_FILE.getServices().size(), testFile.getServices().size());
+        Assert.assertEquals(COMPOSE_FILE.getVersion(), testFile.getVersion());
+    }
+
+    @Test
+    void getServiceExposedPort() {
+        List<String> ports = COMPOSE_FILE.getServiceExposedPorts("oap");
+        Assert.assertNotNull(ports);
+        Assert.assertEquals(3, ports.size());
+    }
+
+    @Test
+    void isExposedPort() {
+        boolean result = COMPOSE_FILE.isExposedPort("oap", 5005);
+        Assert.assertTrue(result);
+        result = COMPOSE_FILE.isExposedPort("oap", 5006);
+        Assert.assertFalse(result);
+    }
+}
\ No newline at end of file
diff --git a/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml b/test/e2e/e2e-common/src/test/resources/docker-compose.yml
similarity index 56%
copy from test/e2e/e2e-test/docker/simple/auth/docker-compose.yml
copy to test/e2e/e2e-common/src/test/resources/docker-compose.yml
index c816f30..e23afb6 100644
--- a/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml
+++ b/test/e2e/e2e-common/src/test/resources/docker-compose.yml
@@ -13,37 +13,32 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+
 version: '2.1'
 
 services:
   oap:
-    extends:
-      file: ../../base-compose.yml
-      service: oap
-    environment:
-      SW_AUTHENTICATION: test-token
-      SW_PROMETHEUS_FETCHER_ACTIVE: "true"
-      SW_TELEMETRY: prometheus
-
-  ui:
-    extends:
-      file: ../../base-compose.yml
-      service: ui
-    depends_on:
-      oap:
-        condition: service_healthy
-
-  provider:
-    extends:
-      file: ../../base-compose.yml
-      service: provider
+    image: skywalking/oap:latest
+    expose:
+      - 11800
+      - 12800
+      - 5005
+    networks:
+      - e2e
+    restart: on-failure
     environment:
+      SW_CLUSTER_ZK_HOST_PORT: zk:2181
+      SW_STORAGE_ES_CLUSTER_NODES: es:9200
+      SW_JDBC_URL: jdbc:mysql://mysql:3306/swtest
+      SW_STORAGE_INFLUXDB_URL: http://influxdb:8086
       JAVA_OPTS: >-
-        -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/provider,destfile=/jacoco/provider.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
-        -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE,agent.authentication=test-token
-    depends_on:
-      oap:
-        condition: service_healthy
+        -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap,destfile=/jacoco/oap.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
+    healthcheck:
+      test: ["CMD", "sh", "-c", "nc -zn 127.0.0.1 11800"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
 
 networks:
-  e2e:
+  e2e: {}
\ No newline at end of file
diff --git a/test/e2e/e2e-test/docker/base-compose.yml b/test/e2e/e2e-test/docker/base-compose.yml
index 78b20d0..81bc816 100644
--- a/test/e2e/e2e-test/docker/base-compose.yml
+++ b/test/e2e/e2e-test/docker/base-compose.yml
@@ -21,6 +21,7 @@ services:
     expose:
       - 11800
       - 12800
+      - 5005
     networks:
       - e2e
     restart: on-failure
@@ -34,6 +35,7 @@ services:
       SW_STORAGE_INFLUXDB_URL: http://influxdb:8086
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap,destfile=/jacoco/oap.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     healthcheck:
       test: ["CMD", "sh", "-c", "nc -zn 127.0.0.1 11800"]
       interval: 5s
@@ -45,6 +47,7 @@ services:
     expose:
       - 11800
       - 12800
+      - 5005
     networks:
       - e2e
     restart: on-failure
@@ -58,6 +61,7 @@ services:
       SW_STORAGE_INFLUXDB_URL: http://influxdb:8086
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap,destfile=/jacoco/oap.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     healthcheck:
       test: ["CMD", "sh", "-c", "nc -zn 127.0.0.1 11800"]
       interval: 5s
@@ -83,6 +87,7 @@ services:
       - e2e
     expose:
       - 9090
+      - 5005
     volumes:
       - ../../../jacoco:/jacoco
     environment:
@@ -90,6 +95,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/provider,destfile=/jacoco/provider.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     healthcheck:
       test: ["CMD", "sh", "-c", "nc -nz 127.0.0.1 9090"]
       interval: 5s
@@ -106,6 +112,7 @@ services:
       - e2e
     expose:
       - 9092
+      - 5005
     volumes:
       - ../../../jacoco:/jacoco
     environment:
@@ -113,6 +120,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/consumer,destfile=/jacoco/consumer.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     healthcheck:
       test: ["CMD", "sh", "-c", "nc -nz 127.0.0.1 9092"]
       interval: 5s
diff --git a/test/e2e/e2e-test/docker/cluster/docker-compose.yml b/test/e2e/e2e-test/docker/cluster/docker-compose.yml
index 6dad83c..2f3d491 100644
--- a/test/e2e/e2e-test/docker/cluster/docker-compose.yml
+++ b/test/e2e/e2e-test/docker/cluster/docker-compose.yml
@@ -38,6 +38,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/provider1,destfile=/jacoco/provider1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE,agent.instance_name=provider1
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       oap1:
         condition: service_healthy
@@ -52,6 +53,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/provider2,destfile=/jacoco/provider2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE,agent.instance_name=provider2
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       oap2:
         condition: service_healthy
@@ -67,6 +69,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/consumer,destfile=/jacoco/consumer.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE,agent.instance_name=consumer
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       oap1:
         condition: service_healthy
diff --git a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es6.yml b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es6.yml
index 981e309..636e65e 100644
--- a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es6.yml
+++ b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es6.yml
@@ -40,6 +40,7 @@ services:
       SW_STORAGE: elasticsearch
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap1,destfile=/jacoco/oap1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
@@ -55,6 +56,7 @@ services:
       SW_STORAGE: elasticsearch
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap2,destfile=/jacoco/oap2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
diff --git a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es7.yml b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es7.yml
index 6138fee..740dd8b 100644
--- a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es7.yml
+++ b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.es7.yml
@@ -40,6 +40,7 @@ services:
       SW_STORAGE: elasticsearch7
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap1,destfile=/jacoco/oap1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
@@ -55,6 +56,7 @@ services:
       SW_STORAGE: elasticsearch7
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap2,destfile=/jacoco/oap2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
diff --git a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.influxdb.yml b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.influxdb.yml
index f455321..fa3bf91 100644
--- a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.influxdb.yml
+++ b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.influxdb.yml
@@ -37,6 +37,7 @@ services:
       SW_STORAGE: influxdb
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap1,destfile=/jacoco/oap1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
@@ -52,6 +53,7 @@ services:
       SW_STORAGE: influxdb
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap2,destfile=/jacoco/oap2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       zk:
         condition: service_healthy
diff --git a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.mysql.yml b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.mysql.yml
index 51ac958..5d3e9c1 100644
--- a/test/e2e/e2e-test/docker/cluster/docker-compose.zk.mysql.yml
+++ b/test/e2e/e2e-test/docker/cluster/docker-compose.zk.mysql.yml
@@ -41,6 +41,7 @@ services:
       SW_STORAGE: mysql
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap1,destfile=/jacoco/oap1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     entrypoint: ['sh', '-c', '/download-mysql.sh && /skywalking/docker-entrypoint.sh']
     depends_on:
       zk:
@@ -57,6 +58,7 @@ services:
       SW_STORAGE: mysql
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap2,destfile=/jacoco/oap2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     entrypoint: ['sh', '-c', '/download-mysql.sh && /skywalking/docker-entrypoint.sh']
     depends_on:
       zk:
diff --git a/test/e2e/e2e-test/docker/gateway/docker-compose.yml b/test/e2e/e2e-test/docker/gateway/docker-compose.yml
index 2af8361..03b37cd 100644
--- a/test/e2e/e2e-test/docker/gateway/docker-compose.yml
+++ b/test/e2e/e2e-test/docker/gateway/docker-compose.yml
@@ -52,6 +52,7 @@ services:
       SW_STORAGE: elasticsearch
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap1,destfile=/jacoco/oap1.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     volumes:
       - ./gateways.yml:/skywalking/config/gateways.yml
     depends_on:
@@ -69,6 +70,7 @@ services:
       SW_STORAGE: elasticsearch
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/oap2,destfile=/jacoco/oap2.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.oap.query.*:org.apache.skywalking.oap.server.core.query.*
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     volumes:
       - ./gateways.yml:/skywalking/config/gateways.yml
     depends_on:
diff --git a/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml b/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml
index c816f30..1811b6d 100644
--- a/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml
+++ b/test/e2e/e2e-test/docker/simple/auth/docker-compose.yml
@@ -41,6 +41,7 @@ services:
       JAVA_OPTS: >-
         -javaagent:/jacoco/jacocoagent.jar=classdumpdir=/jacoco/classes/provider,destfile=/jacoco/provider.exec,includes=org.apache.skywalking.*,excludes=org.apache.skywalking.apm.dependencies.*
         -javaagent:/skywalking/agent/skywalking-agent.jar=logging.output=CONSOLE,agent.authentication=test-token
+        -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
     depends_on:
       oap:
         condition: service_healthy