diff --git a/tests/integration/test_base_sw_headers_attrs.py b/tests/integration/test_base_sw_headers_attrs.py index 6c735c114..c5a32064c 100644 --- a/tests/integration/test_base_sw_headers_attrs.py +++ b/tests/integration/test_base_sw_headers_attrs.py @@ -50,6 +50,21 @@ class TestBaseSwHeadersAndAttributes(TestBase): "SampleSource" ] + @staticmethod + def assert_valid_trace_flags(trace_flags: str): + """Assert trace flags are one of the explicitly supported lowercase values.""" + assert trace_flags in {"00", "01", "02", "03"} + + def assert_trace_flags_sampled(self, trace_flags: str): + """Assert trace flags are one of the explicitly sampled values.""" + self.assert_valid_trace_flags(trace_flags) + assert trace_flags in {"01", "03"} + + def assert_trace_flags_not_sampled(self, trace_flags: str): + """Assert trace flags are one of the explicitly not-sampled values.""" + self.assert_valid_trace_flags(trace_flags) + assert trace_flags in {"00", "02"} + @staticmethod def _test_trace(): incoming_headers = {} diff --git a/tests/integration/test_scenario_1.py b/tests/integration/test_scenario_1.py index 4e258d1da..38beec844 100644 --- a/tests/integration/test_scenario_1.py +++ b/tests/integration/test_scenario_1.py @@ -94,6 +94,7 @@ def test_scenario_1_sampled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know there is only `sw` in tracestate diff --git a/tests/integration/test_scenario_4.py b/tests/integration/test_scenario_4.py index 650e80a6a..809773204 100644 --- a/tests/integration/test_scenario_4.py +++ b/tests/integration/test_scenario_4.py @@ -104,6 +104,8 @@ def test_scenario_4_sampled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know there is only `sw` in tracestate @@ -254,6 +256,8 @@ def test_scenario_4_not_sampled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know there is only `sw` in tracestate diff --git a/tests/integration/test_scenario_8.py b/tests/integration/test_scenario_8.py index 97b18341f..774e6e1ae 100644 --- a/tests/integration/test_scenario_8.py +++ b/tests/integration/test_scenario_8.py @@ -10,7 +10,6 @@ from unittest import mock from opentelemetry import trace as trace_api -from unittest import mock from .test_base_sw_headers_attrs import TestBaseSwHeadersAndAttributes @@ -112,6 +111,8 @@ def test_sampled_both_trace_context_and_xtraceoptions_valid(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -308,6 +309,8 @@ def test_not_sampled_both_trace_context_and_xtraceoptions_valid(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -440,6 +443,8 @@ def test_sampled_both_trace_context_and_xtraceoptions_valid_without_tt(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know there is `sw` in tracestate @@ -636,6 +641,8 @@ def test_not_sampled_both_trace_context_and_xtraceoptions_valid_without_tt(self) assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == trace_flags + self.assert_valid_trace_flags(new_trace_flags) + assert int(new_trace_flags, 16) & 0x01 == int(trace_flags, 16) & 0x01 assert "tracestate" in resp_json # In this test we know there is `sw` in tracestate @@ -758,6 +765,7 @@ def test_sampled_invalid_trace_context_and_valid_unsigned_with_tt(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -933,6 +941,7 @@ def test_not_sampled_invalid_trace_context_and_valid_unsigned_with_tt(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` diff --git a/tests/integration/test_signed_tt.py b/tests/integration/test_signed_tt.py index 3aa975fef..bdb43fe74 100644 --- a/tests/integration/test_signed_tt.py +++ b/tests/integration/test_signed_tt.py @@ -105,6 +105,7 @@ def test_signed_with_tt_auth_ok(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -282,6 +283,7 @@ def test_signed_without_tt_auth_ok(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -455,6 +457,7 @@ def test_signed_with_tt_rate_exceeded(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -560,6 +563,7 @@ def test_signed_with_tt_tracing_disabled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -660,6 +664,7 @@ def test_signed_with_tt_auth_fail(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -760,6 +765,7 @@ def test_signed_without_tt_auth_fail(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -865,6 +871,7 @@ def test_signed_with_tt_auth_fail_bad_ts(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -969,6 +976,7 @@ def test_signed_without_tt_auth_fail_bad_ts(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -1070,6 +1078,7 @@ def test_signed_missing_xtraceoptions_header(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know there is `sw` in tracestate diff --git a/tests/integration/test_unsigned_tt.py b/tests/integration/test_unsigned_tt.py index 5e2d490e7..89754fcca 100644 --- a/tests/integration/test_unsigned_tt.py +++ b/tests/integration/test_unsigned_tt.py @@ -101,6 +101,7 @@ def test_unsigned_with_tt_sampled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -270,6 +271,7 @@ def test_unsigned_with_tt_not_sampled_rate_exceeded(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -371,6 +373,7 @@ def test_unsigned_with_tt_not_sampled_tt_disabled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -472,6 +475,7 @@ def test_unsigned_without_tt_sampled(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` @@ -645,6 +649,7 @@ def test_unsigned_without_tt_not_sampled_rate_exceeded(self): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "00" + self.assert_trace_flags_not_sampled(new_trace_flags) assert "tracestate" in resp_json # In this test we know tracestate will have `sw` diff --git a/tests/integration/test_xtraceoptions_validation.py b/tests/integration/test_xtraceoptions_validation.py index a28a43471..ef08bc78e 100644 --- a/tests/integration/test_xtraceoptions_validation.py +++ b/tests/integration/test_xtraceoptions_validation.py @@ -77,6 +77,7 @@ def get_new_span_id_and_trace_flags(self, resp_json): assert new_span_id is not None new_trace_flags = traceparent_re_result.group(4) assert new_trace_flags == "01" + self.assert_trace_flags_sampled(new_trace_flags) return new_span_id, new_trace_flags def check_some_header_ok(self, resp_json):