You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by da...@apache.org on 2020/03/16 02:02:48 UTC

[skywalking-agent-test-tool] branch master updated: Provide data validation API in Mock Collector (#9)

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

daming 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 55c13b3  Provide data validation API in Mock Collector (#9)
55c13b3 is described below

commit 55c13b307c2d9fa2c497893a2a5e4a2651fe983b
Author: Daming <zt...@foxmail.com>
AuthorDate: Mon Mar 16 10:02:39 2020 +0800

    Provide data validation API in Mock Collector (#9)
    
    * Provide data validation API in Mock Collector
    
    * fix conflict
---
 README.md                                          | 12 ++--
 mock-collector/pom.xml                             |  5 ++
 .../skywalking/plugin/test/mockcollector/Main.java | 28 ++++++---
 .../MockCLRMetricReportService.java                |  2 +-
 .../{service => mock}/MockInstancePingService.java |  2 +-
 .../MockJVMMetricReportService.java                |  2 +-
 .../{service => mock}/MockRegisterService.java     |  2 +-
 .../{service => mock}/MockTraceSegmentService.java |  2 +-
 .../mockcollector/{service => mock}/Sequences.java |  2 +-
 .../service => mock/rest}/JettyJsonHandler.java    |  2 +-
 .../rest}/MockInstanceRegisterServletHandler.java  |  4 +-
 .../MockServiceInstancePingServletHandler.java     |  2 +-
 .../rest}/MockServiceRegisterServletHandler.java   |  4 +-
 .../MockTraceSegmentCollectServletHandler.java     |  2 +-
 .../mockcollector/service/DataValidateService.java | 68 ++++++++++++++++++++++
 pom.xml                                            |  2 +-
 validator/pom.xml                                  |  2 +-
 17 files changed, 116 insertions(+), 27 deletions(-)

diff --git a/README.md b/README.md
index ab4b9dc..c64380b 100644
--- a/README.md
+++ b/README.md
@@ -17,12 +17,12 @@ Eventually, validate the file downloaded from `mock collector` by using `SkyWalk
 
 ## Apache SkyWalking Mock Collector
 
-- requirement:
+### Requirement
 1. JDK 1.8+
 2. Maven 
 
 
-- How to install
+### How to install
 
 The `mock collector` is written by pure-`Java`. It compiles and packages through `Maven`.
 
@@ -34,13 +34,13 @@ cd ./mock-collector
 bash ./bin/collector-startup.sh
 ```
 
-after above steps, we can check whether the `mock collector` is available through HTTP API. To visit `http://localhost:12800/status` and get the response with `success` in the body of content.
+after above steps, we can check whether the `mock collector` is available through HTTP API. To visit `http://localhost:12800/healthCheck` and get the response with `success` in the body of content.
 
 Finally, To visit follow URL to download the data as `yaml` file, which can be used by `SkyWalking Validator Tool`.
 
 http://localhost:12800/receiveData
 
-- How to config on agent
+### How to config on agent
 
 We can modify the configurations of agent in `./config/agent.conf`, as follows
 
@@ -56,6 +56,10 @@ or specify the jvm arguments like:
 -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:19876
 ```
 
+### Data validation in Mock Collector
+
+Currently, we integration SkyWalking Validator Tool in Mock Collector. We can post the `expectedData.yaml` to `/dataValidate` after agent reported.
+
 ## Apache SkyWalking Validator Tool
 
 `Validator Tool` is a data validating tool. It is responsible for validating the `expected data` with `actual data`.
diff --git a/mock-collector/pom.xml b/mock-collector/pom.xml
index 45a16d1..2c42fbe 100644
--- a/mock-collector/pom.xml
+++ b/mock-collector/pom.xml
@@ -45,6 +45,11 @@
 
     <dependencies>
         <dependency>
+            <groupId>org.apache.skywalking.plugin</groupId>
+            <artifactId>validator</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.google.protobuf</groupId>
             <artifactId>protobuf-java-util</artifactId>
             <version>${protobuf-java-util.version}</version>
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 a3ba674..0b9a5d1 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
@@ -25,17 +25,19 @@ import javax.servlet.ServletException;
 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.mock.rest.MockInstanceRegisterServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockServiceInstancePingServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockServiceRegisterServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockTraceSegmentCollectServletHandler;
 import org.apache.skywalking.plugin.test.mockcollector.service.ClearReceiveDataService;
+import org.apache.skywalking.plugin.test.mockcollector.service.DataValidateService;
 import org.apache.skywalking.plugin.test.mockcollector.service.GrpcAddressHttpService;
-import org.apache.skywalking.plugin.test.mockcollector.service.MockInstancePingService;
-import org.apache.skywalking.plugin.test.mockcollector.service.MockJVMMetricReportService;
-import org.apache.skywalking.plugin.test.mockcollector.service.MockRegisterService;
-import org.apache.skywalking.plugin.test.mockcollector.service.MockTraceSegmentService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockInstancePingService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockJVMMetricReportService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockRegisterService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockTraceSegmentService;
 import org.apache.skywalking.plugin.test.mockcollector.service.ReceiveDataService;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -62,6 +64,15 @@ public class Main {
             @Override
             protected void doGet(HttpServletRequest req,
                                  HttpServletResponse resp) throws ServletException, IOException {
+                resp.setStatus(200);
+                resp.getWriter().write("Success");
+                resp.getWriter().flush();
+            }
+        }), "/healthCheck");
+        servletContextHandler.addServlet(new ServletHolder(new HttpServlet() {
+            @Override
+            protected void doGet(HttpServletRequest req,
+                                 HttpServletResponse resp) throws ServletException, IOException {
                 if (ValidateData.INSTANCE.getRegistryItem().getServices().isEmpty()) {
                     resp.setStatus(500);
                     return;
@@ -72,6 +83,7 @@ public class Main {
             }
         }), "/status");
         servletContextHandler.addServlet(GrpcAddressHttpService.class, GrpcAddressHttpService.SERVLET_PATH);
+        servletContextHandler.addServlet(DataValidateService.class, DataValidateService.SERVLET_PATH);
         servletContextHandler.addServlet(ReceiveDataService.class, ReceiveDataService.SERVLET_PATH);
         servletContextHandler.addServlet(ClearReceiveDataService.class, ClearReceiveDataService.SERVLET_PATH);
 
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockCLRMetricReportService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
similarity index 95%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockCLRMetricReportService.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
index dc969b7..0a16d7f 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockCLRMetricReportService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
 import org.apache.skywalking.apm.network.common.Commands;
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockInstancePingService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java
similarity index 96%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockInstancePingService.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java
index a58a70a..82956c0 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockInstancePingService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
 import org.apache.skywalking.apm.network.common.Commands;
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockJVMMetricReportService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
similarity index 95%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockJVMMetricReportService.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
index 1b5d119..c7c3b09 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockJVMMetricReportService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
 import org.apache.skywalking.apm.network.common.Commands;
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/mock/MockRegisterService.java
similarity index 98%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockRegisterService.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockRegisterService.java
index f1d8f91..58bfbde 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/mock/MockRegisterService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
 import lombok.extern.slf4j.Slf4j;
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/mock/MockTraceSegmentService.java
similarity index 98%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/MockTraceSegmentService.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockTraceSegmentService.java
index f1d6388..5ea663e 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/mock/MockTraceSegmentService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import com.google.protobuf.InvalidProtocolBufferException;
 import io.grpc.stub.StreamObserver;
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/Sequences.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java
similarity index 94%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/Sequences.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java
index 415a52d..84859c0 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/Sequences.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
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/mock/rest/JettyJsonHandler.java
similarity index 97%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/JettyJsonHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/JettyJsonHandler.java
index ee8923f..5623a42 100644
--- 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/mock/rest/JettyJsonHandler.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
 import com.google.gson.JsonElement;
 import java.io.BufferedReader;
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/mock/rest/MockInstanceRegisterServletHandler.java
similarity index 94%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockInstanceRegisterServletHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockInstanceRegisterServletHandler.java
index 52f0ec4..66eb822 100644
--- 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/mock/rest/MockInstanceRegisterServletHandler.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -27,7 +27,7 @@ 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.mock.Sequences;
 import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
 
 public class MockInstanceRegisterServletHandler extends JettyJsonHandler {
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/mock/rest/MockServiceInstancePingServletHandler.java
similarity index 96%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceInstancePingServletHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java
index 631e49b..be1f216 100644
--- 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/mock/rest/MockServiceInstancePingServletHandler.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
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/mock/rest/MockServiceRegisterServletHandler.java
similarity index 95%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockServiceRegisterServletHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceRegisterServletHandler.java
index 70b9ba4..afd3020 100644
--- 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/mock/rest/MockServiceRegisterServletHandler.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
@@ -28,7 +28,7 @@ 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.mock.Sequences;
 import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
 
 public class MockServiceRegisterServletHandler extends JettyJsonHandler {
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/mock/rest/MockTraceSegmentCollectServletHandler.java
similarity index 98%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/rest/service/MockTraceSegmentCollectServletHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockTraceSegmentCollectServletHandler.java
index 553aca8..2f8be4c 100644
--- 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/mock/rest/MockTraceSegmentCollectServletHandler.java
@@ -16,7 +16,7 @@
  *
  */
 
-package org.apache.skywalking.plugin.test.mockcollector.rest.service;
+package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
 import com.google.common.io.CharStreams;
 import com.google.gson.JsonElement;
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/DataValidateService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/DataValidateService.java
new file mode 100644
index 0000000..7a1378e
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/DataValidateService.java
@@ -0,0 +1,68 @@
+/*
+ * 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.service;
+
+import com.google.common.base.Strings;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+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;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateDataSerializer;
+import org.yaml.snakeyaml.Yaml;
+
+public class DataValidateService extends HttpServlet {
+    private static final Gson gson = new GsonBuilder().registerTypeAdapter(
+        ValidateData.class, new ValidateDataSerializer()
+    ).create();
+
+    public static final String SERVLET_PATH = "/dataValidate";
+
+    @Override
+    protected void doPost(final HttpServletRequest req,
+                          final HttpServletResponse resp) throws ServletException, IOException {
+
+        final Yaml yaml = new Yaml();
+        final String dump = yaml.dump(yaml.load(gson.toJson(ValidateData.INSTANCE)));
+        ByteArrayInputStream actualData = new ByteArrayInputStream(dump.getBytes());
+
+        PrintWriter writer = resp.getWriter();
+        try {
+            DataAssert.assertEquals(
+                Data.Loader.loadData(req.getInputStream()),
+                Data.Loader.loadData(actualData));
+            writer.write("success");
+            resp.setStatus(200);
+        } catch (AssertFailedException exception) {
+            writer.write(Strings.nullToEmpty(exception.getMessage()));
+            writer.write("\n");
+            writer.write(dump);
+            resp.setStatus(500);
+        }
+        writer.flush();
+    }
+}
diff --git a/pom.xml b/pom.xml
index aebbcb7..295e8c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,8 +31,8 @@
     <packaging>pom</packaging>
 
     <modules>
-        <module>mock-collector</module>
         <module>validator</module>
+        <module>mock-collector</module>
     </modules>
 
     <properties>
diff --git a/validator/pom.xml b/validator/pom.xml
index 26c4001..382b9e1 100644
--- a/validator/pom.xml
+++ b/validator/pom.xml
@@ -33,7 +33,7 @@
     <url>http://maven.apache.org</url>
 
     <build>
-        <finalName>validator</finalName>
+        <finalName>skywalking-validator</finalName>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>