Make AWS Propagator tests more readable

This commit is contained in:
Nathaniel Ruiz Nowell
2020-11-08 18:30:57 -08:00
parent 26db369ec9
commit ea0988a26a

View File

@ -45,7 +45,7 @@ def get_as_list(dict_object, key):
# Inject Methods # Inject Methods
def build_test_context( def build_test_current_context(
trace_id=int(TRACE_ID_BASE16, 16), trace_id=int(TRACE_ID_BASE16, 16),
span_id=int(SPAN_ID_BASE16, 16), span_id=int(SPAN_ID_BASE16, 16),
is_remote=True, is_remote=True,
@ -54,56 +54,31 @@ def build_test_context(
): ):
return set_span_in_context( return set_span_in_context(
trace_api.DefaultSpan( trace_api.DefaultSpan(
SpanContext( build_test_span_context(
trace_id, span_id, is_remote, trace_flags, trace_state, trace_id, span_id, is_remote, trace_flags, trace_state
) )
) )
) )
def build_dict_with_xray_trace_header(
trace_id="{}{}{}{}{}".format(
AwsXRayFormat.TRACE_ID_VERSION,
AwsXRayFormat.TRACE_ID_DELIMITER,
TRACE_ID_BASE16[: AwsXRayFormat.TRACE_ID_FIRST_PART_LENGTH],
AwsXRayFormat.TRACE_ID_DELIMITER,
TRACE_ID_BASE16[AwsXRayFormat.TRACE_ID_FIRST_PART_LENGTH :],
),
span_id=SPAN_ID_BASE16,
sampled="0",
):
carrier = CaseInsensitiveDict()
carrier[AwsXRayFormat.TRACE_HEADER_KEY] = "".join(
[
"{}{}{}{}".format(
AwsXRayFormat.TRACE_ID_KEY,
AwsXRayFormat.KEY_AND_VALUE_DELIMITER,
trace_id,
AwsXRayFormat.KV_PAIR_DELIMITER,
),
"{}{}{}{}".format(
AwsXRayFormat.PARENT_ID_KEY,
AwsXRayFormat.KEY_AND_VALUE_DELIMITER,
span_id,
AwsXRayFormat.KV_PAIR_DELIMITER,
),
"{}{}{}".format(
AwsXRayFormat.SAMPLED_FLAG_KEY,
AwsXRayFormat.KEY_AND_VALUE_DELIMITER,
sampled,
),
]
)
return carrier
# Extract Methods # Extract Methods
def get_extracted_span_context(encompassing_context): def get_nested_span_context(parent_context):
return trace_api.get_current_span(encompassing_context).get_span_context() return trace_api.get_current_span(parent_context).get_span_context()
# Helper Methods
def build_test_span_context(
trace_id=int(TRACE_ID_BASE16, 16),
span_id=int(SPAN_ID_BASE16, 16),
is_remote=True,
trace_flags=DEFAULT_TRACE_OPTIONS,
trace_state=DEFAULT_TRACE_STATE,
):
return SpanContext(trace_id, span_id, is_remote, trace_flags, trace_state,)
class AwsXRayPropagatorTest(unittest.TestCase): class AwsXRayPropagatorTest(unittest.TestCase):
@ -117,259 +92,266 @@ class AwsXRayPropagatorTest(unittest.TestCase):
carrier = CaseInsensitiveDict() carrier = CaseInsensitiveDict()
AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject( AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject(
AwsXRayPropagatorTest.carrier_setter, carrier, build_test_context() AwsXRayPropagatorTest.carrier_setter,
carrier,
build_test_current_context(),
) )
self.assertTrue( injected_items = set(carrier.items())
set(carrier.items()).issubset( expected_items = set(
set(build_dict_with_xray_trace_header().items()) CaseInsensitiveDict(
), {
"Failed to inject into context that was not yet sampled", AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"
}
).items()
) )
self.assertEqual(injected_items, expected_items)
def test_inject_into_sampled_context(self): def test_inject_into_sampled_context(self):
carrier = CaseInsensitiveDict() carrier = CaseInsensitiveDict()
AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject( AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject(
AwsXRayPropagatorTest.carrier_setter, AwsXRayPropagatorTest.carrier_setter,
carrier, carrier,
build_test_context(trace_flags=TraceFlags(TraceFlags.SAMPLED)), build_test_current_context(
trace_flags=TraceFlags(TraceFlags.SAMPLED)
),
) )
self.assertTrue( injected_items = set(carrier.items())
set(carrier.items()).issubset( expected_items = set(
set(build_dict_with_xray_trace_header(sampled="1").items(),) CaseInsensitiveDict(
), {
"Failed to inject into context that was already sampled", AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1"
}
).items()
) )
self.assertEqual(injected_items, expected_items)
def test_inject_into_context_with_non_default_state(self): def test_inject_into_context_with_non_default_state(self):
carrier = CaseInsensitiveDict() carrier = CaseInsensitiveDict()
AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject( AwsXRayPropagatorTest.XRAY_PROPAGATOR.inject(
AwsXRayPropagatorTest.carrier_setter, AwsXRayPropagatorTest.carrier_setter,
carrier, carrier,
build_test_context(trace_state=TraceState({"foo": "bar"})), build_test_current_context(trace_state=TraceState({"foo": "bar"})),
) )
# TODO: (NathanielRN) Assert trace state when the propagator supports it # TODO: (NathanielRN) Assert trace state when the propagator supports it
self.assertTrue( injected_items = set(carrier.items())
set(carrier.items()).issubset( expected_items = set(
set(build_dict_with_xray_trace_header().items(),) CaseInsensitiveDict(
), {
"Failed to inject into context with non default state", AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"
}
).items()
) )
self.assertEqual(injected_items, expected_items)
# Extract Tests # Extract Tests
def test_extract_empty_carrier_from_none_carrier(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, CaseInsensitiveDict()
)
self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted),
INVALID_SPAN_CONTEXT,
)
def test_extract_empty_carrier_from_invalid_context(self): def test_extract_empty_carrier_from_invalid_context(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, CaseInsensitiveDict() AwsXRayPropagatorTest.carrier_getter, CaseInsensitiveDict()
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_not_sampled_context(self): def test_extract_not_sampled_context(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
get_extracted_span_context(build_test_context()), build_test_span_context(),
) )
def test_extract_sampled_context(self): def test_extract_sampled_context(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(sampled="1"), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
get_extracted_span_context( build_test_span_context(
build_test_context(trace_flags=TraceFlags(TraceFlags.SAMPLED)) trace_flags=TraceFlags(TraceFlags.SAMPLED)
), ),
) )
def test_extract_different_order(self): def test_extract_different_order(self):
default_xray_trace_header_dict = build_dict_with_xray_trace_header() context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
trace_header_components = default_xray_trace_header_dict[
AwsXRayFormat.TRACE_HEADER_KEY
].split(AwsXRayFormat.KV_PAIR_DELIMITER)
reversed_trace_header_components = AwsXRayFormat.KV_PAIR_DELIMITER.join(
trace_header_components[::-1]
)
xray_trace_header_dict_in_different_order = CaseInsensitiveDict(
{AwsXRayFormat.TRACE_HEADER_KEY: reversed_trace_header_components}
)
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
xray_trace_header_dict_in_different_order, CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Sampled=0;Parent=53995c3f42cd8ad8;Root=1-8a3c60f7-d188f8fa79d48a391a778fa6"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
get_extracted_span_context(build_test_context()), build_test_span_context(),
) )
def test_extract_with_additional_fields(self): def test_extract_with_additional_fields(self):
default_xray_trace_header_dict = build_dict_with_xray_trace_header() context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
xray_trace_header_dict_with_extra_fields = CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: default_xray_trace_header_dict[
AwsXRayFormat.TRACE_HEADER_KEY
]
+ ";Foo=Bar"
}
)
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
xray_trace_header_dict_with_extra_fields, CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0;Foo=Bar"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
get_extracted_span_context(build_test_context()), build_test_span_context(),
) )
def test_extract_with_extra_whitespace(self): def test_extract_with_extra_whitespace(self):
default_xray_trace_header_dict = build_dict_with_xray_trace_header() context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
trace_header_components = default_xray_trace_header_dict[
AwsXRayFormat.TRACE_HEADER_KEY
].split(AwsXRayFormat.KV_PAIR_DELIMITER)
xray_trace_header_dict_with_extra_whitespace = CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: AwsXRayFormat.KV_PAIR_DELIMITER.join(
[
AwsXRayFormat.KEY_AND_VALUE_DELIMITER.join(
[
" " + key + " ",
" " + value + " ",
]
)
for kv_pair_str in trace_header_components
for key, value in [
kv_pair_str.split(
AwsXRayFormat.KEY_AND_VALUE_DELIMITER
)
]
]
)
}
)
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
xray_trace_header_dict_with_extra_whitespace, CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: " Root = 1-8a3c60f7-d188f8fa79d48a391a778fa6 ; Parent = 53995c3f42cd8ad8 ; Sampled = 0 "
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
get_extracted_span_context(build_test_context()), build_test_span_context(),
) )
def test_extract_invalid_xray_trace_header(self): def test_extract_invalid_xray_trace_header(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
CaseInsensitiveDict({AwsXRayFormat.TRACE_HEADER_KEY: ""}), CaseInsensitiveDict({AwsXRayFormat.TRACE_HEADER_KEY: ""}),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_trace_id(self): def test_extract_invalid_trace_id(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header( CaseInsensitiveDict(
trace_id="abcdefghijklmnopqrstuvwxyz123456" {
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-12345678-abcdefghijklmnopqrstuvwx;Parent=53995c3f42cd8ad8;Sampled=0"
}
), ),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_trace_id_size(self): def test_extract_invalid_trace_id_size(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header( CaseInsensitiveDict(
trace_id="1-8a3c60f7-d188f8fa79d48a391a778fa600" {
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa600;Parent=53995c3f42cd8ad8;Sampled=0="
}
), ),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_span_id(self): def test_extract_invalid_span_id(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(span_id="abcdefghijklmnop"), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=abcdefghijklmnop;Sampled=0"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_span_id_size(self): def test_extract_invalid_span_id_size(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(span_id="53995c3f42cd8ad800"), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad800;Sampled=0"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_empty_sampled_flag(self): def test_extract_invalid_empty_sampled_flag(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(sampled=""), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled="
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_sampled_flag_size(self): def test_extract_invalid_sampled_flag_size(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(sampled="10002"), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=011"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )
def test_extract_invalid_non_numeric_sampled_flag(self): def test_extract_invalid_non_numeric_sampled_flag(self):
actual_context_encompassing_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract( context_with_extracted = AwsXRayPropagatorTest.XRAY_PROPAGATOR.extract(
AwsXRayPropagatorTest.carrier_getter, AwsXRayPropagatorTest.carrier_getter,
build_dict_with_xray_trace_header(sampled="a"), CaseInsensitiveDict(
{
AwsXRayFormat.TRACE_HEADER_KEY: "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=a"
}
),
) )
self.assertEqual( self.assertEqual(
get_extracted_span_context(actual_context_encompassing_extracted), get_nested_span_context(context_with_extracted),
INVALID_SPAN_CONTEXT, INVALID_SPAN_CONTEXT,
) )