|
36 | 36 | span_finish_callback, |
37 | 37 | ) |
38 | 38 |
|
| 39 | +from ydb.ydb_version import VERSION |
| 40 | + |
39 | 41 | from .conftest import FakeDriverConfig |
40 | 42 |
|
41 | 43 |
|
@@ -301,6 +303,60 @@ def get_trace_metadata(self): |
301 | 303 | assert provider.calls == 1 |
302 | 304 |
|
303 | 305 |
|
| 306 | +class _BuildInfoCfg: |
| 307 | + database = None |
| 308 | + credentials = None |
| 309 | + |
| 310 | + |
| 311 | +class TestSdkBuildInfoHeader: |
| 312 | + """Enabling tracing advertises a ``ydb-sdk-tracing`` token in x-ydb-sdk-build-info.""" |
| 313 | + |
| 314 | + def test_tokens_reflect_active_provider(self): |
| 315 | + from ydb.observability import sdk_build_info_tokens |
| 316 | + |
| 317 | + assert sdk_build_info_tokens() == [] |
| 318 | + enable_tracing(RecordingProvider()) |
| 319 | + assert sdk_build_info_tokens() == ["ydb-sdk-tracing/0.1.0"] |
| 320 | + disable_tracing() |
| 321 | + assert sdk_build_info_tokens() == [] |
| 322 | + |
| 323 | + def test_header_gains_tracing_token_when_enabled(self): |
| 324 | + from ydb.connection import _construct_metadata |
| 325 | + |
| 326 | + def build_info(): |
| 327 | + return dict(_construct_metadata(_BuildInfoCfg(), None))["x-ydb-sdk-build-info"] |
| 328 | + |
| 329 | + assert "ydb-sdk-tracing" not in build_info() |
| 330 | + |
| 331 | + enable_tracing(RecordingProvider()) |
| 332 | + header = build_info() |
| 333 | + disable_tracing() |
| 334 | + |
| 335 | + assert header == f"ydb-python-sdk/{VERSION};ydb-sdk-tracing/0.1.0" |
| 336 | + |
| 337 | + def test_tracing_token_precedes_driver_additional_headers(self): |
| 338 | + from ydb.connection import _construct_metadata |
| 339 | + |
| 340 | + class _Cfg(_BuildInfoCfg): |
| 341 | + _additional_sdk_headers = ("lib1/1.0",) |
| 342 | + |
| 343 | + enable_tracing(RecordingProvider()) |
| 344 | + header = dict(_construct_metadata(_Cfg(), None))["x-ydb-sdk-build-info"] |
| 345 | + disable_tracing() |
| 346 | + |
| 347 | + # native SDK, then SDK-owned tracing token, then custom driver headers |
| 348 | + assert header == f"ydb-python-sdk/{VERSION};ydb-sdk-tracing/0.1.0;lib1/1.0" |
| 349 | + |
| 350 | + async def test_header_async_parity(self): |
| 351 | + from ydb.aio.connection import _construct_metadata |
| 352 | + |
| 353 | + enable_tracing(RecordingProvider()) |
| 354 | + header = dict(await _construct_metadata(_BuildInfoCfg(), None))["x-ydb-sdk-build-info"] |
| 355 | + disable_tracing() |
| 356 | + |
| 357 | + assert header == f"ydb-python-sdk/{VERSION};ydb-sdk-tracing/0.1.0" |
| 358 | + |
| 359 | + |
304 | 360 | class TestSplitEndpoint: |
305 | 361 | """Cover every branch of the endpoint parser.""" |
306 | 362 |
|
|
0 commit comments