Skip to content
This repository was archived by the owner on Sep 17, 2025. It is now read-only.

Commit 99d3bbe

Browse files
authored
System test (#34)
1 parent cb9ce93 commit 99d3bbe

17 files changed

Lines changed: 672 additions & 51 deletions

.circleci/config.yml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,32 @@ jobs:
88
build:
99
docker:
1010
- image: googleapis/nox:0.17.0
11+
- image: mysql:5.7
12+
environment:
13+
MYSQL_ROOT_HOST: "%"
14+
MYSQL_ROOT_PASSWORD: 666666
15+
ports:
16+
- 3306:3306
17+
- image: circleci/postgres:9.6
18+
environment:
19+
POSTGRES_PASSWORD: 666666
20+
ports:
21+
- 5432:5432
1122

1223
working_directory: ~/repo
1324

1425
steps:
1526
- checkout
16-
27+
- run:
28+
name: Decrypt credentials
29+
command: |
30+
if [ -n "$GOOGLE_APPLICATION_CREDENTIALS" ]; then
31+
openssl aes-256-cbc -d -a -k "$GOOGLE_CREDENTIALS_PASSPHRASE" \
32+
-in trace/tests/system/credentials.json.enc \
33+
-out trace/$GOOGLE_APPLICATION_CREDENTIALS
34+
else
35+
echo "No credentials. System tests will not run."
36+
fi
1737
- run:
1838
name: Run tests - opencensus.trace
1939
command: |

trace/nox.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from __future__ import absolute_import
1616

1717
import nox
18+
import os
1819

1920

2021
@nox.session
@@ -39,7 +40,37 @@ def unit_tests(session, python_version):
3940
'--cov-config=.coveragerc',
4041
'--cov-report=',
4142
'--cov-fail-under=97',
42-
'tests/',
43+
'tests/unit/',
44+
*session.posargs
45+
)
46+
47+
48+
@nox.session
49+
@nox.parametrize('python_version', ['2.7', '3.6'])
50+
def system_tests(session, python_version):
51+
"""Run the system test suite."""
52+
53+
# Sanity check: Only run system tests if the environment variable is set.
54+
if not os.environ.get('GOOGLE_APPLICATION_CREDENTIALS', ''):
55+
session.skip('Credentials must be set via environment variable.')
56+
57+
# Run the system tests against latest Python 2 and Python 3 only.
58+
session.interpreter = 'python{}'.format(python_version)
59+
60+
# Set the virtualenv dirname.
61+
session.virtualenv_dirname = 'sys-' + python_version
62+
63+
# Install all test dependencies, then install this package into the
64+
# virutalenv's dist-packages.
65+
session.install('-r', 'requirements-test.txt')
66+
session.install('.')
67+
68+
# Run py.test against the system tests.
69+
session.run(
70+
'py.test',
71+
'-vvv',
72+
'-s',
73+
'tests/system/',
4374
*session.posargs
4475
)
4576

trace/requirements-test.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Django==1.11.5
22
Flask==0.12.2
3-
google-cloud-trace==0.15.4
3+
google-cloud-trace==0.15.5
44
mock==2.0.0
55
mysql-connector==2.1.6
66
psycopg2==2.7.3.1
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Copyright 2017, OpenCensus Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
import unittest
16+
17+
18+
def func_to_trace():
19+
import time
20+
21+
print('Test simple tracing...')
22+
time.sleep(2)
23+
24+
25+
class TestBasicTrace(unittest.TestCase):
26+
27+
def test_request_tracer(self):
28+
import json
29+
30+
from opencensus.trace import request_tracer
31+
from opencensus.trace.samplers import always_on
32+
from opencensus.trace.exporters import file_exporter
33+
from opencensus.trace.propagation import google_cloud_format
34+
35+
trace_id = 'f8739df974a4481f98748cd92b27177d'
36+
span_id = '16971691944144156899'
37+
trace_option = 1
38+
39+
trace_header = '{}/{};o={}'.format(trace_id, span_id, trace_option)
40+
41+
sampler = always_on.AlwaysOnSampler()
42+
exporter = file_exporter.FileExporter()
43+
propagator = google_cloud_format.GoogleCloudFormatPropagator()
44+
span_context = propagator.from_header(header=trace_header)
45+
46+
tracer = request_tracer.RequestTracer(
47+
span_context=span_context,
48+
sampler=sampler,
49+
exporter=exporter,
50+
propagator=propagator
51+
)
52+
53+
with tracer.span(name='root_span') as root:
54+
func_to_trace()
55+
parent_span_id = root.span_id
56+
with root.span(name='child_span'):
57+
func_to_trace()
58+
59+
tracer.finish()
60+
61+
file = open(file_exporter.DEFAULT_FILENAME, 'r')
62+
trace_json = json.loads(file.read())
63+
64+
spans = trace_json.get('spans')
65+
66+
self.assertEqual(trace_json.get('traceId'), trace_id)
67+
self.assertEqual(len(spans), 2)
68+
69+
for span in spans:
70+
if span.get('name') == 'root_span':
71+
self.assertEqual(str(span.get('parentSpanId')), span_id)
72+
else:
73+
self.assertEqual(span.get('parentSpanId'), parent_span_id)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
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
File renamed without changes.

trace/tests/unit/ext/django/app/settings.py renamed to trace/tests/system/django/app/settings.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,20 @@
6666
]
6767

6868
OPENCENSUS_TRACE = {
69-
'SAMPLER': 'opencensus.trace.samplers.fixed_rate.FixedRateSampler',
70-
'EXPORTER': 'opencensus.trace.exporters.print_exporter.PrintExporter',
69+
'SAMPLER': 'opencensus.trace.samplers.always_on.AlwaysOnSampler',
70+
'EXPORTER': 'opencensus.trace.exporters.google_cloud_exporter.GoogleCloudExporter',
7171
'PROPAGATOR': 'opencensus.trace.propagation.google_cloud_format.'
7272
'GoogleCloudFormatPropagator',
7373
}
7474

75+
DEFAULT_DJANGO_TRACER_PARAMS = {
76+
'SAMPLING_RATE': 0.5,
77+
'GCP_REPORTER_PROJECT': os.environ.get('GCLOUD_PROJECT_PYTHON'),
78+
'ZIPKIN_REPORTER_SERVICE_NAME': 'my_service',
79+
'ZIPKIN_REPORTER_HOST_NAME': 'localhost',
80+
'ZIPKIN_REPORTER_PORT': 9411,
81+
}
82+
7583
OPENCENSUS_TRACE_PARAMS = {
7684
'SAMPLING_RATE': 0.5,
7785
}
File renamed without changes.

0 commit comments

Comments
 (0)