Skip to content

Commit c96eb92

Browse files
authored
e2e: simplify e2e test script (#133)
1 parent 90ac359 commit c96eb92

File tree

15 files changed

+249
-343
lines changed

15 files changed

+249
-343
lines changed

.github/workflows/main.yml

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
- name: Run clang-format
2020
run: find ./ -iname "*.h" -o -iname "*.cc" | xargs ./run-clang-format/run-clang-format.py
2121

22-
test:
22+
unit-test:
2323
runs-on: ubuntu-20.04
2424
steps:
2525
- run: |
@@ -56,38 +56,18 @@ jobs:
5656
- name: Run coverage test
5757
run: |
5858
./coverage.sh
59-
- name: upload coverage data to codecov
60-
uses: codecov/codecov-action@v2
61-
with:
62-
fail_ci_if_error: true
63-
files: ./coverage_report/coverage.dat
64-
name: codecov-cpp2sky
65-
verbose: true
6659
67-
e2e-cpp:
60+
e2e-test:
6861
runs-on: ubuntu-20.04
6962
steps:
7063
- uses: actions/checkout@v3
7164
- name: Prepare service container
7265
run: |
73-
docker compose -f test/e2e/docker/docker-compose.e2e.yml up -d
66+
docker compose -f test/e2e/docker/docker-compose.yml up -d
7467
- name: Run e2e
7568
run: |
69+
sleep 10
7670
pip3 install --upgrade pip
7771
pip3 install setuptools
7872
pip3 install -r test/e2e/requirements.txt
79-
python3 test/e2e/main.py --expected_file=test/e2e/data/expected.yaml --max_retry_times=3 --target_path=/ping
80-
81-
e2e-python:
82-
runs-on: ubuntu-20.04
83-
steps:
84-
- uses: actions/checkout@v3
85-
- name: Prepare service container
86-
run: |
87-
docker compose -f test/e2e/docker/docker-compose.e2e-python.yml up -d
88-
- name: Run e2e
89-
run: |
90-
pip3 install --upgrade pip
91-
pip3 install setuptools
92-
pip3 install -r test/e2e/requirements.txt
93-
python3 test/e2e/main.py --expected_file=test/e2e/data/expected-python.yaml --max_retry_times=3 --target_path=/ping2
73+
python3 test/e2e/main.py --expected_file=test/e2e/data/all_expected.yaml --max_retry_times=3

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# cpp2sky
22

33
![cpp2sky test](https://github.com/SkyAPM/cpp2sky/workflows/cpp2sky%20test/badge.svg)
4-
![codecov test](https://codecov.io/gh/SkyAPM/cpp2sky/branch/main/graph/badge.svg)
54

65
Distributed tracing and monitor SDK in CPP for Apache SkyWalking APM. This SDK is compatible with C++ 17, C++ 14, and C++ 11.
76

test/e2e/data/interm.py renamed to test/e2e/bridge.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
from skywalking.decorators import runnable
55

66
if __name__ == '__main__':
7-
config.init(collector='collector:19876', service='interm')
8-
config.logging_level = 'DEBUG'
9-
10-
config.flask_collect_http_params = True
7+
config.init()
118
agent.start()
129

1310
from flask import Flask, Response
@@ -16,7 +13,7 @@
1613

1714
@app.route("/users", methods=["POST", "GET"])
1815
def application():
19-
res = requests.get("http://consumer:8080/pong")
16+
res = requests.get("http://provider:8081/pong2")
2017
return Response(status=res.status_code)
2118

2219
PORT = 8082

test/e2e/consumer.cc

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
// Copyright 2020 SkyAPM
32

43
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -37,11 +36,50 @@ int main() {
3736
httplib::Server svr;
3837
auto tracer = createInsecureGrpcTracer(config);
3938

40-
svr.Get("/pong", [&](const httplib::Request& req, httplib::Response& res) {
41-
auto parent = req.get_header_value(kPropagationHeader.data());
42-
auto tracing_context = tracer->newContext(createSpanContext(parent));
39+
// C++
40+
svr.Get("/ping", [&](const httplib::Request& req, httplib::Response& res) {
41+
auto tracing_context = tracer->newContext();
42+
43+
{
44+
StartEntrySpan entry_span(tracing_context, "/ping");
45+
46+
{
47+
std::string target_address = "provider:8081";
48+
49+
StartExitSpan exit_span(tracing_context, entry_span.get(), "/pong");
50+
exit_span.get()->setPeer(target_address);
51+
52+
httplib::Client cli("provider", 8081);
53+
httplib::Headers headers = {
54+
{kPropagationHeader.data(),
55+
*tracing_context->createSW8HeaderValue(target_address)}};
56+
auto res = cli.Get("/pong", headers);
57+
}
58+
}
59+
60+
tracer->report(std::move(tracing_context));
61+
});
62+
63+
// Python
64+
svr.Get("/ping2", [&](const httplib::Request& req, httplib::Response& res) {
65+
auto tracing_context = tracer->newContext();
66+
67+
{
68+
StartEntrySpan entry_span(tracing_context, "/ping2");
69+
70+
{
71+
std::string target_address = "bridge:8082";
72+
73+
StartExitSpan exit_span(tracing_context, entry_span.get(), "/users");
74+
exit_span.get()->setPeer(target_address);
4375

44-
{ StartEntrySpan entry_span(tracing_context, "/pong"); }
76+
httplib::Client cli("bridge", 8082);
77+
httplib::Headers headers = {
78+
{kPropagationHeader.data(),
79+
*tracing_context->createSW8HeaderValue(target_address)}};
80+
auto res = cli.Get("/users", headers);
81+
}
82+
}
4583

4684
tracer->report(std::move(tracing_context));
4785
});

test/e2e/data/all_expected.yaml

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
segmentItems:
2+
- segmentSize: 2
3+
segments:
4+
# Segment from provider in [consumer -> provider] case.
5+
- segmentId: not null
6+
spans:
7+
- componentId: 9000
8+
endTime: gt 0
9+
isError: false
10+
operationName: /pong
11+
parentSpanId: -1
12+
peer: ''
13+
refs:
14+
- networkAddress: provider:8081
15+
parentEndpoint: /ping
16+
parentService: consumer
17+
parentServiceInstance: node_0
18+
parentSpanId: 1
19+
parentTraceSegmentId: not null
20+
refType: CrossProcess
21+
traceId: not null
22+
skipAnalysis: false
23+
spanId: 0
24+
spanLayer: Http
25+
spanType: Entry
26+
startTime: gt 0
27+
# Segment from provider in [consumer -> bridge -> provider] case.
28+
- segmentId: not null
29+
spans:
30+
- componentId: 9000
31+
endTime: gt 0
32+
isError: false
33+
operationName: /pong2
34+
parentSpanId: -1
35+
peer: ''
36+
refs:
37+
- networkAddress: provider:8081
38+
parentEndpoint: /pong2
39+
parentService: bridge
40+
parentServiceInstance: not null
41+
parentSpanId: 1
42+
parentTraceSegmentId: not null
43+
refType: CrossProcess
44+
traceId: not null
45+
skipAnalysis: false
46+
spanId: 0
47+
spanLayer: Http
48+
spanType: Entry
49+
startTime: gt 0
50+
serviceName: provider
51+
- segmentSize: 1
52+
segments:
53+
# Segment from bridge in [consumer -> bridge -> provider] case.
54+
- segmentId: not null
55+
spans:
56+
- componentId: 7002
57+
endTime: gt 0
58+
isError: false
59+
operationName: /pong2
60+
parentSpanId: 0
61+
peer: provider:8081
62+
skipAnalysis: false
63+
spanId: 1
64+
spanLayer: Http
65+
spanType: Exit
66+
startTime: gt 0
67+
tags:
68+
- key: http.method
69+
value: GET
70+
- key: http.url
71+
value: http://provider:8081/pong2
72+
- key: http.status_code
73+
value: '200'
74+
- componentId: 7001
75+
endTime: gt 0
76+
isError: false
77+
operationName: /users
78+
parentSpanId: -1
79+
peer: not null
80+
refs:
81+
- networkAddress: bridge:8082
82+
parentEndpoint: /ping2
83+
parentService: consumer
84+
parentServiceInstance: node_0
85+
parentSpanId: 1
86+
parentTraceSegmentId: not null
87+
refType: CrossProcess
88+
traceId: not null
89+
skipAnalysis: false
90+
spanId: 0
91+
spanLayer: Http
92+
spanType: Entry
93+
startTime: gt 0
94+
tags:
95+
- key: http.method
96+
value: GET
97+
- key: http.url
98+
value: http://bridge:8082/users
99+
- key: http.status_code
100+
value: '200'
101+
serviceName: bridge
102+
- segmentSize: 2
103+
segments:
104+
# Segment from consumer [consumer -> provider] case.
105+
- segmentId: not null
106+
spans:
107+
- componentId: 9000
108+
endTime: gt 0
109+
isError: false
110+
operationName: /ping
111+
parentSpanId: -1
112+
peer: ''
113+
skipAnalysis: false
114+
spanId: 0
115+
spanLayer: Http
116+
spanType: Entry
117+
startTime: gt 0
118+
- componentId: 9000
119+
endTime: gt 0
120+
isError: false
121+
operationName: /pong
122+
parentSpanId: 0
123+
peer: provider:8081
124+
skipAnalysis: false
125+
spanId: 1
126+
spanLayer: Http
127+
spanType: Exit
128+
startTime: gt 0
129+
# Segment from consumer [consumer -> bridge -> provider] case.
130+
- segmentId: not null
131+
spans:
132+
- componentId: 9000
133+
endTime: gt 0
134+
isError: false
135+
operationName: /ping2
136+
parentSpanId: -1
137+
peer: ''
138+
skipAnalysis: false
139+
spanId: 0
140+
spanLayer: Http
141+
spanType: Entry
142+
startTime: gt 0
143+
- componentId: 9000
144+
endTime: gt 0
145+
isError: false
146+
operationName: /users
147+
parentSpanId: 0
148+
peer: bridge:8082
149+
skipAnalysis: false
150+
spanId: 1
151+
spanLayer: Http
152+
spanType: Exit
153+
startTime: gt 0
154+
serviceName: consumer

test/e2e/data/expected-python.yaml

Lines changed: 0 additions & 102 deletions
This file was deleted.

0 commit comments

Comments
 (0)