You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2020/03/09 11:17:57 UTC
[skywalking-agent-test-tool] branch master updated: Introduce Http
Receiver (#8)
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-agent-test-tool.git
The following commit(s) were added to refs/heads/master by this push:
new f13c210 Introduce Http Receiver (#8)
f13c210 is described below
commit f13c210b7c7e45d32dc27bb489600161b71feafa
Author: Daming <zt...@foxmail.com>
AuthorDate: Mon Mar 9 19:17:49 2020 +0800
Introduce Http Receiver (#8)
---
mock-collector/pom.xml | 21 ++++-
.../skywalking/plugin/test/mockcollector/Main.java | 14 ++++
.../rest/service/JettyJsonHandler.java | 98 ++++++++++++++++++++++
.../MockInstanceRegisterServletHandler.java | 64 ++++++++++++++
.../MockServiceInstancePingServletHandler.java | 49 +++++++++++
.../service/MockServiceRegisterServletHandler.java | 73 ++++++++++++++++
.../MockTraceSegmentCollectServletHandler.java | 93 ++++++++++++++++++++
.../mockcollector/service/MockRegisterService.java | 10 +--
.../service/MockTraceSegmentService.java | 8 +-
.../test/mockcollector/util/ProtoBufJsonUtils.java | 46 ++++++++++
pom.xml | 69 ++++++++++-----
.../skywalking/plugin/test/agent/tool/Main.java | 15 ++--
.../agent/tool/validator/assertor/DataAssert.java | 11 ++-
.../validator/assertor/RegistryItemsAssert.java | 11 ++-
.../validator/assertor/SegmentItemsAssert.java | 7 +-
15 files changed, 529 insertions(+), 60 deletions(-)
diff --git a/mock-collector/pom.xml b/mock-collector/pom.xml
index 05c67f0..45a16d1 100644
--- a/mock-collector/pom.xml
+++ b/mock-collector/pom.xml
@@ -37,10 +37,19 @@
<protocol.version>b512211334db26a9c1031ce7bacfa2bef99b1d89</protocol.version>
<protocol.workingDirectory>${project.basedir}/target/protocol</protocol.workingDirectory>
<protocol.repos>https://github.com/apache/skywalking-data-collect-protocol.git</protocol.repos>
+ <protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
+ <com.google.protobuf.protoc.version>3.3.0</com.google.protobuf.protoc.version>
+ <protoc-gen-grpc-java.plugin.version>1.8.0</protoc-gen-grpc-java.plugin.version>
+ <protobuf-java-util.version>3.11.4</protobuf-java-util.version>
</properties>
<dependencies>
<dependency>
+ <groupId>com.google.protobuf</groupId>
+ <artifactId>protobuf-java-util</artifactId>
+ <version>${protobuf-java-util.version}</version>
+ </dependency>
+ <dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>${grpc.version}</version>
@@ -117,15 +126,21 @@
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
- <version>0.5.0</version>
+ <version>${protobuf-maven-plugin.version}</version>
<configuration>
- <protocArtifact>com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier}</protocArtifact>
+ <protocArtifact>
+ com.google.protobuf:protoc:${com.google.protobuf.protoc.version}:exe:${os.detected.classifier}
+ </protocArtifact>
<pluginId>grpc-java</pluginId>
- <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier}</pluginArtifact>
+ <pluginArtifact>
+ io.grpc:protoc-gen-grpc-java:${protoc-gen-grpc-java.plugin.version}:exe:${os.detected.classifier}
+ </pluginArtifact>
<protoSourceRoot>${protocol.workingDirectory}</protoSourceRoot>
</configuration>
+
<executions>
<execution>
+ <id>grpc-build</id>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
index 14b45ce..a3ba674 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
@@ -26,6 +26,10 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.rest.service.MockInstanceRegisterServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.rest.service.MockServiceInstancePingServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.rest.service.MockServiceRegisterServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.rest.service.MockTraceSegmentCollectServletHandler;
import org.apache.skywalking.plugin.test.mockcollector.service.ClearReceiveDataService;
import org.apache.skywalking.plugin.test.mockcollector.service.GrpcAddressHttpService;
import org.apache.skywalking.plugin.test.mockcollector.service.MockInstancePingService;
@@ -70,6 +74,16 @@ public class Main {
servletContextHandler.addServlet(GrpcAddressHttpService.class, GrpcAddressHttpService.SERVLET_PATH);
servletContextHandler.addServlet(ReceiveDataService.class, ReceiveDataService.SERVLET_PATH);
servletContextHandler.addServlet(ClearReceiveDataService.class, ClearReceiveDataService.SERVLET_PATH);
+
+ servletContextHandler.addServlet(
+ MockInstanceRegisterServletHandler.class, MockInstanceRegisterServletHandler.SERVLET_PATH);
+ servletContextHandler.addServlet(
+ MockServiceInstancePingServletHandler.class, MockServiceInstancePingServletHandler.SERVLET_PATH);
+ servletContextHandler.addServlet(
+ MockServiceRegisterServletHandler.class, MockServiceRegisterServletHandler.SERVLET_PATH);
+ servletContextHandler.addServlet(
+ MockTraceSegmentCollectServletHandler.class, MockTraceSegmentCollectServletHandler.SERVLET_PATH);
+
jettyServer.setHandler(servletContextHandler);
jettyServer.start();
}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/JettyJsonHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/JettyJsonHandler.java
new file mode 100644
index 0000000..ee8923f
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/JettyJsonHandler.java
@@ -0,0 +1,98 @@
+/*
+ * 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.plugin.test.mockcollector.rest.service;
+
+import com.google.gson.JsonElement;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+
+import static java.util.Objects.nonNull;
+
+@Slf4j
+public abstract class JettyJsonHandler extends HttpServlet {
+
+ @Override
+ protected final void doGet(HttpServletRequest req, HttpServletResponse resp) {
+ try {
+ reply(resp, doGet(req));
+ } catch (IOException e) {
+ try {
+ replyError(resp, e.getMessage(), HttpServletResponse.SC_BAD_REQUEST);
+ } catch (IOException replyException) {
+ log.error(replyException.getMessage(), e);
+ }
+ }
+ }
+
+ protected abstract JsonElement doGet(HttpServletRequest req);
+
+ @Override
+ protected final void doPost(HttpServletRequest req, HttpServletResponse resp) {
+ try {
+ reply(resp, doPost(req));
+ } catch (IOException e) {
+ try {
+ replyError(resp, e.getMessage(), HttpServletResponse.SC_BAD_REQUEST);
+ } catch (IOException replyException) {
+ log.error(replyException.getMessage(), e);
+ }
+ }
+ }
+
+ protected abstract JsonElement doPost(HttpServletRequest req) throws IOException;
+
+ private void reply(HttpServletResponse response, JsonElement resJson) throws IOException {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("utf-8");
+ response.setStatus(HttpServletResponse.SC_OK);
+
+ PrintWriter out = response.getWriter();
+ if (nonNull(resJson)) {
+ out.print(resJson);
+ }
+ out.flush();
+ out.close();
+ }
+
+ private void replyError(HttpServletResponse response, String errorMessage, int status) throws IOException {
+ response.setContentType("application/json");
+ response.setCharacterEncoding("utf-8");
+ response.setStatus(status);
+ response.setHeader("error-message", errorMessage);
+
+ PrintWriter out = response.getWriter();
+ out.flush();
+ out.close();
+ }
+
+ public String getJsonBody(HttpServletRequest req) throws IOException {
+ StringBuffer stringBuffer = new StringBuffer();
+ String line = null;
+ BufferedReader reader = req.getReader();
+ while ((line = reader.readLine()) != null) {
+ stringBuffer.append(line);
+ }
+ return stringBuffer.toString();
+ }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockInstanceRegisterServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockInstanceRegisterServletHandler.java
new file mode 100644
index 0000000..52f0ec4
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockInstanceRegisterServletHandler.java
@@ -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.
+ *
+ */
+
+package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.skywalking.apm.network.register.v2.ServiceInstance;
+import org.apache.skywalking.apm.network.register.v2.ServiceInstances;
+import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.service.Sequences;
+import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
+
+public class MockInstanceRegisterServletHandler extends JettyJsonHandler {
+ private static final String KEY = "key";
+ private static final String VALUE = "value";
+
+ public static final String SERVLET_PATH = "/v2/instance/register";
+
+ @Override
+ protected JsonElement doGet(final HttpServletRequest req) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected JsonElement doPost(final HttpServletRequest req) throws IOException {
+ JsonArray response = new JsonArray();
+ ServiceInstances.Builder builder = ServiceInstances.newBuilder();
+ ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
+
+ for (ServiceInstance serviceInstance : builder.build().getInstancesList()) {
+ int instanceId = Sequences.INSTANCE_SEQUENCE.incrementAndGet();
+ ValidateData.INSTANCE.getRegistryItem()
+ .registryInstance(
+ new RegistryItem.Instance(serviceInstance.getServiceId(), instanceId));
+
+ JsonObject register = new JsonObject();
+ register.addProperty(KEY, serviceInstance.getInstanceUUID());
+ register.addProperty(VALUE, instanceId);
+
+ response.add(register);
+ }
+ return response;
+ }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceInstancePingServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceInstancePingServletHandler.java
new file mode 100644
index 0000000..631e49b
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceInstancePingServletHandler.java
@@ -0,0 +1,49 @@
+/*
+ * 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.plugin.test.mockcollector.rest.service;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.skywalking.apm.network.register.v2.ServiceInstancePingPkg;
+import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
+
+public class MockServiceInstancePingServletHandler extends JettyJsonHandler {
+ public static final String SERVLET_PATH = "/v2/instance/heartbeat";
+
+ @Override
+ protected JsonElement doGet(final HttpServletRequest req) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected JsonElement doPost(final HttpServletRequest req) throws IOException {
+
+ ServiceInstancePingPkg.Builder builder = ServiceInstancePingPkg.newBuilder();
+ ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
+ ServiceInstancePingPkg instancePingPkg = builder.build();
+
+ ValidateData.INSTANCE.getRegistryItem()
+ .registryHeartBeat(new RegistryItem.HeartBeat(instancePingPkg.getServiceInstanceId()));
+ return new JsonArray();
+ }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceRegisterServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceRegisterServletHandler.java
new file mode 100644
index 0000000..70b9ba4
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceRegisterServletHandler.java
@@ -0,0 +1,73 @@
+/*
+ * 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.plugin.test.mockcollector.rest.service;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import java.io.IOException;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.skywalking.apm.network.register.v2.Service;
+import org.apache.skywalking.apm.network.register.v2.Services;
+import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.service.Sequences;
+import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
+
+public class MockServiceRegisterServletHandler extends JettyJsonHandler {
+ public static final String SERVLET_PATH = "/v2/service/register";
+ private static final String KEY = "key";
+ private static final String VALUE = "value";
+
+ @Override
+ protected JsonElement doGet(final HttpServletRequest req) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected JsonElement doPost(final HttpServletRequest req) throws IOException {
+ JsonArray response = new JsonArray();
+
+ Services.Builder servicesBuilder = Services.newBuilder();
+ ProtoBufJsonUtils.fromJSON(getJsonBody(req), servicesBuilder);
+ List<Service> serviceList = servicesBuilder.build().getServicesList();
+
+ for (Service service : serviceList) {
+ String serviceName = service.getServiceName();
+ if (serviceName.startsWith("localhost") || serviceName.startsWith("127.0.0.1")
+ || serviceName.contains(":") || serviceName.contains("/")) {
+ return response;
+ }
+
+ Integer serviceId = Sequences.SERVICE_MAPPING.get(serviceName);
+ if (serviceId == null) {
+ serviceId = Sequences.ENDPOINT_SEQUENCE.incrementAndGet();
+ Sequences.SERVICE_MAPPING.put(serviceName, serviceId);
+ ValidateData.INSTANCE.getRegistryItem()
+ .registryService(new RegistryItem.Service(serviceName, serviceId));
+ }
+ JsonObject mapping = new JsonObject();
+ mapping.addProperty(KEY, serviceName);
+ mapping.addProperty(VALUE, serviceId);
+ response.add(mapping);
+ }
+ return response;
+ }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockTraceSegmentCollectServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockTraceSegmentCollectServletHandler.java
new file mode 100644
index 0000000..553aca8
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockTraceSegmentCollectServletHandler.java
@@ -0,0 +1,93 @@
+/*
+ * 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.plugin.test.mockcollector.rest.service;
+
+import com.google.common.io.CharStreams;
+import com.google.gson.JsonElement;
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.skywalking.apm.network.common.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.UpstreamSegment;
+import org.apache.skywalking.apm.network.language.agent.v2.Log;
+import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v2.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
+import org.apache.skywalking.plugin.test.mockcollector.entity.Segment;
+import org.apache.skywalking.plugin.test.mockcollector.entity.Span;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
+
+public class MockTraceSegmentCollectServletHandler extends JettyJsonHandler {
+ public static final String SERVLET_PATH = "/v2/segments";
+
+ @Override
+ protected JsonElement doGet(final HttpServletRequest req) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected JsonElement doPost(final HttpServletRequest req) throws IOException {
+ String json = CharStreams.toString(req.getReader());
+
+ SegmentObject.Builder _builder = SegmentObject.newBuilder();
+ ProtoBufJsonUtils.fromJSON(json, _builder);
+
+ UpstreamSegment.Builder upstreamSegmentBuilder = UpstreamSegment.newBuilder();
+ UpstreamSegment value = upstreamSegmentBuilder.setSegment(_builder.build().toByteString()).build();
+
+ SegmentObject traceSegmentObject = SegmentObject.parseFrom(value.getSegment());
+ Segment.SegmentBuilder segmentBuilder = Segment.builder()
+ .segmentId(traceSegmentObject.getTraceSegmentId());
+
+ for (SpanObjectV2 spanObject : traceSegmentObject.getSpansList()) {
+ Span.SpanBuilder spanBuilder = Span.builder()
+ .operationName(spanObject.getOperationName())
+ .parentSpanId(spanObject.getParentSpanId())
+ .spanId(spanObject.getSpanId())
+ .componentId(spanObject.getComponentId())
+ .componentName(spanObject.getComponent())
+ .spanLayer(spanObject.getSpanLayer().toString())
+ .endTime(spanObject.getEndTime())
+ .isError(spanObject.getIsError())
+ .startTime(spanObject.getStartTime())
+ .spanType(spanObject.getSpanType().toString())
+ .peer(spanObject.getPeer())
+ .peerId(spanObject.getPeerId())
+ .operationId(spanObject.getOperationNameId());
+
+ for (Log logMessage : spanObject.getLogsList()) {
+ spanBuilder.logEvent(logMessage.getDataList());
+ }
+
+ for (KeyStringValuePair tags : spanObject.getTagsList()) {
+ spanBuilder.tags(tags.getKey(), tags.getValue());
+ }
+
+ for (SegmentReference ref : spanObject.getRefsList()) {
+ spanBuilder.ref(new Span.SegmentRef(ref));
+ }
+
+ segmentBuilder.addSpan(spanBuilder);
+ }
+
+ ValidateData.INSTANCE.getSegmentItem()
+ .addSegmentItem(traceSegmentObject.getServiceId(), segmentBuilder.build());
+ return null;
+ }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
index 1bb115a..f1d8f91 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
@@ -18,8 +18,7 @@
package org.apache.skywalking.plugin.test.mockcollector.service;
import io.grpc.stub.StreamObserver;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.KeyIntValuePair;
import org.apache.skywalking.apm.network.register.v2.Endpoint;
import org.apache.skywalking.apm.network.register.v2.EndpointMapping;
@@ -35,10 +34,9 @@ import org.apache.skywalking.apm.network.register.v2.Services;
import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+@Slf4j
public class MockRegisterService extends RegisterGrpc.RegisterImplBase {
- private Logger logger = LogManager.getLogger(MockTraceSegmentService.class);
-
@Override
public void doEndpointRegister(Endpoints request, StreamObserver<EndpointMapping> responseObserver) {
for (Endpoint endpoint : request.getEndpointsList()) {
@@ -86,9 +84,9 @@ public class MockRegisterService extends RegisterGrpc.RegisterImplBase {
@Override
public void doServiceRegister(Services request, StreamObserver<ServiceRegisterMapping> responseObserver) {
- logger.debug("receive service register.");
+ log.debug("receive service register.");
if (request.getServicesCount() <= 0) {
- logger.warn("The service count is empty. return the default service register mapping");
+ log.warn("The service count is empty. return the default service register mapping");
responseObserver.onNext(ServiceRegisterMapping.getDefaultInstance());
responseObserver.onCompleted();
return;
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockTraceSegmentService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockTraceSegmentService.java
index e0a48a3..f1d6388 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockTraceSegmentService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockTraceSegmentService.java
@@ -19,8 +19,7 @@ package org.apache.skywalking.plugin.test.mockcollector.service;
import com.google.protobuf.InvalidProtocolBufferException;
import io.grpc.stub.StreamObserver;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.apm.network.common.Commands;
import org.apache.skywalking.apm.network.common.KeyStringValuePair;
import org.apache.skywalking.apm.network.language.agent.UpstreamSegment;
@@ -33,10 +32,9 @@ import org.apache.skywalking.plugin.test.mockcollector.entity.Segment;
import org.apache.skywalking.plugin.test.mockcollector.entity.Span;
import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+@Slf4j
public class MockTraceSegmentService extends TraceSegmentReportServiceGrpc.TraceSegmentReportServiceImplBase {
- private Logger logger = LogManager.getLogger(MockTraceSegmentService.class);
-
@Override
public StreamObserver<UpstreamSegment> collect(StreamObserver<Commands> responseObserver) {
return new StreamObserver<UpstreamSegment>() {
@@ -46,7 +44,7 @@ public class MockTraceSegmentService extends TraceSegmentReportServiceGrpc.Trace
SegmentObject traceSegmentObject = SegmentObject.parseFrom(value.getSegment());
Segment.SegmentBuilder segmentBuilder = Segment.builder()
.segmentId(traceSegmentObject.getTraceSegmentId());
- logger.debug(
+ log.debug(
"Receive segment: ServiceID[{}], TraceSegmentId[{}]", traceSegmentObject.getServiceId(),
traceSegmentObject
.getTraceSegmentId()
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/ProtoBufJsonUtils.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/ProtoBufJsonUtils.java
new file mode 100644
index 0000000..5120d33
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/ProtoBufJsonUtils.java
@@ -0,0 +1,46 @@
+/*
+ * 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.plugin.test.mockcollector.util;
+
+import com.google.protobuf.Message;
+import com.google.protobuf.util.JsonFormat;
+import java.io.IOException;
+
+public class ProtoBufJsonUtils {
+
+ public static String toJSON(Message sourceMessage) throws IOException {
+ return JsonFormat.printer().print(sourceMessage);
+ }
+
+ /**
+ * Extract data from a JSON String and use them to construct a Protocol Buffers Message.
+ *
+ * @param json A JSON data string to parse
+ * @param targetBuilder A Message builder to use to construct the resulting Message
+ * @throws com.google.protobuf.InvalidProtocolBufferException Thrown in case of invalid Message data
+ */
+ public static void fromJSON(String json, Message.Builder targetBuilder) throws IOException {
+ JsonFormat.parser()
+ .usingTypeRegistry(JsonFormat.TypeRegistry.newBuilder()
+ .add(targetBuilder.getDescriptorForType())
+ .build())
+ .ignoringUnknownFields()
+ .merge(json, targetBuilder);
+ }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6898c1e..aebbcb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,11 +45,12 @@
<junit.version>4.11</junit.version>
<guava.version>20.0</guava.version>
- <gson.version>2.8.5</gson.version>
+ <gson.version>2.8.6</gson.version>
+ <grpc.version>1.26.0</grpc.version>
<lombok.version>1.18.10</lombok.version>
<snakeyaml.version>1.24</snakeyaml.version>
- <log4j-core.version>2.8.1</log4j-core.version>
- <grpc.version>1.4.0</grpc.version>
+ <slf4j.version>1.7.25</slf4j.version>
+ <log4j.version>2.9.0</log4j.version>
<netty.version>4.1.12.Final</netty.version>
<jetty.version>9.4.2.v20170220</jetty.version>
@@ -58,25 +59,41 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${slf4j.version}</version>
</dependency>
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
- <version>${guava.version}</version>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
- <version>${log4j-core.version}</version>
+ <version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
- <version>${log4j-core.version}</version>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ <version>${log4j.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
@@ -94,12 +111,6 @@
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
-
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- <version>${snakeyaml.version}</version>
- </dependency>
</dependencies>
</dependencyManagement>
@@ -110,8 +121,12 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava</artifactId>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>log4j-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
@@ -119,7 +134,17 @@
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-api</artifactId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/Main.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/Main.java
index 423c45e..56f3e24 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/Main.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/Main.java
@@ -18,14 +18,13 @@
package org.apache.skywalking.plugin.test.agent.tool;
import java.io.File;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.DataAssert;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.Data;
import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
+@Slf4j
public class Main {
- private static Logger logger = LogManager.getLogger(Main.class);
public static void main(String[] args) {
System.exit(verify() ? 0 : 1);
@@ -35,11 +34,11 @@ public class Main {
File casePath = new File(ConfigHelper.testCaseBaseDir());
try {
if (!casePath.exists()) {
- logger.error("test case dir is not exists or is not directory");
+ log.error("test case dir is not exists or is not directory");
return false;
}
- logger.info("start to assert data of test case[{}]", ConfigHelper.caseName());
+ log.info("start to assert data of test case[{}]", ConfigHelper.caseName());
File actualData = new File(casePath, "actualData.yaml");
File expectedData = new File(casePath, "expectedData.yaml");
@@ -51,17 +50,17 @@ public class Main {
);
return true;
} catch (AssertFailedException e) {
- logger.error("\nassert failed.\n{}\n", e.getCauseMessage());
+ log.error("\nassert failed.\n{}\n", e.getCauseMessage());
}
} else {
- logger.error(
+ log.error(
"assert failed. because actual data {} and expected data {}",
actualData.exists() ? "founded" : "not founded", expectedData
.exists() ? "founded" : "not founded"
);
}
} catch (Exception e) {
- logger.error("assert test case {} failed.", ConfigHelper.caseName(), e);
+ log.error("assert test case {} failed.", ConfigHelper.caseName(), e);
}
return false;
}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
index 59a4124..4074817 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
@@ -18,18 +18,17 @@
package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
import com.google.gson.GsonBuilder;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.Data;
+@Slf4j
public class DataAssert {
- private static Logger logger = LogManager.getLogger(DataAssert.class);
public static void assertEquals(Data excepted, Data actual) {
- logger.info("excepted data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(excepted));
- logger.info("actual data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(actual));
+ log.info("excepted data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(excepted));
+ log.info("actual data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(actual));
RegistryItemsAssert.assertEquals(excepted.registryItems(), actual.registryItems());
SegmentItemsAssert.assertEquals(excepted.segmentItems(), actual.segmentItems());
- logger.info("{} assert successful.", "segment items");
+ log.info("{} assert successful.", "segment items");
}
}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java
index 1ff9d62..6ffb950 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java
@@ -17,19 +17,18 @@
package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryItems;
+@Slf4j
public class RegistryItemsAssert {
- private static Logger logger = LogManager.getLogger(RegistryItemsAssert.class);
public static void assertEquals(RegistryItems excepted, RegistryItems actual) {
ServiceAssert.assertEquals(excepted.services(), actual.services());
- logger.info("{} assert successful.", "registry services");
+ log.info("{} assert successful.", "registry services");
InstanceAssert.assertEquals(excepted.instances(), actual.instances());
- logger.info("{} assert successful.", "registry instances");
+ log.info("{} assert successful.", "registry instances");
OperationNameAssert.assertEquals(excepted.operationNames(), actual.operationNames());
- logger.info("{} assert successful.", "registry operation name");
+ log.info("{} assert successful.", "registry operation name");
}
}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentItemsAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentItemsAssert.java
index 47227ea..4abbcbb 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentItemsAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentItemsAssert.java
@@ -18,8 +18,7 @@
package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
import java.util.List;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
+import lombok.extern.slf4j.Slf4j;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.ActualSegmentItemEmptyException;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.SegmentItemNotFoundException;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.SegmentSizeNotEqualsException;
@@ -29,12 +28,12 @@ import org.apache.skywalking.plugin.test.agent.tool.validator.entity.SegmentItem
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.SegmentRef;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.Span;
+@Slf4j
public class SegmentItemsAssert {
- private static Logger logger = LogManager.getLogger(SegmentItemsAssert.class);
public static void assertEquals(List<SegmentItem> expected, List<SegmentItem> actual) {
if (expected == null) {
- logger.info("ignore segment items. because expected segment item is null.");
+ log.info("ignore segment items. because expected segment item is null.");
return;
}