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