Skip to content

Commit f578402

Browse files
jimf5p-pautov
andcommitted
Verify export via TLS (#12).
Co-authored-by: Pavel Pautov <p.pautov@f5.com>
1 parent 9dc4dc2 commit f578402

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

tests/conftest.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def pytest_addoption(parser):
1919
parser.addoption("--globals", default="")
2020

2121

22-
def self_signed_cert(test_dir, name):
22+
def self_signed_cert(name):
2323
k = crypto.PKey()
2424
k.generate_key(crypto.TYPE_RSA, 2048)
2525
cert = crypto.X509()
@@ -29,11 +29,9 @@ def self_signed_cert(test_dir, name):
2929
cert.gmtime_adj_notAfter(365 * 86400) # 365 days
3030
cert.set_pubkey(k)
3131
cert.sign(k, "sha512")
32-
(test_dir / f"{name}.key").write_text(
33-
crypto.dump_privatekey(crypto.FILETYPE_PEM, k).decode("utf-8")
34-
)
35-
(test_dir / f"{name}.crt").write_text(
36-
crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode("utf-8")
32+
return (
33+
crypto.dump_privatekey(crypto.FILETYPE_PEM, k),
34+
crypto.dump_certificate(crypto.FILETYPE_PEM, cert),
3735
)
3836

3937

@@ -66,7 +64,7 @@ def nginx_config(request, pytestconfig, testdir, logger):
6664

6765

6866
@pytest.fixture(scope="module")
69-
def nginx(testdir, pytestconfig, nginx_config, certs, logger, otelcol):
67+
def nginx(testdir, pytestconfig, nginx_config, cert, logger, otelcol):
7068
(testdir / "nginx.conf").write_text(nginx_config)
7169
logger.info("Starting nginx...")
7270
proc = subprocess.Popen(
@@ -96,5 +94,8 @@ def nginx(testdir, pytestconfig, nginx_config, certs, logger, otelcol):
9694

9795

9896
@pytest.fixture(scope="module")
99-
def certs(testdir):
100-
self_signed_cert(testdir, "localhost")
97+
def cert(testdir):
98+
key, cert = self_signed_cert("localhost")
99+
(testdir / "localhost.key").write_text(key.decode("utf-8"))
100+
(testdir / "localhost.crt").write_text(cert.decode("utf-8"))
101+
yield (key, cert)

tests/test_otel.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
ssl_certificate_key localhost.key;
2222
2323
otel_exporter {
24-
endpoint {{ scheme }}127.0.0.1:14317;
24+
endpoint {{ endpoint or "127.0.0.1:14317" }};
2525
interval {{ interval or "1ms" }};
2626
batch_size 3;
2727
batch_count 3;
@@ -242,7 +242,7 @@ def test_context(client, trace_service, parent, path):
242242

243243
@pytest.mark.parametrize(
244244
"nginx_config",
245-
[{"interval": "200ms", "scheme": "http://"}],
245+
[{"interval": "200ms", "endpoint": "http://127.0.0.1:14317"}],
246246
indirect=True,
247247
)
248248
@pytest.mark.parametrize("batch_count", [1, 3])
@@ -313,3 +313,19 @@ def test_exporter_headers(client, trace_service):
313313
headers = dict(trace_service.last_metadata)
314314
assert headers["x-api-token"] == "api.value"
315315
assert headers["authorization"] == "Basic value"
316+
317+
318+
@pytest.mark.parametrize(
319+
"nginx_config",
320+
[
321+
{
322+
"endpoint": "https://localhost:14318",
323+
"exporter_opts": "trusted_certificate localhost.crt;",
324+
}
325+
],
326+
indirect=True,
327+
)
328+
def test_tls_export(client, trace_service):
329+
assert client.get("http://127.0.0.1:18080/ok").status_code == 200
330+
331+
assert trace_service.get_span().name == "/ok"

tests/trace_service.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def get_span(self):
3232

3333

3434
@pytest.fixture(scope="module")
35-
def trace_service(request, pytestconfig, logger):
35+
def trace_service(request, pytestconfig, logger, cert):
3636
server = grpc.server(concurrent.futures.ThreadPoolExecutor())
3737
trace_service = TraceService()
3838
trace_service_pb2_grpc.add_TraceServiceServicer_to_server(
@@ -44,6 +44,10 @@ def trace_service(request, pytestconfig, logger):
4444
)
4545
listen_addr = f"127.0.0.1:{24317 if trace_service.use_otelcol else 14317}"
4646
server.add_insecure_port(listen_addr)
47+
if not trace_service.use_otelcol:
48+
creds = grpc.ssl_server_credentials([cert])
49+
server.add_secure_port("127.0.0.1:14318", creds)
50+
listen_addr += " and 127.0.0.1:14318"
4751
logger.info(f"Starting trace service at {listen_addr}...")
4852
server.start()
4953
yield trace_service
@@ -52,18 +56,26 @@ def trace_service(request, pytestconfig, logger):
5256

5357

5458
@pytest.fixture(scope="module")
55-
def otelcol(pytestconfig, testdir, logger, trace_service):
59+
def otelcol(pytestconfig, testdir, logger, trace_service, cert):
5660
if not trace_service.use_otelcol:
5761
yield
5862
return
5963

6064
(testdir / "otel-config.yaml").write_text(
61-
"""receivers:
65+
f"""receivers:
6266
otlp:
6367
protocols:
6468
grpc:
6569
endpoint: 127.0.0.1:14317
6670
71+
otlp/tls:
72+
protocols:
73+
grpc:
74+
endpoint: 127.0.0.1:14318
75+
tls:
76+
cert_file: {testdir}/localhost.crt
77+
key_file: {testdir}/localhost.key
78+
6779
exporters:
6880
otlp:
6981
endpoint: 127.0.0.1:24317
@@ -73,7 +85,7 @@ def otelcol(pytestconfig, testdir, logger, trace_service):
7385
service:
7486
pipelines:
7587
traces:
76-
receivers: [otlp]
88+
receivers: [otlp, otlp/tls]
7789
exporters: [otlp]
7890
telemetry:
7991
metrics:

0 commit comments

Comments
 (0)