You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/11/07 07:30:03 UTC

[skywalking] branch master updated: [test/plugin] merge undertow scenario (#3797)

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

wusheng 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 6206074  [test/plugin] merge undertow scenario (#3797)
6206074 is described below

commit 62060749f7bea3cd97716a5ba0cec6103f46d02c
Author: zhang-wei <pk...@outlook.com>
AuthorDate: Thu Nov 7 15:29:52 2019 +0800

    [test/plugin] merge undertow scenario (#3797)
    
    * merge undertow scenario
    
    * update elapsed time
---
 Jenkinsfile-Agent-Test-3                           |   8 +-
 Jenkinsfile-Agent-Test-4                           |   6 +-
 docs/en/guides/Plugin-test.md                      |  12 +--
 test/plugin/run.sh                                 |   4 +-
 .../undertow-routing-scenario/bin/startup.sh       |  21 ----
 .../config/expectedData.yaml                       | 106 -------------------
 .../undertow-routing-scenario/configuration.yml    |  21 ----
 .../scenarios/undertow-routing-scenario/pom.xml    | 114 ---------------------
 .../src/main/assembly/assembly.xml                 |  41 --------
 .../amp/testcase/undertow/Application.java         |  72 -------------
 .../undertow-routing-scenario/support-version.list |  44 --------
 .../undertow-scenario/config/expectedData.yaml     |  72 +++++++++++--
 .../amp/testcase/undertow/Application.java         |  38 ++++++-
 13 files changed, 111 insertions(+), 448 deletions(-)

diff --git a/Jenkinsfile-Agent-Test-3 b/Jenkinsfile-Agent-Test-3
index a46dfd1..1edfb26 100755
--- a/Jenkinsfile-Agent-Test-3
+++ b/Jenkinsfile-Agent-Test-3
@@ -67,7 +67,7 @@ pipeline {
                 sh './mvnw -f test/plugin/pom.xml clean package -DskipTests docker:build'
             }
         }
-        stage('Test Cases Report (135)') {
+        stage('Test Cases Report (119)') {
             steps {
                 echo "Test Cases Report"
             }
@@ -110,12 +110,6 @@ pipeline {
                             }
                         }
 
-                        stage('kafka 0.11.0.0-2.3.0 (16)') {
-                            steps {
-                                sh 'bash test/plugin/run.sh kafka-scenario'
-                            }
-                        }
-
                         stage('mongodb 3.4.0-3.11.1 (17)') {
                             steps {
                                 sh 'bash test/plugin/run.sh mongodb-3.x-scenario'
diff --git a/Jenkinsfile-Agent-Test-4 b/Jenkinsfile-Agent-Test-4
index 5ce04d8..8b994e5 100755
--- a/Jenkinsfile-Agent-Test-4
+++ b/Jenkinsfile-Agent-Test-4
@@ -68,7 +68,7 @@ pipeline {
             }
         }
 
-        stage('Test Cases Report (142)') {
+        stage('Test Cases Report (135)') {
             steps {
                 echo "Test Cases Report"
             }
@@ -84,9 +84,9 @@ pipeline {
             parallel {
                 stage('Group1') {
                     stages {
-                        stage('undertow-routing 1.3.0-2.0.27 (23)') {
+                        stage('kafka 0.11.0.0-2.3.0 (16)') {
                             steps {
-                                sh 'bash test/plugin/run.sh undertow-routing-scenario'
+                                sh 'bash test/plugin/run.sh kafka-scenario'
                             }
                         }
 
diff --git a/docs/en/guides/Plugin-test.md b/docs/en/guides/Plugin-test.md
index 5cbd881..75a7b81 100644
--- a/docs/en/guides/Plugin-test.md
+++ b/docs/en/guides/Plugin-test.md
@@ -642,21 +642,19 @@ postgresql 9.2.x-9.4.x | 36 | 1243.03
 sofarpc 5.4.0-5.6.2 | 23 | 817.77
 spring 3.0.x | 8 | 231.11
 
-#### Group 2 (3138.093s)
+#### Group 2 (2433.33s)
 scenario name | versions | elapsed time (sec)
 ---|---|---
 spring async 4.3.x-5.1.x | 35 | 967.70
-kafka 0.11.0.0-2.3.0 | 16 | 704.75
 mongodb 3.4.0-3.11.1 | 17 | 1465.63
 
-
 ### Workload 4
-#### Group 1 (1688.243s)
+#### Group 1 (1778.45s)
 scenario name | versions | elapsed time (sec)
 ---|---|---
-undertow-routing 1.3.0-2.0.27 | 23 | 643.31
+kafka 0.11.0.0-2.3.0 | 16 | 704.75
 ehcache 2.8.x-2.10.x | 19 | 440.71
-undertow 1.3.0-2.0.27 | 23 | 604.20
+undertow 1.3.0-2.0.27 | 23 | 633.00
 
 #### Group 2 (2148.155s)
 scenario name | versions | elapsed time (sec)
@@ -665,4 +663,4 @@ spring-webflux 2.x | 18 | 705.60
 spring 4.1.x-4.2.x | 20 | 574.75
 solrj 7.x | 12 | 367.05
 httpclient 4.3.x-4.5.x | 14 | 300.61
-httpasyncclient 4.0-4.1.3 | 7 | 200.11
\ No newline at end of file
+httpasyncclient 4.0-4.1.3 | 7 | 200.11
diff --git a/test/plugin/run.sh b/test/plugin/run.sh
index b4c0243..38e4a53 100644
--- a/test/plugin/run.sh
+++ b/test/plugin/run.sh
@@ -143,9 +143,9 @@ test -z "$scenario_name" && exitWithMessage "Missing value for the scenario argu
 
 if [[ ! -d ${agent_home} ]]; then
     echo "[WARN] SkyWalking Agent not exists"
-    ${mvnw} -f ${home}/../../pom.xml -Pagent -DskipTests -DBUILD_NO=${BUILD_NO:=local} clean package
+    ${mvnw} -f ${home}/../../pom.xml -Pagent -DskipTests clean package
 fi
-[[ "$force_build" == "on" ]] && ${mvnw} -f ${home}/pom.xml clean package -DskipTests docker:build
+[[ "$force_build" == "on" ]] && ${mvnw} -f ${home}/pom.xml clean package -DskipTests -DBUILD_NO=${BUILD_NO:=local} docker:build
 
 workspace="${home}/workspace/${scenario_name}"
 task_state_house="${workspace}/.states"
diff --git a/test/plugin/scenarios/undertow-routing-scenario/bin/startup.sh b/test/plugin/scenarios/undertow-routing-scenario/bin/startup.sh
deleted file mode 100644
index 52f5a54..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/bin/startup.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/bash
-#
-# 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.
-
-home="$(cd "$(dirname $0)"; pwd)"
-
-java -jar ${agent_opts} ${home}/../libs/undertow-routing-scenario.jar &
\ No newline at end of file
diff --git a/test/plugin/scenarios/undertow-routing-scenario/config/expectedData.yaml b/test/plugin/scenarios/undertow-routing-scenario/config/expectedData.yaml
deleted file mode 100644
index b8439fe..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/config/expectedData.yaml
+++ /dev/null
@@ -1,106 +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.
-
-registryItems:
-  applications:
-    - {undertow-routing-scenario: 2}
-  instances:
-    - {undertow-routing-scenario: 1}
-  operationNames:
-    - undertow-routing-scenario: [/undertow-routing-scenario/case/undertow1, '/undertow-routing-scenario/case/{context}']
-  heartbeat: []
-segmentItems:
-  - applicationCode: undertow-routing-scenario
-    segmentSize: gt 3
-    segments:
-      - segmentId: not null
-        spans:
-          - operationName: /undertow-routing-scenario/case/{context}
-            operationId: 0
-            parentSpanId: -1
-            spanId: 0
-            spanLayer: Http
-            startTime: nq 0
-            endTime: nq 0
-            componentId: 49
-            componentName: ''
-            isError: false
-            spanType: Entry
-            peer: ''
-            peerId: 0
-            tags:
-              - {key: url, value: 'http://localhost:8080/undertow-routing-scenario/case/undertow'}
-              - {key: http.method, value: GET}
-      - segmentId: not null
-        spans:
-          - operationName: /undertow-routing-scenario/case/{context}
-            operationId: 0
-            parentSpanId: -1
-            spanId: 0
-            spanLayer: Http
-            startTime: nq 0
-            endTime: nq 0
-            componentId: 49
-            componentName: ''
-            isError: false
-            spanType: Entry
-            peer: ''
-            peerId: 0
-            tags:
-              - {key: url, value: 'http://localhost:8080/undertow-routing-scenario/case/undertow1'}
-              - {key: http.method, value: GET}
-            refs:
-              - {parentEndpointId: 0, parentEndpoint: UndertowDispatch, networkAddressId: 0,
-                 entryEndpointId: 0, refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null,
-                 parentServiceInstanceId: 1, networkAddress: 'localhost:8080', entryEndpoint: '/undertow-routing-scenario/case/{context}',
-                 entryServiceInstanceId: 1}
-      - segmentId: not null
-        spans:
-          - operationName: /undertow-routing-scenario/case/undertow1
-            operationId: 0
-            parentSpanId: 0
-            spanId: 1
-            spanLayer: Http
-            startTime: nq 0
-            endTime: nq 0
-            componentId: 2
-            componentName: ''
-            isError: false
-            spanType: Exit
-            peer: localhost:8080
-            peerId: 0
-            tags:
-              - {key: url, value: 'http://localhost:8080/undertow-routing-scenario/case/undertow1?send=httpHandler'}
-              - {key: http.method, value: GET}
-          - operationName: UndertowDispatch
-            operationId: 0
-            parentSpanId: -1
-            spanId: 0
-            spanLayer: Unknown
-            startTime: nq 0
-            endTime: nq 0
-            componentId: 49
-            componentName: ''
-            isError: false
-            spanType: Local
-            peer: ''
-            peerId: 0
-            refs:
-              - {parentEndpointId: 0, parentEndpoint: '/undertow-routing-scenario/case/{context}',
-                 networkAddressId: 0, entryEndpointId: 0, refType: CrossThread, parentSpanId: 0,
-                 parentTraceSegmentId: not null, parentServiceInstanceId: 1,
-                 networkAddress: '', entryEndpoint: '/undertow-routing-scenario/case/{context}',
-                 entryServiceInstanceId: 1}
\ No newline at end of file
diff --git a/test/plugin/scenarios/undertow-routing-scenario/configuration.yml b/test/plugin/scenarios/undertow-routing-scenario/configuration.yml
deleted file mode 100644
index c32ce96..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/configuration.yml
+++ /dev/null
@@ -1,21 +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.
-
-type: jvm
-entryService: http://localhost:8080/undertow-routing-scenario/case/undertow
-healthCheck: http://localhost:8080/undertow-routing-scenario/case/healthCheck
-startScript: ./bin/startup.sh
-framework: undertow
\ No newline at end of file
diff --git a/test/plugin/scenarios/undertow-routing-scenario/pom.xml b/test/plugin/scenarios/undertow-routing-scenario/pom.xml
deleted file mode 100644
index 7ab0a46..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/pom.xml
+++ /dev/null
@@ -1,114 +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">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.apache.skywalking</groupId>
-    <artifactId>undertow-routing-scenario</artifactId>
-    <packaging>jar</packaging>
-    <version>5.0.0</version>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <compiler.version>1.8</compiler.version>
-        <start-class>org.apache.skywalking.amp.testcase.undertow.Application</start-class>
-
-        <test.framework>undertow</test.framework>
-        <test.framework.version>1.3.0.Final</test.framework.version>
-    </properties>
-
-    <name>skywalking-undertow-routing-scenario</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <version>3.1.0</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.undertow</groupId>
-            <artifactId>undertow-core</artifactId>
-            <version>${test.framework.version}</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>4.3</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <finalName>undertow-routing-scenario</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>${compiler.version}</source>
-                    <target>${compiler.version}</target>
-                    <encoding>${project.build.sourceEncoding}</encoding>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>assemble</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <descriptors>
-                                <descriptor>src/main/assembly/assembly.xml</descriptor>
-                            </descriptors>
-                            <outputDirectory>./target/</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <pluginRepositories>
-        <pluginRepository>
-            <id>spring-snapshots</id>
-            <url>http://repo.spring.io/snapshot</url>
-        </pluginRepository>
-        <pluginRepository>
-            <id>spring-milestones</id>
-            <url>http://repo.spring.io/milestone</url>
-        </pluginRepository>
-    </pluginRepositories>
-</project>
\ No newline at end of file
diff --git a/test/plugin/scenarios/undertow-routing-scenario/src/main/assembly/assembly.xml b/test/plugin/scenarios/undertow-routing-scenario/src/main/assembly/assembly.xml
deleted file mode 100644
index 9d3588c..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/src/main/assembly/assembly.xml
+++ /dev/null
@@ -1,41 +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.
-  ~
-  -->
-<assembly
-        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-    <formats>
-        <format>zip</format>
-    </formats>
-
-    <fileSets>
-        <fileSet>
-            <directory>./bin</directory>
-            <fileMode>0775</fileMode>
-        </fileSet>
-    </fileSets>
-
-    <files>
-        <file>
-            <source>${project.build.directory}/undertow-routing-scenario.jar</source>
-            <outputDirectory>./libs</outputDirectory>
-            <fileMode>0775</fileMode>
-        </file>
-    </files>
-</assembly>
diff --git a/test/plugin/scenarios/undertow-routing-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java b/test/plugin/scenarios/undertow-routing-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java
deleted file mode 100644
index 4a33673..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java
+++ /dev/null
@@ -1,72 +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.amp.testcase.undertow;
-
-import io.undertow.Undertow;
-import io.undertow.server.HttpHandler;
-import io.undertow.server.RoutingHandler;
-import io.undertow.util.Headers;
-import io.undertow.util.Methods;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-
-import java.io.IOException;
-
-public class Application {
-
-    private static final String TEMPLATE = "/undertow-routing-scenario/case/{context}";
-
-    private static final String CASE_URL = "/undertow-routing-scenario/case/undertow";
-
-    public static void main(String[] args) {
-        HttpHandler httpHandler = exchange -> {
-            if (CASE_URL.equals(exchange.getRequestPath())) {
-                exchange.dispatch(httpServerExchange -> visit("http://localhost:8080/undertow-routing-scenario/case/undertow1?send=httpHandler"));
-            }
-            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
-            exchange.getResponseSender().send("Success");
-        };
-        RoutingHandler handler = new RoutingHandler();
-        handler.add(Methods.GET, TEMPLATE, httpHandler);
-        handler.add(Methods.HEAD, TEMPLATE, httpHandler);
-        Undertow server = Undertow.builder()
-            .addHttpListener(8080, "0.0.0.0")
-            .setHandler(handler).build();
-        Runtime.getRuntime().addShutdownHook(new Thread(server::stop));
-        server.start();
-    }
-
-    private static void visit(String url) throws IOException {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
-        try {
-            HttpGet httpget = new HttpGet(url);
-            ResponseHandler<String> responseHandler = response -> {
-                HttpEntity entity = response.getEntity();
-                return entity != null ? EntityUtils.toString(entity) : null;
-            };
-            httpclient.execute(httpget, responseHandler);
-        } finally {
-            httpclient.close();
-        }
-    }
-}
diff --git a/test/plugin/scenarios/undertow-routing-scenario/support-version.list b/test/plugin/scenarios/undertow-routing-scenario/support-version.list
deleted file mode 100644
index 3a6f7d0..0000000
--- a/test/plugin/scenarios/undertow-routing-scenario/support-version.list
+++ /dev/null
@@ -1,44 +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
-# "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.
-
-# undertow has a total of 90 versions from 1.3.0 to 2.0.27, in order to reduce the workload of agent-plugin-test,
-# so, some test cases are excluded according to the following rules.
-# 1.3.x 1.4.x: select the first, middle, and last version
-# 2.0.x: when there are many releases in the same month, choose the last one
-
-1.3.0.Final
-1.3.17.Final
-1.3.33.Final
-1.4.0.Final
-1.4.12.Final
-1.4.27.Final
-2.0.0.Final
-2.0.3.Final
-2.0.4.Final
-2.0.8.Final
-2.0.9.Final
-2.0.11.Final
-2.0.13.Final
-2.0.15.Final
-2.0.16.Final
-2.0.17.Final
-2.0.19.Final
-2.0.20.Final
-2.0.21.Final
-2.0.22.Final
-2.0.23.Final
-2.0.26.Final
-2.0.27.Final
\ No newline at end of file
diff --git a/test/plugin/scenarios/undertow-scenario/config/expectedData.yaml b/test/plugin/scenarios/undertow-scenario/config/expectedData.yaml
index bbfbafb..c4fb328 100644
--- a/test/plugin/scenarios/undertow-scenario/config/expectedData.yaml
+++ b/test/plugin/scenarios/undertow-scenario/config/expectedData.yaml
@@ -20,11 +20,12 @@ registryItems:
   instances:
     - {undertow-scenario: 1}
   operationNames:
-    - undertow-scenario: [/undertow-scenario/case/undertow1, /undertow-scenario/case/undertow]
+    - undertow-scenario: [/undertow-scenario/case/undertow1, /undertow-scenario/case/undertow, /undertow-routing-scenario/case/undertow,
+                          '/undertow-routing-scenario/case/{context}']
   heartbeat: []
 segmentItems:
   - applicationCode: undertow-scenario
-    segmentSize: gt 3
+    segmentSize: gt 5
     segments:
       - segmentId: not null
         spans:
@@ -46,6 +47,29 @@ segmentItems:
               - {key: http.method, value: GET}
       - segmentId: not null
         spans:
+          - operationName: /undertow-routing-scenario/case/{context}
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: nq 0
+            endTime: nq 0
+            componentId: 49
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            tags:
+              - {key: url, value: 'http://localhost:8081/undertow-routing-scenario/case/undertow'}
+              - {key: http.method, value: GET}
+            refs:
+              - {parentEndpointId: 0, parentEndpoint: UndertowDispatch, networkAddressId: 0,
+                 entryEndpointId: 0, refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null,
+                 parentServiceInstanceId: 1, networkAddress: 'localhost:8081', entryEndpoint: /undertow-scenario/case/undertow,
+                 entryServiceInstanceId: 1}
+      - segmentId: not null
+        spans:
           - operationName: /undertow-scenario/case/undertow1
             operationId: 0
             parentSpanId: -1
@@ -69,7 +93,7 @@ segmentItems:
                  entryServiceInstanceId: 1}
       - segmentId: not null
         spans:
-          - operationName: /undertow-scenario/case/undertow1
+          - operationName: /undertow-routing-scenario/case/undertow
             operationId: 0
             parentSpanId: 0
             spanId: 1
@@ -80,10 +104,10 @@ segmentItems:
             componentName: ''
             isError: false
             spanType: Exit
-            peer: localhost:8080
+            peer: localhost:8081
             peerId: 0
             tags:
-              - {key: url, value: 'http://localhost:8080/undertow-scenario/case/undertow1?send=runnable'}
+              - {key: url, value: 'http://localhost:8081/undertow-routing-scenario/case/undertow?send=httpHandler'}
               - {key: http.method, value: GET}
           - operationName: UndertowDispatch
             operationId: 0
@@ -102,4 +126,40 @@ segmentItems:
               - {parentEndpointId: 0, parentEndpoint: /undertow-scenario/case/undertow, networkAddressId: 0,
                  entryEndpointId: 0, refType: CrossThread, parentSpanId: 0, parentTraceSegmentId: not null,
                  parentServiceInstanceId: 1, networkAddress: '', entryEndpoint: /undertow-scenario/case/undertow,
-                 entryServiceInstanceId: 1}
\ No newline at end of file
+                 entryServiceInstanceId: 1}
+      - segmentId: not null
+        spans:
+          - operationName: /undertow-scenario/case/undertow1
+            operationId: 0
+            parentSpanId: 0
+            spanId: 1
+            spanLayer: Http
+            startTime: nq 0
+            endTime: nq 0
+            componentId: 2
+            componentName: ''
+            isError: false
+            spanType: Exit
+            peer: localhost:8080
+            peerId: 0
+            tags:
+              - {key: url, value: 'http://localhost:8080/undertow-scenario/case/undertow1?send=runnable'}
+              - {key: http.method, value: GET}
+          - operationName: UndertowDispatch
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Unknown
+            startTime: nq 0
+            endTime: nq 0
+            componentId: 49
+            componentName: ''
+            isError: false
+            spanType: Local
+            peer: ''
+            peerId: 0
+            refs:
+              - {parentEndpointId: 0, parentEndpoint: '/undertow-routing-scenario/case/{context}',
+                 networkAddressId: 0, entryEndpointId: 0, refType: CrossThread, parentSpanId: 0,
+                 parentTraceSegmentId: not null, parentServiceInstanceId: 1,
+                 networkAddress: '', entryEndpoint: /undertow-scenario/case/undertow, entryServiceInstanceId: 1}
diff --git a/test/plugin/scenarios/undertow-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java b/test/plugin/scenarios/undertow-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java
index f1fa0bd..3617bcf 100644
--- a/test/plugin/scenarios/undertow-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java
+++ b/test/plugin/scenarios/undertow-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java
@@ -19,7 +19,10 @@
 package org.apache.skywalking.amp.testcase.undertow;
 
 import io.undertow.Undertow;
+import io.undertow.server.HttpHandler;
+import io.undertow.server.RoutingHandler;
 import io.undertow.util.Headers;
+import io.undertow.util.Methods;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.ResponseHandler;
 import org.apache.http.client.methods.HttpGet;
@@ -33,14 +36,23 @@ public class Application {
 
     private static final String CASE_URL = "/undertow-scenario/case/undertow";
 
+    private static final String TEMPLATE = "/undertow-routing-scenario/case/{context}";
+
+    private static final String ROUTING_CASE_URL = "/undertow-routing-scenario/case/undertow";
+
     public static void main(String[] args) throws InterruptedException {
+        new Thread(Application::undertowRouting).start();
+        undertow();
+    }
+
+    private static void undertow() {
         Undertow server = Undertow.builder()
             .addHttpListener(8080, "0.0.0.0")
             .setHandler(exchange -> {
                 if (CASE_URL.equals(exchange.getRequestPath())) {
                     exchange.dispatch(() -> {
                         try {
-                            visit("http://localhost:8080/undertow-scenario/case/undertow1?send=runnable");
+                            visit("http://localhost:8081/undertow-routing-scenario/case/undertow?send=httpHandler");
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
@@ -53,17 +65,35 @@ public class Application {
         server.start();
     }
 
+    private static void undertowRouting() {
+        HttpHandler httpHandler = exchange -> {
+            if (ROUTING_CASE_URL.equals(exchange.getRequestPath())) {
+                exchange.dispatch(httpServerExchange -> visit("http://localhost:8080/undertow-scenario/case/undertow1?send=runnable"));
+            }
+            exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
+            exchange.getResponseSender().send("Success");
+        };
+        RoutingHandler handler = new RoutingHandler();
+        handler.add(Methods.GET, TEMPLATE, httpHandler);
+        handler.add(Methods.HEAD, TEMPLATE, httpHandler);
+        Undertow server = Undertow.builder()
+            .addHttpListener(8081, "0.0.0.0")
+            .setHandler(handler).build();
+        Runtime.getRuntime().addShutdownHook(new Thread(server::stop));
+        server.start();
+    }
+
     private static void visit(String url) throws IOException {
-        CloseableHttpClient httpclient = HttpClients.createDefault();
+        CloseableHttpClient httpClient = HttpClients.createDefault();
         try {
             HttpGet httpget = new HttpGet(url);
             ResponseHandler<String> responseHandler = response -> {
                 HttpEntity entity = response.getEntity();
                 return entity != null ? EntityUtils.toString(entity) : null;
             };
-            httpclient.execute(httpget, responseHandler);
+            httpClient.execute(httpget, responseHandler);
         } finally {
-            httpclient.close();
+            httpClient.close();
         }
     }
 }