diff --git a/test/e2e/e2e-service-consumer/pom.xml b/test/e2e/e2e-service-consumer/pom.xml index 7c23b03190e3ec7d158a450f83b9ce657a7887a7..fb5f54726c35483bc3e57d8ecab2d5407769428c 100644 --- a/test/e2e/e2e-service-consumer/pom.xml +++ b/test/e2e/e2e-service-consumer/pom.xml @@ -33,6 +33,14 @@ e2e-service-consumer + + + org.apache.skywalking + apm-toolkit-trace + ${sw.version} + + + diff --git a/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java b/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java index 7d94ff728579916a6a5703d2d9b236214b29321b..40cb7c9967a9561736aab8d6b9fc8a397baaeabe 100644 --- a/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java +++ b/test/e2e/e2e-service-consumer/src/main/java/org/apache/skywalking/e2e/controller/UserController.java @@ -19,11 +19,8 @@ package org.apache.skywalking.e2e.controller; import com.google.common.base.Strings; -import java.util.Optional; -import java.util.Random; -import java.util.stream.Collectors; -import java.util.stream.Stream; import lombok.RequiredArgsConstructor; +import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.apache.skywalking.e2e.E2EConfiguration; import org.apache.skywalking.e2e.User; import org.springframework.http.ResponseEntity; @@ -32,6 +29,11 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import java.util.Optional; +import java.util.Random; +import java.util.stream.Collectors; +import java.util.stream.Stream; + @RestController @RequiredArgsConstructor public class UserController { @@ -67,6 +69,16 @@ public class UserController { .collect(Collectors.toList()); } + @PostMapping("/correlation") + public String correlation() throws InterruptedException { + Thread.sleep(randomSleepLong(sleepMin, sleepMax)); + TraceContext.putCorrelation("CONSUMER_KEY", "consumer"); + + String baseUrl = configuration.getProviderBaseUrl(); + ResponseEntity resp = restTemplate.postForEntity(baseUrl + "/correlation", null, String.class); + return resp.getBody(); + } + private long randomSleepLong(int min, int max) { Random rand = new Random(); int randomNumber = rand.nextInt((max - min) + 1) + min; diff --git a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java index b3ed941a726ef38e77642e556cf73fe0a28f43d2..c1391c547c0942e68f9fa7d0b6c87843b1b1e9dd 100644 --- a/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java +++ b/test/e2e/e2e-service-provider/src/main/java/org/apache/skywalking/e2e/controller/UserController.java @@ -19,6 +19,7 @@ package org.apache.skywalking.e2e.controller; import lombok.RequiredArgsConstructor; +import org.apache.skywalking.apm.toolkit.trace.TraceContext; import org.apache.skywalking.e2e.User; import org.apache.skywalking.e2e.UserRepo; import org.springframework.web.bind.annotation.PostMapping; @@ -47,6 +48,15 @@ public class UserController { return userRepo.save(user); } + @PostMapping("/correlation") + public String correlation() throws InterruptedException { + Thread.sleep(randomSleepLong(sleepMin, sleepMax)); + TraceContext.putCorrelation("PROVIDER_KEY", "provider"); + return TraceContext.getCorrelation("CONSUMER_KEY").orElse("") + "_" + + TraceContext.getCorrelation("MIDDLE_KEY").orElse("") + "_" + + TraceContext.getCorrelation("PROVIDER_KEY").orElse(""); + } + private long randomSleepLong(int min, int max) { Random rand = new Random(); int randomNumber = rand.nextInt((max - min) + 1) + min; diff --git a/test/e2e/e2e-test/docker/go/Dockerfile.go b/test/e2e/e2e-test/docker/go/Dockerfile.go index 61338a8ffbcc8b3ef3d534069fd5d2a3492e8aeb..16e650d10a5f94d1705ee7c9f890d6d9b4d34f35 100644 --- a/test/e2e/e2e-test/docker/go/Dockerfile.go +++ b/test/e2e/e2e-test/docker/go/Dockerfile.go @@ -15,7 +15,7 @@ FROM golang:1.12 AS builder -ARG COMMIT_HASH=38c3b84741dd6c0609965e9df0fcc633915d3ea5 +ARG COMMIT_HASH=9094186ac3782482a85dbca47978651bec268e97 ARG GO2SKY_CODE=${COMMIT_HASH}.tar.gz ARG GO2SKY_CODE_URL=https://github.com/SkyAPM/go2sky/archive/${GO2SKY_CODE} diff --git a/test/e2e/e2e-test/docker/go/docker-compose.yml b/test/e2e/e2e-test/docker/go/docker-compose.yml index 213c81a06229e39ffce9e601be7a5498c8ece03d..e78608a1f43cab8f7d6b93b5a51592c1d5f8305c 100644 --- a/test/e2e/e2e-test/docker/go/docker-compose.yml +++ b/test/e2e/e2e-test/docker/go/docker-compose.yml @@ -52,7 +52,7 @@ services: condition: service_healthy java-provider: condition: service_healthy - command: ['--grpc', '--oap-server', 'oap:11800', '--upstream-url', 'http://java-provider:9090/info'] + command: ['--grpc', '--oap-server', 'oap:11800', '--upstream-url', 'http://java-provider:9090/correlation'] healthcheck: test: ["CMD", "sh", "-c", "nc -z 127.0.0.1 8080"] interval: 5s diff --git a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java index c4885372bcd925c576d133a9358d3f965fe2a944..6720da6c9bd65c7748064fedcdc880fca9846791 100644 --- a/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java +++ b/test/e2e/e2e-test/src/test/java/org/apache/skywalking/e2e/GOE2E.java @@ -17,7 +17,6 @@ package org.apache.skywalking.e2e; -import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.skywalking.e2e.annotation.ContainerHostAndPort; import org.apache.skywalking.e2e.annotation.DockerCompose; @@ -50,10 +49,15 @@ import org.apache.skywalking.e2e.topo.Topology; import org.apache.skywalking.e2e.trace.Trace; import org.apache.skywalking.e2e.trace.TracesMatcher; import org.apache.skywalking.e2e.trace.TracesQuery; +import org.junit.Assert; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; +import org.springframework.http.ResponseEntity; import org.testcontainers.containers.DockerComposeContainer; +import java.net.URL; +import java.util.List; + import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyMetrics; import static org.apache.skywalking.e2e.metrics.MetricsMatcher.verifyPercentileMetrics; import static org.apache.skywalking.e2e.metrics.MetricsQuery.ALL_ENDPOINT_METRICS; @@ -93,7 +97,7 @@ public class GOE2E extends SkyWalkingTestAdapter { @BeforeAll public void setUp() throws Exception { queryClient(swWebappHostPort); - trafficController(javaConsumerHostPort, "/info"); + trafficController(javaConsumerHostPort, "/correlation"); } @AfterAll @@ -159,6 +163,16 @@ public class GOE2E extends SkyWalkingTestAdapter { verifyServiceInstanceRelationMetrics(topology.getCalls()); } + @RetryableTest + void correlation() throws Exception { + final URL url = new URL("http", javaConsumerHostPort.host(), javaConsumerHostPort.port(), "/correlation"); + + ResponseEntity resp = restTemplate.postForEntity(url.toURI(), trafficData, String.class); + LOGGER.info("verifying correlation: {}", resp); + + Assert.assertEquals("consumer_go2sky_provider", resp.getBody()); + } + private Instances verifyServiceInstances(final Service service) throws Exception { final Instances instances = graphql.instances( new InstancesQuery().serviceId(service.getKey()).start(startTime).end(now()) diff --git a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-consumer.yml b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-consumer.yml index 650f2dcd3f1baa24a88612fc6dd5feb3047418c1..b2011b3f8078e06e7570951e3715db5b1147e10f 100644 --- a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-consumer.yml +++ b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-consumer.yml @@ -14,5 +14,5 @@ # limitations under the License. endpoints: - - key: ZTJlLXNlcnZpY2UtamF2YS1jb25zdW1lcg==.1_L2luZm8= - label: /info \ No newline at end of file + - key: ZTJlLXNlcnZpY2UtamF2YS1jb25zdW1lcg==.1_L2NvcnJlbGF0aW9u + label: /correlation \ No newline at end of file diff --git a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-go2sky.yml b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-go2sky.yml index 038fa5d491b2c210b362179d70a17416d12b8ddb..18d96d1546cdca2da72884088aeccd3f478a36d4 100644 --- a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-go2sky.yml +++ b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-go2sky.yml @@ -14,5 +14,5 @@ # limitations under the License. endpoints: - - key: Z28yc2t5.1_L1BPU1QvaW5mbw== - label: /POST/info \ No newline at end of file + - key: Z28yc2t5.1_L1BPU1QvY29ycmVsYXRpb24= + label: /POST/correlation \ No newline at end of file diff --git a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-provider.yml b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-provider.yml index 0562bd29c44dc12336356e122eec08a413337cfc..6e5c04f3c85d5acc12741f6ed7c293f2ad8854cd 100644 --- a/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-provider.yml +++ b/test/e2e/e2e-test/src/test/resources/expected/go/endpoints-provider.yml @@ -14,5 +14,5 @@ # limitations under the License. endpoints: - - key: ZTJlLXNlcnZpY2UtamF2YS1wcm92aWRlcg==.1_L2luZm8= - label: /info \ No newline at end of file + - key: ZTJlLXNlcnZpY2UtamF2YS1wcm92aWRlcg==.1_L2NvcnJlbGF0aW9u + label: /correlation \ No newline at end of file diff --git a/test/e2e/e2e-test/src/test/resources/expected/go/traces.yml b/test/e2e/e2e-test/src/test/resources/expected/go/traces.yml index 9cab9bf875e2eb394c60399c3bcc6f2a9cab4b27..47af5b6aeb4d633c539b281c4f567dc99242ce09 100644 --- a/test/e2e/e2e-test/src/test/resources/expected/go/traces.yml +++ b/test/e2e/e2e-test/src/test/resources/expected/go/traces.yml @@ -16,7 +16,7 @@ traces: - key: not null endpointNames: - - /info + - /correlation duration: ge 0 start: gt 0 isError: false