From 62060749f7bea3cd97716a5ba0cec6103f46d02c Mon Sep 17 00:00:00 2001 From: zhang-wei Date: Thu, 7 Nov 2019 15:29:52 +0800 Subject: [PATCH] [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 ---------------- .../configuration.yml | 21 ---- .../undertow-routing-scenario/pom.xml | 114 ------------------ .../src/main/assembly/assembly.xml | 41 ------- .../amp/testcase/undertow/Application.java | 72 ----------- .../support-version.list | 44 ------- .../config/expectedData.yaml | 72 ++++++++++- .../amp/testcase/undertow/Application.java | 38 +++++- 13 files changed, 111 insertions(+), 448 deletions(-) delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/bin/startup.sh delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/config/expectedData.yaml delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/configuration.yml delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/pom.xml delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/src/main/assembly/assembly.xml delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/src/main/java/org/apache/skywalking/amp/testcase/undertow/Application.java delete mode 100644 test/plugin/scenarios/undertow-routing-scenario/support-version.list diff --git a/Jenkinsfile-Agent-Test-3 b/Jenkinsfile-Agent-Test-3 index a46dfd172..1edfb2642 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 5ce04d811..8b994e533 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 5cbd881fe..75a7b8191 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 b4c024388..38e4a53f8 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 52f5a542f..000000000 --- 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 b8439feff..000000000 --- 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 c32ce969f..000000000 --- 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 7ab0a460e..000000000 --- a/test/plugin/scenarios/undertow-routing-scenario/pom.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - 4.0.0 - - org.apache.skywalking - undertow-routing-scenario - jar - 5.0.0 - - - UTF-8 - 1.8 - org.apache.skywalking.amp.testcase.undertow.Application - - undertow - 1.3.0.Final - - - skywalking-undertow-routing-scenario - - - - javax.servlet - javax.servlet-api - 3.1.0 - provided - - - io.undertow - undertow-core - ${test.framework.version} - - - - org.apache.httpcomponents - httpclient - 4.3 - - - - - undertow-routing-scenario - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - maven-compiler-plugin - - ${compiler.version} - ${compiler.version} - ${project.build.sourceEncoding} - - - - org.apache.maven.plugins - maven-assembly-plugin - - - assemble - package - - single - - - - src/main/assembly/assembly.xml - - ./target/ - - - - - - - - - - spring-snapshots - http://repo.spring.io/snapshot - - - spring-milestones - http://repo.spring.io/milestone - - - \ 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 9d3588c2f..000000000 --- a/test/plugin/scenarios/undertow-routing-scenario/src/main/assembly/assembly.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - zip - - - - - ./bin - 0775 - - - - - - ${project.build.directory}/undertow-routing-scenario.jar - ./libs - 0775 - - - 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 4a33673c8..000000000 --- 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 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 3a6f7d0e8..000000000 --- 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 bbfbafb22..c4fb328c3 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: @@ -44,6 +45,29 @@ segmentItems: tags: - {key: url, value: 'http://localhost:8080/undertow-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: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 @@ -67,6 +91,42 @@ segmentItems: entryEndpointId: 0, refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstanceId: 1, networkAddress: 'localhost:8080', entryEndpoint: /undertow-scenario/case/undertow, entryServiceInstanceId: 1} + - segmentId: not null + spans: + - operationName: /undertow-routing-scenario/case/undertow + operationId: 0 + parentSpanId: 0 + spanId: 1 + spanLayer: Http + startTime: nq 0 + endTime: nq 0 + componentId: 2 + componentName: '' + isError: false + spanType: Exit + peer: localhost:8081 + peerId: 0 + tags: + - {key: url, value: 'http://localhost:8081/undertow-routing-scenario/case/undertow?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-scenario/case/undertow, networkAddressId: 0, + entryEndpointId: 0, refType: CrossThread, parentSpanId: 0, parentTraceSegmentId: not null, + parentServiceInstanceId: 1, networkAddress: '', entryEndpoint: /undertow-scenario/case/undertow, + entryServiceInstanceId: 1} - segmentId: not null spans: - operationName: /undertow-scenario/case/undertow1 @@ -99,7 +159,7 @@ segmentItems: peer: '' peerId: 0 refs: - - {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 + - {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 f1fa0bd96..3617bcfc3 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 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(); } } }