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/06/12 13:54:21 UTC

[skywalking-python] branch test/refs created (now 8d1008a)

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

kezhenxu94 pushed a change to branch test/refs
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git.


      at 8d1008a  Add verifications of `refs` in plugin tests

This branch includes the following new commits:

     new 8d1008a  Add verifications of `refs` in plugin tests

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking-python] 01/01: Add verifications of `refs` in plugin tests

Posted by ke...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch test/refs
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git

commit 8d1008a825de15f1747a62d798467b5a9c3b9377
Author: kezhenxu94 <ke...@163.com>
AuthorDate: Fri Jun 12 21:54:08 2020 +0800

    Add verifications of `refs` in plugin tests
---
 docs/PluginTest.md                                 |  6 +--
 tests/plugin/{http => sw_http}/__init__.py         |  0
 tests/plugin/{http => sw_http}/docker-compose.yml  | 26 +++++++++-
 .../{sw_requests => sw_http}/expected.data.yml     | 55 +++++++++++++++++-----
 .../services/__init__.py}                          | 21 ---------
 .../provider.py => sw_http/services/consumer.py}   | 19 +++++---
 .../plugin/{http => sw_http/services}/provider.py  |  0
 tests/plugin/{http => sw_http}/test_http.py        |  2 +-
 tests/plugin/sw_requests/docker-compose.yml        | 26 +++++++++-
 tests/plugin/sw_requests/expected.data.yml         | 55 +++++++++++++++++-----
 .../{http => sw_requests/services}/__init__.py     |  1 -
 .../{provider.py => services/consumer.py}          | 17 +++----
 .../{http => sw_requests/services}/provider.py     |  0
 tests/plugin/sw_requests/test_request.py           |  2 +-
 14 files changed, 160 insertions(+), 70 deletions(-)

diff --git a/docs/PluginTest.md b/docs/PluginTest.md
index a10ea80..f267157 100644
--- a/docs/PluginTest.md
+++ b/docs/PluginTest.md
@@ -27,6 +27,6 @@ they match. This can be done through the `/dataValidate` of the mock collector,
 
 If we want to test the plugin for the built-in library `http`, we will:
 
-1. Build a tested service, which sets up an http server by `http` library, and exposes an http endpoint to be triggered in the test codes, say `/trigger`, take [this provider service](../tests/plugin/http/provider.py) as example.
-1. Compose a `docker-compose.yml` file, orchestrating the service built in step 1 and the mock collector, take [this `docker-compose.yml`](../tests/plugin/http/docker-compose.yml) as example.
-1. Write test codes to trigger the endpoint int step 1, and send the expected data file to the mock collector to verify, take [this test](../tests/plugin/http/test_request.py) as example.
+1. Build a tested service, which sets up an http server by `http` library, and exposes an http endpoint to be triggered in the test codes, say `/trigger`, take [this provider service](../tests/plugin/sw_http/services/provider.py) as example.
+1. Compose a `docker-compose.yml` file, orchestrating the service built in step 1 and the mock collector, take [this `docker-compose.yml`](../tests/plugin/sw_http/docker-compose.yml) as example.
+1. Write test codes to trigger the endpoint int step 1, and send the expected data file to the mock collector to verify, take [this test](../tests/plugin/sw_http/test_http.py) as example.
diff --git a/tests/plugin/http/__init__.py b/tests/plugin/sw_http/__init__.py
similarity index 100%
copy from tests/plugin/http/__init__.py
copy to tests/plugin/sw_http/__init__.py
diff --git a/tests/plugin/http/docker-compose.yml b/tests/plugin/sw_http/docker-compose.yml
similarity index 69%
rename from tests/plugin/http/docker-compose.yml
rename to tests/plugin/sw_http/docker-compose.yml
index c43fee3..3f0d305 100644
--- a/tests/plugin/http/docker-compose.yml
+++ b/tests/plugin/sw_http/docker-compose.yml
@@ -42,13 +42,37 @@ services:
     ports:
       - 9091:9091
     volumes:
-      - ./provider.py:/app/provider.py
+      - ./services/provider.py:/app/provider.py
     environment:
       SW_AGENT_COLLECTOR_BACKEND_SERVICES: collector:19876
     command: ['python3', '/app/provider.py']
     depends_on:
       collector:
         condition: service_healthy
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9091"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  consumer:
+    build:
+      context: ../../../
+      dockerfile: tests/plugin/docker/Dockerfile.agent
+    networks:
+      - beyond
+    ports:
+      - 9090:9090
+    volumes:
+      - ./services/consumer.py:/app/consumer.py
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: collector:19876
+    command: ['python3', '/app/consumer.py']
+    depends_on:
+      collector:
+        condition: service_healthy
+      provider:
+        condition: service_healthy
 
 networks:
   beyond:
diff --git a/tests/plugin/sw_requests/expected.data.yml b/tests/plugin/sw_http/expected.data.yml
similarity index 52%
copy from tests/plugin/sw_requests/expected.data.yml
copy to tests/plugin/sw_http/expected.data.yml
index 4cfacd5..70a6195 100644
--- a/tests/plugin/sw_requests/expected.data.yml
+++ b/tests/plugin/sw_http/expected.data.yml
@@ -3,13 +3,13 @@
 # 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 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,
+# 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.
@@ -21,33 +21,64 @@ segmentItems:
     segments:
       - segmentId: not null
         spans:
-          - operationName: /apache/skywalking
+          - operationName: /users
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
+            refs:
+              - parentEndpoint: /
+                networkAddress: provider:9091
+                refType: CrossProcess
+                parentSpanId: 1
+                parentTraceSegmentId: not null
+                parentServiceInstance: not null
+                parentService: consumer
+                traceId: not null
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 7000
+            spanType: Entry
+            peer: not null
+            skipAnalysis: false
+  - serviceName: consumer
+    segmentSize: 1
+    segments:
+      - segmentId: not null
+        spans:
+          - operationName: /users
             operationId: 0
             parentSpanId: 0
             spanId: 1
             spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
+              - key: url
+                value: http://provider:9091/users
+              - key: status.code
+                value: '200'
             startTime: gt 0
             endTime: gt 0
             componentId: 7000
-            isError: false
             spanType: Exit
-            peer: not null
+            peer: provider:9091
             skipAnalysis: false
-            tags:
-              - {key: http.method, value: GET}
-              - {key: url, value: https://github.com/apache/skywalking}
-              - {key: status.code, value: '200'}
           - operationName: /
             operationId: 0
             parentSpanId: -1
             spanId: 0
             spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
             startTime: gt 0
             endTime: gt 0
             componentId: 7000
-            isError: false
             spanType: Entry
             peer: not null
             skipAnalysis: false
-            tags:
-              - {key: http.method, value: POST}
+
diff --git a/tests/plugin/http/expected.data.yml b/tests/plugin/sw_http/services/__init__.py
similarity index 60%
rename from tests/plugin/http/expected.data.yml
rename to tests/plugin/sw_http/services/__init__.py
index 644f42b..b1312a0 100644
--- a/tests/plugin/http/expected.data.yml
+++ b/tests/plugin/sw_http/services/__init__.py
@@ -14,24 +14,3 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-
-segmentItems:
-  - serviceName: provider
-    segmentSize: 1
-    segments:
-      - segmentId: not null
-        spans:
-          - operationName: /
-            operationId: 0
-            parentSpanId: -1
-            spanId: 0
-            spanLayer: Http
-            startTime: gt 0
-            endTime: gt 0
-            componentId: 7000
-            isError: false
-            spanType: Entry
-            peer: not null
-            skipAnalysis: false
-            tags:
-              - {key: http.method, value: POST}
diff --git a/tests/plugin/http/provider.py b/tests/plugin/sw_http/services/consumer.py
similarity index 70%
copy from tests/plugin/http/provider.py
copy to tests/plugin/sw_http/services/consumer.py
index 7af884a..43f60bd 100644
--- a/tests/plugin/http/provider.py
+++ b/tests/plugin/sw_http/services/consumer.py
@@ -15,12 +15,12 @@
 # limitations under the License.
 #
 
-import time
+from urllib import request
 
 from skywalking import agent, config
 
 if __name__ == '__main__':
-    config.service_name = 'provider'
+    config.service_name = 'consumer'
     config.logging_level = 'DEBUG'
     agent.start()
 
@@ -28,16 +28,21 @@ if __name__ == '__main__':
     from http.server import BaseHTTPRequestHandler
 
     class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
-
         def do_POST(self):
-            time.sleep(0.5)
             self.send_response(200)
-            self.send_header('Content-Type', 'application/json')
+            self.send_header('Content-Type', 'application/json; charset=utf-8')
             self.end_headers()
-            self.wfile.write('{"song": "Despacito", "artist": "Luis Fonsi"}'.encode('ascii'))
 
-    PORT = 9091
+            data = '{"name": "whatever"}'.encode('utf8')
+            req = request.Request('http://provider:9091/users')
+            req.add_header('Content-Type', 'application/json; charset=utf-8')
+            req.add_header('Content-Length', str(len(data)))
+            with request.urlopen(req, data):
+                self.wfile.write(data)
+
+    PORT = 9090
     Handler = SimpleHTTPRequestHandler
 
     with socketserver.TCPServer(("", PORT), Handler) as httpd:
+        print("serving at port", PORT)
         httpd.serve_forever()
diff --git a/tests/plugin/http/provider.py b/tests/plugin/sw_http/services/provider.py
similarity index 100%
copy from tests/plugin/http/provider.py
copy to tests/plugin/sw_http/services/provider.py
diff --git a/tests/plugin/http/test_http.py b/tests/plugin/sw_http/test_http.py
similarity index 94%
rename from tests/plugin/http/test_http.py
rename to tests/plugin/sw_http/test_http.py
index 160879e..eacaa98 100644
--- a/tests/plugin/http/test_http.py
+++ b/tests/plugin/sw_http/test_http.py
@@ -35,7 +35,7 @@ class TestRequestPlugin(BasePluginTest):
         cls.compose.wait_for(cls.url(cls.collector_address()))
 
     def test_request_plugin(self):
-        print('traffic: ', requests.post(url=self.url(('provider', '9091'))))
+        print('traffic: ', requests.post(url=self.url(('consumer', '9090'))))
 
         time.sleep(3)
 
diff --git a/tests/plugin/sw_requests/docker-compose.yml b/tests/plugin/sw_requests/docker-compose.yml
index c43fee3..3f0d305 100644
--- a/tests/plugin/sw_requests/docker-compose.yml
+++ b/tests/plugin/sw_requests/docker-compose.yml
@@ -42,13 +42,37 @@ services:
     ports:
       - 9091:9091
     volumes:
-      - ./provider.py:/app/provider.py
+      - ./services/provider.py:/app/provider.py
     environment:
       SW_AGENT_COLLECTOR_BACKEND_SERVICES: collector:19876
     command: ['python3', '/app/provider.py']
     depends_on:
       collector:
         condition: service_healthy
+    healthcheck:
+      test: ["CMD", "bash", "-c", "cat < /dev/null > /dev/tcp/127.0.0.1/9091"]
+      interval: 5s
+      timeout: 60s
+      retries: 120
+
+  consumer:
+    build:
+      context: ../../../
+      dockerfile: tests/plugin/docker/Dockerfile.agent
+    networks:
+      - beyond
+    ports:
+      - 9090:9090
+    volumes:
+      - ./services/consumer.py:/app/consumer.py
+    environment:
+      SW_AGENT_COLLECTOR_BACKEND_SERVICES: collector:19876
+    command: ['python3', '/app/consumer.py']
+    depends_on:
+      collector:
+        condition: service_healthy
+      provider:
+        condition: service_healthy
 
 networks:
   beyond:
diff --git a/tests/plugin/sw_requests/expected.data.yml b/tests/plugin/sw_requests/expected.data.yml
index 4cfacd5..70a6195 100644
--- a/tests/plugin/sw_requests/expected.data.yml
+++ b/tests/plugin/sw_requests/expected.data.yml
@@ -3,13 +3,13 @@
 # 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 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,
+# 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.
@@ -21,33 +21,64 @@ segmentItems:
     segments:
       - segmentId: not null
         spans:
-          - operationName: /apache/skywalking
+          - operationName: /users
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
+            refs:
+              - parentEndpoint: /
+                networkAddress: provider:9091
+                refType: CrossProcess
+                parentSpanId: 1
+                parentTraceSegmentId: not null
+                parentServiceInstance: not null
+                parentService: consumer
+                traceId: not null
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 7000
+            spanType: Entry
+            peer: not null
+            skipAnalysis: false
+  - serviceName: consumer
+    segmentSize: 1
+    segments:
+      - segmentId: not null
+        spans:
+          - operationName: /users
             operationId: 0
             parentSpanId: 0
             spanId: 1
             spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
+              - key: url
+                value: http://provider:9091/users
+              - key: status.code
+                value: '200'
             startTime: gt 0
             endTime: gt 0
             componentId: 7000
-            isError: false
             spanType: Exit
-            peer: not null
+            peer: provider:9091
             skipAnalysis: false
-            tags:
-              - {key: http.method, value: GET}
-              - {key: url, value: https://github.com/apache/skywalking}
-              - {key: status.code, value: '200'}
           - operationName: /
             operationId: 0
             parentSpanId: -1
             spanId: 0
             spanLayer: Http
+            tags:
+              - key: http.method
+                value: POST
             startTime: gt 0
             endTime: gt 0
             componentId: 7000
-            isError: false
             spanType: Entry
             peer: not null
             skipAnalysis: false
-            tags:
-              - {key: http.method, value: POST}
+
diff --git a/tests/plugin/http/__init__.py b/tests/plugin/sw_requests/services/__init__.py
similarity index 99%
rename from tests/plugin/http/__init__.py
rename to tests/plugin/sw_requests/services/__init__.py
index 6222972..b1312a0 100644
--- a/tests/plugin/http/__init__.py
+++ b/tests/plugin/sw_requests/services/__init__.py
@@ -14,4 +14,3 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-
diff --git a/tests/plugin/sw_requests/provider.py b/tests/plugin/sw_requests/services/consumer.py
similarity index 80%
rename from tests/plugin/sw_requests/provider.py
rename to tests/plugin/sw_requests/services/consumer.py
index 36db31c..ff7ec9b 100644
--- a/tests/plugin/sw_requests/provider.py
+++ b/tests/plugin/sw_requests/services/consumer.py
@@ -15,34 +15,31 @@
 # limitations under the License.
 #
 
-import time
-
 import requests
 
 from skywalking import agent, config
 
 if __name__ == '__main__':
-    config.service_name = 'provider'
+    config.service_name = 'consumer'
     config.logging_level = 'DEBUG'
     agent.start()
 
     import socketserver
     from http.server import BaseHTTPRequestHandler
 
-    class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
 
+    class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
         def do_POST(self):
-            time.sleep(0.5)
-            requests.get("https://github.com/apache/skywalking")
             self.send_response(200)
-            self.send_header('Content-Type', 'application/json')
+            self.send_header('Content-Type', 'application/json; charset=utf-8')
             self.end_headers()
-            self.wfile.write('{"song": "Despacito", "artist": "Luis Fonsi"}'.encode('ascii'))
-
 
+            res = requests.post("http://provider:9091/users")
+            self.wfile.write(str(res.json()).encode('utf8'))
 
-    PORT = 9091
+    PORT = 9090
     Handler = SimpleHTTPRequestHandler
 
     with socketserver.TCPServer(("", PORT), Handler) as httpd:
+        print("serving at port", PORT)
         httpd.serve_forever()
diff --git a/tests/plugin/http/provider.py b/tests/plugin/sw_requests/services/provider.py
similarity index 100%
rename from tests/plugin/http/provider.py
rename to tests/plugin/sw_requests/services/provider.py
diff --git a/tests/plugin/sw_requests/test_request.py b/tests/plugin/sw_requests/test_request.py
index 160879e..eacaa98 100644
--- a/tests/plugin/sw_requests/test_request.py
+++ b/tests/plugin/sw_requests/test_request.py
@@ -35,7 +35,7 @@ class TestRequestPlugin(BasePluginTest):
         cls.compose.wait_for(cls.url(cls.collector_address()))
 
     def test_request_plugin(self):
-        print('traffic: ', requests.post(url=self.url(('provider', '9091'))))
+        print('traffic: ', requests.post(url=self.url(('consumer', '9090'))))
 
         time.sleep(3)