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 8e4c1e9  Merge e2e profile test project (#4268)
8e4c1e9 is described below

commit 8e4c1e95d64f5fafda45629fa294270864f3ff1b
Author: mrproliu <741550...@qq.com>
AuthorDate: Mon Jan 20 19:34:53 2020 +0800

    Merge e2e profile test project (#4268)
    
    * merge e2e profile test project, Use `env` to distinguish different 
storage types
    
    * remove maven child module
    
    * change `env` -> `storage`
    
    Co-authored-by: kezhenxu94 <kezhenx...@163.com>
---
 .github/workflows/e2e.yaml                         |   8 +-
 .../e2e-profile/e2e-profile-es-test-runner/pom.xml | 185 ---------------
 .../src/docker/clusterize.awk                      |  96 --------
 .../src/docker/rc.d/rc1-startup.sh                 |  48 ----
 .../skywalking/e2e/ProfileVerificationITCase.java  | 248 --------------------
 .../e2e-profile/e2e-profile-h2-test-runner/pom.xml | 133 -----------
 .../skywalking/e2e/ProfileVerificationITCase.java  | 247 --------------------
 .../e2e-profile-mysql-test-runner/pom.xml          | 159 -------------
 .../src/docker/application.yml                     | 207 -----------------
 .../src/docker/rc.d/rc0-prepare.sh                 |  27 ---
 .../src/docker/rc.d/rc1-startup.sh                 |  40 ----
 .../e2e-profile/e2e-profile-test-runner/pom.xml    | 249 +++++++++++++++++++++
 .../src/docker/adapt_storage.awk                   |  64 ++++++
 .../src/docker/rc.d/rc0-prepare.sh                 |  26 ++-
 .../src/docker/rc.d/rc1-startup.sh                 |   0
 .../skywalking/e2e/ProfileVerificationITCase.java  |   0
 test/e2e/e2e-profile/pom.xml                       |   3 -
 test/e2e/run.sh                                    |   4 +
 18 files changed, 337 insertions(+), 1407 deletions(-)

diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml
index 2a35a9e..3a7edc4 100644
--- a/.github/workflows/e2e.yaml
+++ b/.github/workflows/e2e.yaml
@@ -111,10 +111,10 @@ jobs:
           ./mvnw -Dcheckstyle.skip -Drat.skip -T2 -Dmaven.compile.fork 
-Dmaven.compiler.maxmem=3072 -DskipTests clean install
           ./mvnw -f test/e2e/pom.xml -pl e2e-base clean install
       - name: Profile Tests H2(JDK8)
-        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-h2-test-runner
+        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-test-runner --storage=h2
       - name: Profile Tests MySQL(JDK8)
-        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-mysql-test-runner
+        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-test-runner --storage=mysql
       - name: Profile Tests ES6(JDK8)
-        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-es-test-runner
+        run: export E2E_VERSION=jdk8-1.3 && bash -x test/e2e/run.sh 
e2e-profile/e2e-profile-test-runner --storage=elasticsearch
       - name: Profile Tests ES7(JDK8)
-        run: export E2E_VERSION=jdk8-1.3 
DIST_PACKAGE=apache-skywalking-apm-bin-es7.tar.gz ES_VERSION=7.4.2 && bash -x 
test/e2e/run.sh e2e-profile/e2e-profile-es-test-runner
+        run: export E2E_VERSION=jdk8-1.3 
DIST_PACKAGE=apache-skywalking-apm-bin-es7.tar.gz ES_VERSION=7.4.2 && bash -x 
test/e2e/run.sh e2e-profile/e2e-profile-test-runner --storage=elasticsearch
diff --git a/test/e2e/e2e-profile/e2e-profile-es-test-runner/pom.xml 
b/test/e2e/e2e-profile/e2e-profile-es-test-runner/pom.xml
deleted file mode 100644
index eacc182..0000000
--- a/test/e2e/e2e-profile/e2e-profile-es-test-runner/pom.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <parent>
-        <artifactId>e2e-profile</artifactId>
-        <groupId>org.apache.skywalking</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>e2e-profile-es-test-runner</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-test-runner</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <provider.name>e2e-profile-service</provider.name>
-        <e2e.container.version>1.1</e2e.container.version>
-        
<e2e.container.name.prefix>skywalking-e2e-container-${build.id}-es-profile</e2e.container.name.prefix>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>io.fabric8</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <configuration>
-                    <containerNamePattern>%a-%t-%i</containerNamePattern>
-                    <imagePullPolicy>Always</imagePullPolicy>
-                    <images>
-                        <image>
-                            
<name>elastic/elasticsearch:${elasticsearch.version}</name>
-                            
<alias>${e2e.container.name.prefix}-elasticsearch</alias>
-                            <run>
-                                <ports>
-                                    <port>es.port:9200</port>
-                                </ports>
-                                <wait>
-                                    <http>
-                                        <url>http://localhost:${es.port}</url>
-                                        <method>GET</method>
-                                        <status>200</status>
-                                    </http>
-                                    <time>120000</time>
-                                </wait>
-                                <env>
-                                    
<discovery.type>single-node</discovery.type>
-                                </env>
-                            </run>
-                        </image>
-                        <image>
-                            <name>zookeeper:${zookeeper.image.version}</name>
-                            
<alias>${e2e.container.name.prefix}-zookeeper</alias>
-                            <run>
-                                <ports>
-                                    <port>zk.port:2181</port>
-                                </ports>
-                                <wait>
-                                    <log>binding to port</log>
-                                    <time>120000</time>
-                                </wait>
-                            </run>
-                        </image>
-                        <image>
-                            
<name>skyapm/e2e-container:${e2e.container.version}</name>
-                            <alias>${e2e.container.name.prefix}</alias>
-                            <run>
-                                <env>
-                                    <MODE>cluster</MODE>
-                                    
<ES_VERSION>${elasticsearch.version}</ES_VERSION>
-                                    <SW_STORAGE_ES_CLUSTER_NODES>
-                                        
${e2e.container.name.prefix}-elasticsearch:9200
-                                    </SW_STORAGE_ES_CLUSTER_NODES>
-                                    <SW_CLUSTER_ZK_HOST_PORT>
-                                        
${e2e.container.name.prefix}-zookeeper:2181
-                                    </SW_CLUSTER_ZK_HOST_PORT>
-
-                                    <INSTRUMENTED_SERVICE_1>
-                                        ${provider.name}-${project.version}.jar
-                                    </INSTRUMENTED_SERVICE_1>
-                                    <INSTRUMENTED_SERVICE_1_OPTS>
-                                        
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-                                        -DSW_AGENT_PROFILE_ACTIVE=true
-                                        -DSW_AGENT_NAME=${provider.name}
-                                        -Dserver.port=9090
-                                    </INSTRUMENTED_SERVICE_1_OPTS>
-                                </env>
-                                <dependsOn>
-                                    
<container>${e2e.container.name.prefix}-elasticsearch</container>
-                                    
<container>${e2e.container.name.prefix}-zookeeper</container>
-                                </dependsOn>
-                                <ports>
-                                    <port>+webapp.host:webapp.port:8081</port>
-                                    
<port>+service.host:service.port:9090</port>
-                                </ports>
-                                <links>
-                                    
<link>${e2e.container.name.prefix}-elasticsearch</link>
-                                    
<link>${e2e.container.name.prefix}-zookeeper</link>
-                                </links>
-                                <volumes>
-                                    <bind>
-                                        <volume>${sw.home}:/sw</volume>
-                                        <volume>
-                                            
../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar
-                                        </volume>
-                                        <volume>
-                                            
${project.basedir}/src/docker/rc.d:/rc.d:ro
-                                        </volume>
-                                        <volume>
-                                            
${project.basedir}/src/docker/clusterize.awk:/clusterize.awk
-                                        </volume>
-                                    </bind>
-                                </volumes>
-                                <wait>
-                                    <log>SkyWalking e2e container is ready for 
tests</log>
-                                    <time>3000000</time>
-                                </wait>
-                            </run>
-                        </image>
-                    </images>
-                </configuration>
-            </plugin>
-
-            <!-- set the system properties that can be used in test codes -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <sw.webapp.host>${webapp.host}</sw.webapp.host>
-                        <sw.webapp.port>${webapp.port}</sw.webapp.port>
-                        <service.host>${service.host}</service.host>
-                        <service.port>${service.port}</service.port>
-                        <provider.name>${provider.name}</provider.name>
-                        <consumer.name>${consumer.name}</consumer.name>
-                    </systemPropertyVariables>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/clusterize.awk 
b/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/clusterize.awk
deleted file mode 100644
index 830ede7..0000000
--- a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/clusterize.awk
+++ /dev/null
@@ -1,96 +0,0 @@
-# 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.
-
-#!/usr/bin/awk -f
-
-BEGIN {
-    in_cluster_section=0;
-    in_cluster_zk_section=0;
-
-    in_storage_section=0;
-    in_storage_es_section=0;
-    in_storage_h2_section=0;
-}
-
-{
-    if (in_cluster_section == 0) {
-        in_cluster_section=$0 ~ /^cluster:$/
-    } else {
-        in_cluster_section=$0 ~ /^(#|\s{2})/
-    }
-    if (in_storage_section == 0) {
-        in_storage_section=$0 ~ /^storage:$/
-    } else {
-        in_storage_section=$0 ~ /^(#|\s{2})/
-    }
-
-    if (in_cluster_section == 1) {
-        # in the cluster: section now
-        # disable standalone module
-        if ($0 ~ /^  standalone:$/) {
-            print "#" $0
-        } else {
-            if (in_cluster_zk_section == 0) {
-                in_cluster_zk_section=$0 ~ /^#?\s+zookeeper:$/
-            } else {
-                in_cluster_zk_section=$0 ~ /^(#\s{4}|\s{2})/
-            }
-            if (in_cluster_zk_section == 1) {
-                # in the cluster.zookeeper section now
-                # uncomment zk config
-                gsub("^#", "", $0)
-                print
-            } else {
-                print
-            }
-        }
-    } else if (in_storage_section == 1) {
-        # in the storage: section now
-        # disable h2 module
-        if (in_storage_es_section == 0) {
-            if (ENVIRON["ES_VERSION"] ~ /^6.+/) {
-                in_storage_es_section=$0 ~ /^#?\s+elasticsearch:$/
-            } else if (ENVIRON["ES_VERSION"] ~ /^7.+/) {
-                in_storage_es_section=$0 ~ /^#?\s+elasticsearch7:$/
-            }
-        } else {
-            in_storage_es_section=$0 ~ /^#?\s{4}/
-        }
-        if (in_storage_h2_section == 0) {
-            in_storage_h2_section=$0 ~ /^#?\s+h2:$/
-        } else {
-            in_storage_h2_section=$0 ~ /^#?\s{4}/
-        }
-        if (in_storage_es_section == 1) {
-            # in the storage.elasticsearch section now
-            # uncomment es config
-            gsub("^#", "", $0)
-            print
-        } else if (in_storage_h2_section == 1) {
-            # comment out h2 config
-            if ($0 !~ /^#/) {
-                print "#" $0
-            } else {
-                print
-            }
-        } else {
-            print
-        }
-    } else {
-        print
-    }
-}
-
diff --git 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc1-startup.sh
 
b/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc1-startup.sh
deleted file mode 100755
index b423561..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc1-startup.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the SkyAPM 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.
-
-echo 'starting OAP server...' \
-    && SW_STORAGE_ES_BULK_ACTIONS=1 \
-    SW_STORAGE_ES_FLUSH_INTERVAL=1 \
-    SW_RECEIVER_BUFFER_PATH=/tmp/oap/trace_buffer1 \
-    SW_SERVICE_MESH_BUFFER_PATH=/tmp/oap/mesh_buffer1 \
-    start_oap 'init'
-
-echo 'starting Web app...' \
-    && start_webapp '0.0.0.0' 8081
-
-echo 'starting instrumented services...' && start_instrumented_services
-
-check_tcp 127.0.0.1 \
-          9090 \
-          60 \
-          10 \
-          "waiting for the instrumented service 0 to be ready"
-
-if [[ $? -ne 0 ]]; then
-    echo "instrumented service 0 failed to start in 30 * 10 seconds: "
-    cat ${SERVICE_LOG}/*
-    exit 1
-fi
-
-echo "SkyWalking e2e container is ready for tests"
-
-tail -f ${OAP_LOG_DIR}/* \
-        ${WEBAPP_LOG_DIR}/* \
-        ${SERVICE_LOG}/* \
-        ${ES_HOME}/logs/elasticsearch.log \
-        ${ES_HOME}/logs/stdout.log
\ No newline at end of file
diff --git 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
 
b/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
deleted file mode 100644
index b998f4c..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * 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;
-
-import org.apache.skywalking.e2e.profile.ProfileClient;
-import org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationRequest;
-import org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationResult;
-import 
org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationResultMatcher;
-import org.apache.skywalking.e2e.profile.query.ProfileTaskQuery;
-import org.apache.skywalking.e2e.profile.query.ProfileTasks;
-import org.apache.skywalking.e2e.profile.query.ProfilesTasksMatcher;
-import org.apache.skywalking.e2e.service.Service;
-import org.apache.skywalking.e2e.service.ServicesMatcher;
-import org.apache.skywalking.e2e.service.ServicesQuery;
-import org.apache.skywalking.e2e.service.endpoint.EndpointQuery;
-import org.apache.skywalking.e2e.service.endpoint.Endpoints;
-import org.apache.skywalking.e2e.service.endpoint.EndpointsMatcher;
-import org.apache.skywalking.e2e.service.instance.Instances;
-import org.apache.skywalking.e2e.service.instance.InstancesMatcher;
-import org.apache.skywalking.e2e.service.instance.InstancesQuery;
-import org.apache.skywalking.e2e.trace.Trace;
-import org.apache.skywalking.e2e.trace.TracesQuery;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.web.client.RestTemplate;
-import org.yaml.snakeyaml.Yaml;
-
-import java.io.InputStream;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author Mrpro
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-public class ProfileVerificationITCase {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ProfileVerificationITCase.class);
-
-    private final RestTemplate restTemplate = new RestTemplate();
-    private final int retryInterval = 10;
-
-    private ProfileClient profileClient;
-    private String instrumentedServiceUrl;
-
-    @Before
-    public void setUp() {
-        final String swWebappHost = System.getProperty("sw.webapp.host", 
"127.0.0.1");
-        //        final String swWebappPort = 
System.getProperty("sw.webapp.port", "32783");
-        final String swWebappPort = System.getProperty("sw.webapp.port", 
"12800");
-        final String instrumentedServiceHost = 
System.getProperty("service.host", "127.0.0.1");
-        final String instrumentedServicePort = 
System.getProperty("service.port", "32782");
-        //        final String instrumentedServicePort = 
System.getProperty("service.port", "9090");
-        profileClient = new ProfileClient(swWebappHost, swWebappPort);
-        instrumentedServiceUrl = "http://"; + instrumentedServiceHost + ":" + 
instrumentedServicePort;
-    }
-
-    @Test(timeout = 1200000)
-    @DirtiesContext
-    public void verify() throws Exception {
-        final LocalDateTime minutesAgo = LocalDateTime.now(ZoneOffset.UTC);
-
-        while (true) {
-            try {
-                final ResponseEntity<String> responseEntity = 
sendRequest(false);
-                LOGGER.info("responseEntity: {}", responseEntity);
-                
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
-                final List<Trace> traces = profileClient.traces(
-                        new TracesQuery()
-                                .start(minutesAgo)
-                                .end(LocalDateTime.now())
-                                .orderByDuration()
-                );
-                if (!traces.isEmpty()) {
-                    break;
-                }
-                Thread.sleep(10000L);
-            } catch (Exception ignored) {
-                LOGGER.error(ignored.getMessage(), ignored);
-            }
-        }
-
-        // verify basic info
-        verifyServices(minutesAgo);
-
-        // create profile task
-        verifyCreateProfileTask(minutesAgo);
-
-    }
-
-    private ResponseEntity<String> sendRequest(boolean needProfiling) {
-        final Map<String, String> user = new HashMap<>();
-        user.put("name", "SkyWalking");
-        user.put("enableProfiling", String.valueOf(needProfiling));
-        return restTemplate.postForEntity(
-                instrumentedServiceUrl + "/e2e/users",
-                user,
-                String.class
-        );
-    }
-
-    /**
-     * verify create profile task
-     * @param minutesAgo
-     * @throws Exception
-     */
-    private void verifyCreateProfileTask(LocalDateTime minutesAgo) throws 
Exception {
-        final LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
-
-        final ProfileTaskCreationRequest creationRequest = 
ProfileTaskCreationRequest.builder()
-                .serviceId(2)
-                .endpointName("/e2e/users")
-                .duration(1)
-                .startTime(-1)
-                .minDurationThreshold(1000)
-                .dumpPeriod(50)
-                .maxSamplingCount(5).build();
-
-        // verify create task
-        final ProfileTaskCreationResult creationResult = 
profileClient.createProfileTask(creationRequest);
-        LOGGER.info("create profile task result: {}", creationResult);
-
-        ProfileTaskCreationResultMatcher creationResultMatcher = new 
ProfileTaskCreationResultMatcher();
-        creationResultMatcher.verify(creationResult);
-
-        // verify get task list and sniffer get task logs
-        verifyProfileTask(creationRequest.getServiceId(), 
"expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.profileTasks.notified.yml");
-
-        // send a profile request
-        sendRequest(true);
-
-        // verify task execution finish
-        verifyProfileTask(creationRequest.getServiceId(), 
"expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.profileTasks.finished.yml");
-    }
-
-    private void verifyProfileTask(int serviceId, String verifyResources) 
throws InterruptedException {
-        // verify get task list and logs
-        for (int i = 0; i < 10; i++) {
-            try {
-                final ProfileTasks tasks = profileClient.getProfileTaskList(
-                        new ProfileTaskQuery()
-                                .serviceId(serviceId)
-                                .endpointName("")
-                );
-                LOGGER.info("get profile task list: {}", tasks);
-
-                InputStream expectedInputStream =
-                        new 
ClassPathResource(verifyResources).getInputStream();
-
-                final ProfilesTasksMatcher servicesMatcher = new 
Yaml().loadAs(expectedInputStream, ProfilesTasksMatcher.class);
-                servicesMatcher.verify(tasks);
-                break;
-            } catch (Throwable e) {
-                if (i == 10 - 1) {
-                    throw new IllegalStateException("match profile task list 
fail!", e);
-                }
-                TimeUnit.SECONDS.sleep(retryInterval);
-            }
-        }
-
-    }
-
-    private void verifyServices(LocalDateTime minutesAgo) throws Exception {
-        final LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
-
-        final List<Service> services = profileClient.services(
-                new ServicesQuery()
-                        .start(minutesAgo)
-                        .end(now)
-        );
-        LOGGER.info("services: {}", services);
-
-        InputStream expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.services.yml").getInputStream();
-
-        final ServicesMatcher servicesMatcher = new 
Yaml().loadAs(expectedInputStream, ServicesMatcher.class);
-        servicesMatcher.verify(services);
-
-        for (Service service : services) {
-            LOGGER.info("verifying service instances: {}", service);
-
-            verifyServiceInstances(minutesAgo, now, service);
-
-            verifyServiceEndpoints(minutesAgo, now, service);
-
-        }
-    }
-
-    private Instances verifyServiceInstances(LocalDateTime minutesAgo, 
LocalDateTime now,
-                                             Service service) throws Exception 
{
-        InputStream expectedInputStream;
-        Instances instances = profileClient.instances(
-                new InstancesQuery()
-                        .serviceId(service.getKey())
-                        .start(minutesAgo)
-                        .end(now)
-        );
-        LOGGER.info("instances: {}", instances);
-        expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.instances.yml").getInputStream();
-        final InstancesMatcher instancesMatcher = new 
Yaml().loadAs(expectedInputStream, InstancesMatcher.class);
-        instancesMatcher.verify(instances);
-        return instances;
-    }
-
-    private Endpoints verifyServiceEndpoints(LocalDateTime minutesAgo, 
LocalDateTime now,
-                                             Service service) throws Exception 
{
-        Endpoints instances = profileClient.endpoints(
-                new EndpointQuery().serviceId(service.getKey())
-        );
-        LOGGER.info("instances: {}", instances);
-        InputStream expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.endpoints.yml").getInputStream();
-        final EndpointsMatcher endpointsMatcher = new 
Yaml().loadAs(expectedInputStream, EndpointsMatcher.class);
-        endpointsMatcher.verify(instances);
-        return instances;
-    }
-
-}
diff --git a/test/e2e/e2e-profile/e2e-profile-h2-test-runner/pom.xml 
b/test/e2e/e2e-profile/e2e-profile-h2-test-runner/pom.xml
deleted file mode 100644
index eb8a3d5..0000000
--- a/test/e2e/e2e-profile/e2e-profile-h2-test-runner/pom.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <parent>
-        <artifactId>e2e-profile</artifactId>
-        <groupId>org.apache.skywalking</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>e2e-profile-h2-test-runner</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-test-runner</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <properties>
-        <provider.name>e2e-profile-service</provider.name>
-        <e2e.container.version>1.1</e2e.container.version>
-        
<e2e.container.name.prefix>skywalking-e2e-container-${build.id}-h2-profile</e2e.container.name.prefix>
-    </properties>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>io.fabric8</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <configuration>
-                    <containerNamePattern>%a-%t-%i</containerNamePattern>
-                    <imagePullPolicy>Always</imagePullPolicy>
-                    <images>
-                        <image>
-                            
<name>skyapm/e2e-container:${e2e.container.version}</name>
-                            <alias>${e2e.container.name.prefix}</alias>
-                            <run>
-                                <env>
-                                    <MODE>profile</MODE>
-                                    <INSTRUMENTED_SERVICE_1>
-                                        ${provider.name}-${project.version}.jar
-                                    </INSTRUMENTED_SERVICE_1>
-                                    <INSTRUMENTED_SERVICE_1_OPTS>
-                                        
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-                                        -DSW_AGENT_PROFILE_ACTIVE=true
-                                        -DSW_AGENT_NAME=${provider.name}
-                                        -Dserver.port=9090
-                                    </INSTRUMENTED_SERVICE_1_OPTS>
-                                </env>
-                                <ports>
-                                    <port>+webapp.host:webapp.port:8081</port>
-                                    
<port>+service.host:service.port:9090</port>
-                                </ports>
-                                <volumes>
-                                    <bind>
-                                        <volume>${sw.home}:/sw</volume>
-                                        <volume>
-                                            
../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar
-                                        </volume>
-                                        <volume>
-                                            
${project.basedir}/src/docker/rc.d:/rc.d:ro
-                                        </volume>
-                                    </bind>
-                                </volumes>
-                                <wait>
-                                    <log>SkyWalking e2e container is ready for 
tests</log>
-                                    <time>3000000</time>
-                                </wait>
-                            </run>
-                        </image>
-                    </images>
-                </configuration>
-            </plugin>
-
-            <!-- set the system properties that can be used in test codes -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <sw.webapp.host>${webapp.host}</sw.webapp.host>
-                        <sw.webapp.port>${webapp.port}</sw.webapp.port>
-                        <service.host>${service.host}</service.host>
-                        <service.port>${service.port}</service.port>
-                        <provider.name>${provider.name}</provider.name>
-                    </systemPropertyVariables>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-
-</project>
\ No newline at end of file
diff --git 
a/test/e2e/e2e-profile/e2e-profile-h2-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
 
b/test/e2e/e2e-profile/e2e-profile-h2-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
deleted file mode 100644
index 2289ae8..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-h2-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * 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;
-
-import org.apache.skywalking.e2e.profile.ProfileClient;
-import org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationRequest;
-import org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationResult;
-import 
org.apache.skywalking.e2e.profile.creation.ProfileTaskCreationResultMatcher;
-import org.apache.skywalking.e2e.profile.query.ProfileTaskQuery;
-import org.apache.skywalking.e2e.profile.query.ProfileTasks;
-import org.apache.skywalking.e2e.profile.query.ProfilesTasksMatcher;
-import org.apache.skywalking.e2e.service.Service;
-import org.apache.skywalking.e2e.service.ServicesMatcher;
-import org.apache.skywalking.e2e.service.ServicesQuery;
-import org.apache.skywalking.e2e.service.endpoint.EndpointQuery;
-import org.apache.skywalking.e2e.service.endpoint.Endpoints;
-import org.apache.skywalking.e2e.service.endpoint.EndpointsMatcher;
-import org.apache.skywalking.e2e.service.instance.Instances;
-import org.apache.skywalking.e2e.service.instance.InstancesMatcher;
-import org.apache.skywalking.e2e.service.instance.InstancesQuery;
-import org.apache.skywalking.e2e.trace.Trace;
-import org.apache.skywalking.e2e.trace.TracesQuery;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.web.client.RestTemplate;
-import org.yaml.snakeyaml.Yaml;
-
-import java.io.InputStream;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * @author Mrpro
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-public class ProfileVerificationITCase {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ProfileVerificationITCase.class);
-
-    private final RestTemplate restTemplate = new RestTemplate();
-    private final int retryInterval = 10;
-
-    private ProfileClient profileClient;
-    private String instrumentedServiceUrl;
-
-    @Before
-    public void setUp() {
-        final String swWebappHost = System.getProperty("sw.webapp.host", 
"127.0.0.1");
-        //        final String swWebappPort = 
System.getProperty("sw.webapp.port", "32783");
-        final String swWebappPort = System.getProperty("sw.webapp.port", 
"12800");
-        final String instrumentedServiceHost = 
System.getProperty("service.host", "127.0.0.1");
-        final String instrumentedServicePort = 
System.getProperty("service.port", "32782");
-        //        final String instrumentedServicePort = 
System.getProperty("service.port", "9090");
-        profileClient = new ProfileClient(swWebappHost, swWebappPort);
-        instrumentedServiceUrl = "http://"; + instrumentedServiceHost + ":" + 
instrumentedServicePort;
-    }
-
-    @Test(timeout = 1200000)
-    @DirtiesContext
-    public void verify() throws Exception {
-        final LocalDateTime minutesAgo = LocalDateTime.now(ZoneOffset.UTC);
-
-        while (true) {
-            try {
-                final ResponseEntity<String> responseEntity = 
sendRequest(false);
-                LOGGER.info("responseEntity: {}", responseEntity);
-                
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
-                final List<Trace> traces = profileClient.traces(
-                        new TracesQuery()
-                                .start(minutesAgo)
-                                .end(LocalDateTime.now())
-                                .orderByDuration()
-                );
-                if (!traces.isEmpty()) {
-                    break;
-                }
-                Thread.sleep(10000L);
-            } catch (Exception ignored) {
-            }
-        }
-
-        // verify basic info
-        verifyServices(minutesAgo);
-
-        // create profile task
-        verifyCreateProfileTask(minutesAgo);
-
-    }
-
-    private ResponseEntity<String> sendRequest(boolean needProfiling) {
-        final Map<String, String> user = new HashMap<>();
-        user.put("name", "SkyWalking");
-        user.put("enableProfiling", String.valueOf(needProfiling));
-        return restTemplate.postForEntity(
-                instrumentedServiceUrl + "/e2e/users",
-                user,
-                String.class
-        );
-    }
-
-    /**
-     * verify create profile task
-     * @param minutesAgo
-     * @throws Exception
-     */
-    private void verifyCreateProfileTask(LocalDateTime minutesAgo) throws 
Exception {
-        final LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
-
-        final ProfileTaskCreationRequest creationRequest = 
ProfileTaskCreationRequest.builder()
-                .serviceId(2)
-                .endpointName("/e2e/users")
-                .duration(1)
-                .startTime(-1)
-                .minDurationThreshold(1000)
-                .dumpPeriod(50)
-                .maxSamplingCount(5).build();
-
-        // verify create task
-        final ProfileTaskCreationResult creationResult = 
profileClient.createProfileTask(creationRequest);
-        LOGGER.info("create profile task result: {}", creationResult);
-
-        ProfileTaskCreationResultMatcher creationResultMatcher = new 
ProfileTaskCreationResultMatcher();
-        creationResultMatcher.verify(creationResult);
-
-        // verify get task list and sniffer get task logs
-        verifyProfileTask(creationRequest.getServiceId(), 
"expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.profileTasks.notified.yml");
-
-        // send a profile request
-        sendRequest(true);
-
-        // verify task execution finish
-        verifyProfileTask(creationRequest.getServiceId(), 
"expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.profileTasks.finished.yml");
-    }
-
-    private void verifyProfileTask(int serviceId, String verifyResources) 
throws InterruptedException {
-        // verify get task list and logs
-        for (int i = 0; i < 10; i++) {
-            try {
-                final ProfileTasks tasks = profileClient.getProfileTaskList(
-                        new ProfileTaskQuery()
-                                .serviceId(serviceId)
-                                .endpointName("")
-                );
-                LOGGER.info("get profile task list: {}", tasks);
-
-                InputStream expectedInputStream =
-                        new 
ClassPathResource(verifyResources).getInputStream();
-
-                final ProfilesTasksMatcher servicesMatcher = new 
Yaml().loadAs(expectedInputStream, ProfilesTasksMatcher.class);
-                servicesMatcher.verify(tasks);
-                break;
-            } catch (Throwable e) {
-                if (i == 10 - 1) {
-                    throw new IllegalStateException("match profile task list 
fail!", e);
-                }
-                TimeUnit.SECONDS.sleep(retryInterval);
-            }
-        }
-
-    }
-
-    private void verifyServices(LocalDateTime minutesAgo) throws Exception {
-        final LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
-
-        final List<Service> services = profileClient.services(
-                new ServicesQuery()
-                        .start(minutesAgo)
-                        .end(now)
-        );
-        LOGGER.info("services: {}", services);
-
-        InputStream expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.services.yml").getInputStream();
-
-        final ServicesMatcher servicesMatcher = new 
Yaml().loadAs(expectedInputStream, ServicesMatcher.class);
-        servicesMatcher.verify(services);
-
-        for (Service service : services) {
-            LOGGER.info("verifying service instances: {}", service);
-
-            verifyServiceInstances(minutesAgo, now, service);
-
-            verifyServiceEndpoints(minutesAgo, now, service);
-
-        }
-    }
-
-    private Instances verifyServiceInstances(LocalDateTime minutesAgo, 
LocalDateTime now,
-                                             Service service) throws Exception 
{
-        InputStream expectedInputStream;
-        Instances instances = profileClient.instances(
-                new InstancesQuery()
-                        .serviceId(service.getKey())
-                        .start(minutesAgo)
-                        .end(now)
-        );
-        LOGGER.info("instances: {}", instances);
-        expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.instances.yml").getInputStream();
-        final InstancesMatcher instancesMatcher = new 
Yaml().loadAs(expectedInputStream, InstancesMatcher.class);
-        instancesMatcher.verify(instances);
-        return instances;
-    }
-
-    private Endpoints verifyServiceEndpoints(LocalDateTime minutesAgo, 
LocalDateTime now,
-                                             Service service) throws Exception 
{
-        Endpoints instances = profileClient.endpoints(
-                new EndpointQuery().serviceId(service.getKey())
-        );
-        LOGGER.info("instances: {}", instances);
-        InputStream expectedInputStream =
-                new 
ClassPathResource("expected-data/org.apache.skywalking.e2e.ProfileVerificationITCase.endpoints.yml").getInputStream();
-        final EndpointsMatcher endpointsMatcher = new 
Yaml().loadAs(expectedInputStream, EndpointsMatcher.class);
-        endpointsMatcher.verify(instances);
-        return instances;
-    }
-
-}
diff --git a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/pom.xml 
b/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/pom.xml
deleted file mode 100644
index b569e4f..0000000
--- a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/pom.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  ~
-  -->
-
-
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <parent>
-        <artifactId>e2e-profile</artifactId>
-        <groupId>org.apache.skywalking</groupId>
-        <version>1.0.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>e2e-profile-mysql-test-runner</artifactId>
-
-    <properties>
-        <provider.name>e2e-profile-service</provider.name>
-        <e2e.container.version>1.1</e2e.container.version>
-        
<e2e.container.name.prefix>skywalking-e2e-container-${build.id}-mysql-profile</e2e.container.name.prefix>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-base</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-service</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>e2e-profile-test-runner</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>io.fabric8</groupId>
-                <artifactId>docker-maven-plugin</artifactId>
-                <configuration>
-                    <containerNamePattern>%a-%t-%i</containerNamePattern>
-                    <images>
-                        <image>
-                            <name>mysql/mysql-server:${mysql.version}</name>
-                            <alias>${e2e.container.name.prefix}-mysql</alias>
-                            <run>
-                                <wait>
-                                    <log>Socket: '/var/run/mysqld/mysqlx.sock' 
bind-address: '::' port: 3306</log>
-                                    <time>120000</time>
-                                </wait>
-                                <env>
-                                    
<MYSQL_ROOT_PASSWORD>root@1234</MYSQL_ROOT_PASSWORD>
-                                    <MYSQL_DATABASE>swtest</MYSQL_DATABASE>
-                                    <MYSQL_ROOT_HOST>%</MYSQL_ROOT_HOST>
-                                </env>
-                                <ports>
-                                    <port>mysql.port:3306</port>
-                                </ports>
-                            </run>
-                        </image>
-                        <image>
-                            
<name>skyapm/e2e-container:${e2e.container.version}</name>
-                            <alias>${e2e.container.name.prefix}</alias>
-                            <run>
-                                <env>
-                                    <MODE>profile</MODE>
-                                    
<SW_JDBC_URL>jdbc:mysql://${e2e.container.name.prefix}-mysql:3306/swtest</SW_JDBC_URL>
-                                    <INSTRUMENTED_SERVICE_1>
-                                        ${provider.name}-${project.version}.jar
-                                    </INSTRUMENTED_SERVICE_1>
-                                    <INSTRUMENTED_SERVICE_1_OPTS>
-                                        
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
-                                        -DSW_AGENT_NAME=${provider.name}
-                                        -DSW_AGENT_PROFILE_ACTIVE=true
-                                        -Dserver.port=9090
-                                    </INSTRUMENTED_SERVICE_1_OPTS>
-                                </env>
-                                <dependsOn>
-                                    
<container>${e2e.container.name.prefix}-mysql</container>
-                                </dependsOn>
-                                <links>
-                                    
<link>${e2e.container.name.prefix}-mysql</link>
-                                </links>
-                                <ports>
-                                    <port>+webapp.host:webapp.port:8081</port>
-                                    
<port>+service.host:service.port:9090</port>
-                                </ports>
-                                <volumes>
-                                    <bind>
-                                        <volume>${sw.home}:/sw</volume>
-                                        
<volume>${project.build.directory}:/home</volume>
-                                        
<volume>${project.basedir}/src/docker/rc.d:/rc.d:ro</volume>
-                                        
<volume>${project.basedir}/src/docker/application.yml:/application.yml</volume>
-                                        <volume>
-                                            
../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar
-                                        </volume>
-                                    </bind>
-                                </volumes>
-                                <wait>
-                                    <log>SkyWalking e2e container is ready for 
tests</log>
-                                    <time>3000000</time>
-                                </wait>
-                            </run>
-                        </image>
-                    </images>
-                </configuration>
-            </plugin>
-
-            <!-- set the system properties that can be used in test codes -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <configuration>
-                    <systemPropertyVariables>
-                        <sw.webapp.host>${webapp.host}</sw.webapp.host>
-                        <sw.webapp.port>${webapp.port}</sw.webapp.port>
-                        <service.host>${service.host}</service.host>
-                        <service.port>${service.port}</service.port>
-                        <provider.name>${provider.name}</provider.name>
-                    </systemPropertyVariables>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-
-
-</project>
\ No newline at end of file
diff --git 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/application.yml 
b/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/application.yml
deleted file mode 100644
index 739246c..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/application.yml
+++ /dev/null
@@ -1,207 +0,0 @@
-# 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.
-
-cluster:
-  standalone:
-#   Please check your ZooKeeper is 3.5+, However, it is also compatible with 
ZooKeeper 3.4.x. Replace the ZooKeeper 3.5+
-#   library the oap-libs folder with your ZooKeeper 3.4.x library.
-#  zookeeper:
-#    nameSpace: ${SW_NAMESPACE:""}
-#    hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
-#    #Retry Policy
-#    baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of 
time to wait between retries
-#    maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
-#    # Enable ACL
-#    enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default
-#    schema: ${SW_ZK_SCHEMA:digest} # only support digest schema
-#    expression: ${SW_ZK_EXPRESSION:skywalking:skywalking}
-#  kubernetes:
-#    watchTimeoutSeconds: ${SW_CLUSTER_K8S_WATCH_TIMEOUT:60}
-#    namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}
-#    labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}
-#    uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}
-#  consul:
-#    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
-#     Consul cluster nodes, example: 10.0.0.1:8500,10.0.0.2:8500,10.0.0.3:8500
-#    hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}
-#  nacos:
-#    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
-#    # Nacos Configuration namespace
-#    namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}
-#    hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}
-#  etcd:
-#    serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
-#     etcd cluster nodes, example: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379
-#    hostPort: ${SW_CLUSTER_ETCD_HOST_PORT:localhost:2379}
-core:
-  default:
-    # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
-    # Receiver: Receive agent data, Level 1 aggregate
-    # Aggregator: Level 2 aggregate
-    role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
-    restHost: ${SW_CORE_REST_HOST:0.0.0.0}
-    restPort: ${SW_CORE_REST_PORT:12800}
-    restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
-    gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
-    gRPCPort: ${SW_CORE_GRPC_PORT:11800}
-    downsampling:
-      - Hour
-      - Day
-      - Month
-    # Set a timeout on metrics data. After the timeout has expired, the 
metrics data will automatically be deleted.
-    enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # 
Turn it off then automatically metrics data delete will be close.
-    dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How 
often the data keeper executor runs periodically, unit is minute
-    recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90} # Unit is minute
-    minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90} # Unit is minute
-    hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36} # Unit is hour
-    dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45} # Unit is day
-    monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18} # Unit is month
-    # Cache metric data for 1 minute to reduce database queries, and if the 
OAP cluster changes within that minute,
-    # the metrics may not be accurate within that minute.
-    enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true}
-storage:
-#  elasticsearch:
-#    nameSpace: ${SW_NAMESPACE:""}
-#    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
-#    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
-#    #trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
-#    #trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
-#    user: ${SW_ES_USER:""}
-#    password: ${SW_ES_PASSWORD:""}
-#    indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
-#    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
-#    # Those data TTL settings will override the same settings in core module.
-#    recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
-#    otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is 
day
-#    monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is 
month
-#    # Batch process setting, refer to 
https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
-#    bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 
1000 requests
-#    flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 
10 seconds whatever the number of requests
-#    concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number 
of concurrent requests
-#    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
-#    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
-#    profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
-#  h2:
-#    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
-#    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
-#    user: ${SW_STORAGE_H2_USER:sa}
-#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
-  mysql:
-    properties:
-      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
-      dataSource.user: ${SW_DATA_SOURCE_USER:root}
-      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}
-      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
-      dataSource.prepStmtCacheSize: 
${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
-      dataSource.prepStmtCacheSqlLimit: 
${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
-      dataSource.useServerPrepStmts: 
${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
-    metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
-receiver-sharing-server:
-  default:
-receiver-register:
-  default:
-receiver-trace:
-  default:
-    bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}  # Path to trace 
buffer files, suggest to use absolute path
-    bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE:100} # 
Unit is MB
-    bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE:500} # Unit 
is MB
-    bufferFileCleanWhenRestart: 
${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
-    sampleRate: ${SW_TRACE_SAMPLE_RATE:10000} # The sample rate precision is 
1/10000. 10000 means 100% sample in default.
-    slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # 
The slow database access thresholds. Unit ms.
-receiver-jvm:
-  default:
-receiver-clr:
-  default:
-#receiver-so11y:
-#  default:
-receiver-profile:
-  default:
-service-mesh:
-  default:
-    bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}  # Path to 
trace buffer files, suggest to use absolute path
-    bufferOffsetMaxFileSize: ${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE:100} # 
Unit is MB
-    bufferDataMaxFileSize: ${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE:500} # 
Unit is MB
-    bufferFileCleanWhenRestart: 
${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
-istio-telemetry:
-  default:
-envoy-metric:
-  default:
-#    alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:k8s-mesh}
-#receiver_zipkin:
-#  default:
-#    host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
-#    port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
-#    contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}
-#receiver_jaeger:
-#  default:
-#    gRPCHost: ${SW_RECEIVER_JAEGER_HOST:0.0.0.0}
-#    gRPCPort: ${SW_RECEIVER_JAEGER_PORT:14250}
-query:
-  graphql:
-    path: ${SW_QUERY_GRAPHQL_PATH:/graphql}
-alarm:
-  default:
-telemetry:
-  none:
-#  prometheus:
-#    host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
-#    port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
-#  so11y:
-#    prometheusExporterEnabled: ${SW_TELEMETRY_SO11Y_PROMETHEUS_ENABLED:true}
-#    prometheusExporterHost: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}
-#    prometheusExporterPort: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}
-configuration:
-  none:
-#  apollo:
-#    apolloMeta: http://106.12.25.204:8080
-#    apolloCluster: default
-#    # apolloEnv: # defaults to null
-#    appId: skywalking
-#    period: 5
-#  nacos:
-#    # Nacos Server Host
-#    serverAddr: 127.0.0.1
-#    # Nacos Server Port
-#    port: 8848
-#    # Nacos Configuration Group
-#    group: 'skywalking'
-#    # Nacos Configuration namespace
-#    namespace: ''
-#    # Unit seconds, sync period. Default fetch every 60 seconds.
-#    period : 5
-#    # the name of current cluster, set the name if you want to upstream 
system known.
-#    clusterName: "default"
-#  zookeeper:
-#    period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
-#    nameSpace: /default
-#    hostPort: localhost:2181
-#    #Retry Policy
-#    baseSleepTimeMs: 1000 # initial amount of time to wait between retries
-#    maxRetries: 3 # max number of times to retry
-#  etcd:
-#    period : 60 # Unit seconds, sync period. Default fetch every 60 seconds.
-#    group :  'skywalking'
-#    serverAddr: localhost:2379
-#    clusterName: "default"
-#  consul:
-#    # Consul host and ports, separated by comma, e.g. 
1.2.3.4:8500,2.3.4.5:8500
-#    hostAndPorts: ${consul.address}
-#    # Sync period in seconds. Defaults to 60 seconds.
-#    period: 1
-
-#exporter:
-#  grpc:
-#    targetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}
-#    targetPort: ${SW_EXPORTER_GRPC_PORT:9870}
diff --git 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc0-prepare.sh
 
b/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc0-prepare.sh
deleted file mode 100755
index 6fcc5b3..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc0-prepare.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the SkyAPM 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.
-
-MYSQL_URL="https://central.maven.org/maven2/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar";
-MYSQL_DRIVER="mysql-connector-java-8.0.13.jar"
-
-echo "MySQL database is storage provider..."   
-# Download MySQL connector.
-curl ${MYSQL_URL} > "${SW_HOME}/oap-libs/${MYSQL_DRIVER}"
-[[ $? -ne 0 ]] && echo "Fail to download ${MYSQL_DRIVER}." && exit 1
-
-# Modify application.yml to set MySQL as storage provider.
-cat /application.yml > "${SW_HOME}/config/application.yml"
diff --git 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc1-startup.sh
 
b/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc1-startup.sh
deleted file mode 100755
index f9382e4..0000000
--- 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/docker/rc.d/rc1-startup.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-# Licensed to the SkyAPM 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.
-
-echo 'starting OAP server...' && start_oap 'init'
-
-echo 'starting Web app...' && start_webapp '0.0.0.0' 8081
-
-echo 'starting instrumented services...' && start_instrumented_services
-
-check_tcp 127.0.0.1 \
-          9090 \
-          60 \
-          10 \
-          "waiting for the instrumented service to be ready"
-
-if [[ $? -ne 0 ]]; then
-    echo "instrumented service 0 failed to start in 30 * 10 seconds: "
-    cat ${SERVICE_LOG}/*
-    exit 1
-fi
-
-echo "SkyWalking e2e container is ready for tests"
-
-tail -f ${OAP_LOG_DIR}/* \
-        ${WEBAPP_LOG_DIR}/* \
-        ${SERVICE_LOG}/*
diff --git a/test/e2e/e2e-profile/e2e-profile-test-runner/pom.xml 
b/test/e2e/e2e-profile/e2e-profile-test-runner/pom.xml
index 3211261..203813a 100644
--- a/test/e2e/e2e-profile/e2e-profile-test-runner/pom.xml
+++ b/test/e2e/e2e-profile/e2e-profile-test-runner/pom.xml
@@ -46,5 +46,254 @@
 
     </dependencies>
 
+    <properties>
+        <provider.name>e2e-profile-service</provider.name>
+        <e2e.container.version>1.1</e2e.container.version>
+        
<e2e.container.name.prefix>skywalking-e2e-container-${build.id}-profile</e2e.container.name.prefix>
+    </properties>
+
+    <profiles>
+        <!--mysql storage -->
+        <profile>
+            <id>mysql</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <configuration>
+                            
<containerNamePattern>%a-%t-%i</containerNamePattern>
+                            <images>
+                                <image>
+                                    
<name>mysql/mysql-server:${mysql.version}</name>
+                                    
<alias>${e2e.container.name.prefix}-datasource</alias>
+                                    <run>
+                                        <wait>
+                                            <log>Socket: 
'/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 3306</log>
+                                            <time>120000</time>
+                                        </wait>
+                                        <env>
+                                            
<MYSQL_ROOT_PASSWORD>root@1234</MYSQL_ROOT_PASSWORD>
+                                            
<MYSQL_DATABASE>swtest</MYSQL_DATABASE>
+                                            
<MYSQL_ROOT_HOST>%</MYSQL_ROOT_HOST>
+                                        </env>
+                                        <ports>
+                                            <port>mysql.port:3306</port>
+                                        </ports>
+                                    </run>
+                                </image>
+                                <image>
+                                    
<name>skyapm/e2e-container:${e2e.container.version}</name>
+                                    
<alias>${e2e.container.name.prefix}-runner</alias>
+                                    <run>
+                                        <env>
+                                            <STORAGE>mysql</STORAGE>
+                                            
<SW_JDBC_URL>jdbc:mysql://${e2e.container.name.prefix}-datasource:3306/swtest</SW_JDBC_URL>
+                                            <INSTRUMENTED_SERVICE_1>
+                                                
${provider.name}-${project.version}.jar
+                                            </INSTRUMENTED_SERVICE_1>
+                                            <INSTRUMENTED_SERVICE_1_OPTS>
+                                                
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
+                                                -DSW_AGENT_PROFILE_ACTIVE=true
+                                                
-DSW_AGENT_NAME=${provider.name}
+                                                -Dserver.port=9090
+                                            </INSTRUMENTED_SERVICE_1_OPTS>
+                                        </env>
+                                        <dependsOn>
+                                            
<container>${e2e.container.name.prefix}-datasource</container>
+                                        </dependsOn>
+                                        <links>
+                                            
<link>${e2e.container.name.prefix}-datasource</link>
+                                        </links>
+                                        <ports>
+                                            
<port>+webapp.host:webapp.port:8081</port>
+                                            
<port>+service.host:service.port:9090</port>
+                                        </ports>
+                                        <volumes>
+                                            <bind>
+                                                <volume>${sw.home}:/sw</volume>
+                                                
<volume>${project.build.directory}:/home</volume>
+                                                
<volume>../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar</volume>
+                                                
<volume>${project.basedir}/src/docker/rc.d:/rc.d:ro</volume>
+                                                
<volume>${project.basedir}/src/docker/clusterize.awk:/clusterize.awk</volume>
+                                            </bind>
+                                        </volumes>
+                                        <wait>
+                                            <log>SkyWalking e2e container is 
ready for tests</log>
+                                            <time>3000000</time>
+                                        </wait>
+                                    </run>
+                                </image>
+                            </images>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <!--h2 storage -->
+        <profile>
+            <id>h2</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <configuration>
+                            
<containerNamePattern>%a-%t-%i</containerNamePattern>
+                            <imagePullPolicy>Always</imagePullPolicy>
+                            <images>
+                                <image>
+                                    
<name>skyapm/e2e-container:${e2e.container.version}</name>
+                                    <alias>${e2e.container.name.prefix}</alias>
+                                    <run>
+                                        <env>
+                                            <STORAGE>h2</STORAGE>
+                                            <INSTRUMENTED_SERVICE_1>
+                                                
${provider.name}-${project.version}.jar
+                                            </INSTRUMENTED_SERVICE_1>
+                                            <INSTRUMENTED_SERVICE_1_OPTS>
+                                                
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
+                                                -DSW_AGENT_PROFILE_ACTIVE=true
+                                                
-DSW_AGENT_NAME=${provider.name}
+                                                -Dserver.port=9090
+                                            </INSTRUMENTED_SERVICE_1_OPTS>
+                                        </env>
+                                        <ports>
+                                            
<port>+webapp.host:webapp.port:8081</port>
+                                            
<port>+service.host:service.port:9090</port>
+                                        </ports>
+                                        <volumes>
+                                            <bind>
+                                                <volume>${sw.home}:/sw</volume>
+                                                
<volume>../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar</volume>
+                                                
<volume>${project.basedir}/src/docker/rc.d:/rc.d:ro</volume>
+                                                
<volume>${project.basedir}/src/docker/clusterize.awk:/clusterize.awk</volume>
+                                            </bind>
+                                        </volumes>
+                                        <wait>
+                                            <log>SkyWalking e2e container is 
ready for tests</log>
+                                            <time>3000000</time>
+                                        </wait>
+                                    </run>
+                                </image>
+                            </images>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <!--elasticsearch storage -->
+        <profile>
+            <id>elasticsearch</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>io.fabric8</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <configuration>
+                            
<containerNamePattern>%a-%t-%i</containerNamePattern>
+                            <imagePullPolicy>Always</imagePullPolicy>
+                            <images>
+                                <image>
+                                    
<name>elastic/elasticsearch:${elasticsearch.version}</name>
+                                    
<alias>${e2e.container.name.prefix}-elasticsearch</alias>
+                                    <run>
+                                        <ports>
+                                            <port>es.port:9200</port>
+                                        </ports>
+                                        <wait>
+                                            <http>
+                                                
<url>http://localhost:${es.port}</url>
+                                                <method>GET</method>
+                                                <status>200</status>
+                                            </http>
+                                            <time>120000</time>
+                                        </wait>
+                                        <env>
+                                            
<discovery.type>single-node</discovery.type>
+                                        </env>
+                                    </run>
+                                </image>
+                                <image>
+                                    
<name>skyapm/e2e-container:${e2e.container.version}</name>
+                                    <alias>${e2e.container.name.prefix}</alias>
+                                    <run>
+                                        <env>
+                                            <STORAGE>elasticsearch</STORAGE>
+                                            
<ES_VERSION>${elasticsearch.version}</ES_VERSION>
+                                            <SW_STORAGE_ES_CLUSTER_NODES>
+                                                
${e2e.container.name.prefix}-elasticsearch:9200
+                                            </SW_STORAGE_ES_CLUSTER_NODES>
+                                            <INSTRUMENTED_SERVICE_1>
+                                                
${provider.name}-${project.version}.jar
+                                            </INSTRUMENTED_SERVICE_1>
+                                            <INSTRUMENTED_SERVICE_1_OPTS>
+                                                
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
+                                                -DSW_AGENT_PROFILE_ACTIVE=true
+                                                
-DSW_AGENT_NAME=${provider.name}
+                                                -Dserver.port=9090
+                                            </INSTRUMENTED_SERVICE_1_OPTS>
+                                        </env>
+                                        <dependsOn>
+                                            
<container>${e2e.container.name.prefix}-elasticsearch</container>
+                                        </dependsOn>
+                                        <ports>
+                                            
<port>+webapp.host:webapp.port:8081</port>
+                                            
<port>+service.host:service.port:9090</port>
+                                        </ports>
+                                        <links>
+                                            
<link>${e2e.container.name.prefix}-elasticsearch</link>
+                                        </links>
+                                        <volumes>
+                                            <bind>
+                                                <volume>${sw.home}:/sw</volume>
+                                                
<volume>../${provider.name}/target/${provider.name}-${project.version}.jar:/home/${provider.name}-${project.version}.jar</volume>
+                                                
<volume>${project.basedir}/src/docker/rc.d:/rc.d:ro</volume>
+                                                
<volume>${project.basedir}/src/docker/clusterize.awk:/clusterize.awk</volume>
+                                            </bind>
+                                        </volumes>
+                                        <wait>
+                                            <log>SkyWalking e2e container is 
ready for tests</log>
+                                            <time>3000000</time>
+                                        </wait>
+                                    </run>
+                                </image>
+                            </images>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+    <build>
+        <plugins>
+            <!-- set the system properties that can be used in test codes -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-failsafe-plugin</artifactId>
+                <configuration>
+                    <systemPropertyVariables>
+                        <sw.webapp.host>${webapp.host}</sw.webapp.host>
+                        <sw.webapp.port>${webapp.port}</sw.webapp.port>
+                        <service.host>${service.host}</service.host>
+                        <service.port>${service.port}</service.port>
+                        <provider.name>${provider.name}</provider.name>
+                    </systemPropertyVariables>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>verify</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+
 
 </project>
\ No newline at end of file
diff --git 
a/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/adapt_storage.awk 
b/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/adapt_storage.awk
new file mode 100644
index 0000000..bf05c30
--- /dev/null
+++ b/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/adapt_storage.awk
@@ -0,0 +1,64 @@
+# 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.
+
+#!/usr/bin/awk -f
+
+BEGIN {
+    in_storage_section=0;
+    in_storage_type_section=0;
+}
+
+{
+    if (in_storage_section == 0) {
+        in_storage_section=$0 ~ /^storage:$/
+    } else {
+        in_storage_section=$0 ~ /^(#|\s{2})/
+    }
+
+    if (in_storage_section == 1) {
+        # in the storage: section now
+        if (in_storage_type_section == 0) {
+            if (ENVIRON["ES_VERSION"] ~ /^6.+/) {
+                in_storage_type_section=$0 ~ /^#?\s+elasticsearch:$/
+            } else if (ENVIRON["ES_VERSION"] ~ /^7.+/) {
+                in_storage_type_section=$0 ~ /^#?\s+elasticsearch7:$/
+            } else if (ENVIRON["STORAGE"] ~ /^mysql.*$/) {
+                in_storage_type_section=$0 ~ /^#?\s+mysql/
+            } else if (ENVIRON["STORAGE"] ~ /^h2.*$/) {
+                in_storage_type_section=$0 ~ /^#?\s+h2:$/
+            }
+        } else {
+            in_storage_type_section=$0 ~ /^#?\s{4}/
+        }
+        if (in_storage_type_section == 1) {
+            gsub("^#", "", $0)
+            print
+        } else {
+            if ($0 !~ /^#/) {
+                if ($0 ~ /^storage:$/) {
+                    print
+                } else {
+                    print "#" $0
+                }
+            } else {
+                print
+            }
+        }
+    } else {
+        print
+    }
+}
+
diff --git 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc0-prepare.sh
 b/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/rc.d/rc0-prepare.sh
similarity index 55%
rename from 
test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc0-prepare.sh
rename to 
test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/rc.d/rc0-prepare.sh
index 4a96718..4693ad0 100755
--- 
a/test/e2e/e2e-profile/e2e-profile-es-test-runner/src/docker/rc.d/rc0-prepare.sh
+++ 
b/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/rc.d/rc0-prepare.sh
@@ -17,16 +17,22 @@
 
 apt-get update && apt-get install -y gawk
 
-if test "${MODE}" = "cluster"; then
-    original_wd=$(pwd)
+original_wd=$(pwd)
 
-    # substitute application.yml to be capable of cluster mode
-    cd ${SW_HOME}/config \
-        && gawk -f /clusterize.awk application.yml > clusterized_app.yml \
-        && mv clusterized_app.yml application.yml \
-        && sed '/<Loggers>/a<logger 
name="org.apache.skywalking.oap.server.receiver.trace.provider.UninstrumentedGatewaysConfig"
 level="DEBUG"/>\
-        \n<logger 
name="org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.service.ServiceMappingSpanListener"
 level="DEBUG"/>' log4j2.xml > log4j2debuggable.xml \
-        && mv log4j2debuggable.xml log4j2.xml
 
-    cd ${original_wd}
+if test "${STORAGE}" = "mysql"; then
+  
MYSQL_URL="https://central.maven.org/maven2/mysql/mysql-connector-java/8.0.13/mysql-connector-java-8.0.13.jar";
+  MYSQL_DRIVER="mysql-connector-java-8.0.13.jar"
+
+  echo "MySQL database is storage provider..."
+  # Download MySQL connector.
+  curl ${MYSQL_URL} > "${SW_HOME}/oap-libs/${MYSQL_DRIVER}"
+  [[ $? -ne 0 ]] && echo "Fail to download ${MYSQL_DRIVER}." && exit 1
 fi
+
+# substitute application.yml to adapt the storage
+cd ${SW_HOME}/config \
+    && gawk -f /adapt_storage.awk application.yml > clusterized_app.yml \
+    && mv clusterized_app.yml application.yml
+
+cd ${original_wd}
diff --git 
a/test/e2e/e2e-profile/e2e-profile-h2-test-runner/src/docker/rc.d/rc1-startup.sh
 b/test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/rc.d/rc1-startup.sh
similarity index 100%
rename from 
test/e2e/e2e-profile/e2e-profile-h2-test-runner/src/docker/rc.d/rc1-startup.sh
rename to 
test/e2e/e2e-profile/e2e-profile-test-runner/src/docker/rc.d/rc1-startup.sh
diff --git 
a/test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
 
b/test/e2e/e2e-profile/e2e-profile-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
similarity index 100%
rename from 
test/e2e/e2e-profile/e2e-profile-mysql-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
rename to 
test/e2e/e2e-profile/e2e-profile-test-runner/src/test/java/org/apache/skywalking/e2e/ProfileVerificationITCase.java
diff --git a/test/e2e/e2e-profile/pom.xml b/test/e2e/e2e-profile/pom.xml
index dcfe0f7..38d8622 100644
--- a/test/e2e/e2e-profile/pom.xml
+++ b/test/e2e/e2e-profile/pom.xml
@@ -33,9 +33,6 @@
     <modules>
         <module>e2e-profile-service</module>
         <module>e2e-profile-test-runner</module>
-        <module>e2e-profile-h2-test-runner</module>
-        <module>e2e-profile-mysql-test-runner</module>
-        <module>e2e-profile-es-test-runner</module>
     </modules>
 
     <dependencies>
diff --git a/test/e2e/run.sh b/test/e2e/run.sh
index bec5e4a..586c564 100755
--- a/test/e2e/run.sh
+++ b/test/e2e/run.sh
@@ -36,6 +36,9 @@ while [[ $# -gt 0 ]]; do
     --profiles=*)
       profiles=${1#*=}
       ;;
+    --storage=*)
+      storage=${1#*=}
+      ;;
     *)
       cases+=($1)
   esac
@@ -70,6 +73,7 @@ do
          -De2e.container.version="${E2E_VERSION}" \
          -Delasticsearch.version="${ES_VERSION}" \
          -Dsw.home="${base_dir}/$test_case/${DIST_PACKAGE//.tar.gz/}" \
+         `if [ ! -z "${storage}" ] ; then echo -P"${storage}"; fi` \
          -f test/e2e/pom.xml -pl "$test_case" -am verify
 
   status_code=$?

Reply via email to