Skip to content

Commit 5674389

Browse files
committed
Add AWS Propagator Unit Tests
1 parent 6f3398a commit 5674389

File tree

8 files changed

+232
-172
lines changed

8 files changed

+232
-172
lines changed

Diff for: sdk-extension/opentelemetry-sdk-extension-aws/setup.cfg

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ package_dir=
3939
=src
4040
packages=find_namespace:
4141
install_requires =
42-
opentelemetry-api == 0.14.b0
42+
opentelemetry-api == 0.15.dev0
4343

4444
[options.entry_points]
4545
opentelemetry_propagator =
46-
aws_xray = opentelemetry.sdk.extension.aws.trace.propagation.aws_xray_format:AWSXRayFormat
46+
aws_xray = opentelemetry.sdk.extension.aws.trace.propagation.aws_xray_format:AwsXRayFormat
4747

4848
[options.extras_require]
4949
test =

Diff for: sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/trace/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
from opentelemetry.sdk.extension.aws.trace.aws_xray_ids_generator import (
16-
AWSXRayIdsGenerator,
16+
AwsXRayIdsGenerator,
1717
)
1818

19-
__all__ = ["AWSXRayIdsGenerator"]
19+
__all__ = ["AwsXRayIdsGenerator"]

Diff for: sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/trace/aws_xray_ids_generator.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from opentelemetry import trace
1919

2020

21-
class AWSXRayIdsGenerator(trace.IdsGenerator):
21+
class AwsXRayIdsGenerator(trace.IdsGenerator):
2222
"""Generates tracing IDs compatible with the AWS X-Ray tracing service. In
2323
the X-Ray system, the first 32 bits of the `TraceId` are the Unix epoch time
2424
in seconds. Since spans (AWS calls them segments) with an embedded timestamp

Diff for: sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/trace/propagation/aws_xray_format.py

+53-18
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
_logger = logging.getLogger(__name__)
2929

3030

31-
class AWSXRayFormat(TextMapPropagator):
31+
class AwsXRayFormat(TextMapPropagator):
3232
"""Propagator for the AWS X-Ray Trace Header propagation protocol.
3333
3434
See: https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader
@@ -62,13 +62,21 @@ def extract(
6262
carrier: TextMapPropagatorT,
6363
context: typing.Optional[Context] = None,
6464
) -> Context:
65-
if not carrier:
66-
raise ValueError(("Could not extract from carrier: %s", carrier))
65+
trace_header_list = get_from_carrier(carrier, self.TRACE_HEADER_KEY)
6766

68-
trace_header = get_from_carrier(carrier, self.TRACE_HEADER_KEY)
67+
if not trace_header_list or len(trace_header_list) != 1:
68+
return trace.set_span_in_context(
69+
trace.INVALID_SPAN,
70+
context=context
71+
)
6972

70-
if not trace_header or trace_header == '':
71-
return trace.set_span_in_context(trace.INVALID_SPAN)
73+
trace_header = trace_header_list[0]
74+
75+
if not trace_header:
76+
return trace.set_span_in_context(
77+
trace.INVALID_SPAN,
78+
context=context
79+
)
7280

7381
trace_id = trace.INVALID_TRACE_ID
7482
span_id = trace.INVALID_SPAN_ID
@@ -91,7 +99,10 @@ def extract(
9199
key_and_value_delimiter_index = stripped_kv_pair.index(self.KEY_AND_VALUE_DELIMITER)
92100
except ValueError as _:
93101
_logger.error(("Error parsing X-Ray trace header. Invalid key value pair: %s. Returning INVALID span context.", kv_pair_subset))
94-
return trace.set_span_in_context(trace.INVALID_SPAN)
102+
return trace.set_span_in_context(
103+
trace.INVALID_SPAN,
104+
context=context
105+
)
95106

96107
value = stripped_kv_pair[key_and_value_delimiter_index + 1:]
97108

@@ -101,17 +112,37 @@ def extract(
101112
value[self.TRACE_ID_DELIMITER_INDEX_1] != self.TRACE_ID_DELIMITER or
102113
value[self.TRACE_ID_DELIMITER_INDEX_2] != self.TRACE_ID_DELIMITER):
103114
_logger.error(("Invalid TraceId in X-Ray trace header: '%s' with value '%s'. Returning INVALID span context.", self.TRACE_HEADER_KEY, trace_header))
104-
return trace.INVALID_SPAN_CONTEXT
115+
return trace.set_span_in_context(
116+
trace.INVALID_SPAN,
117+
context=context
118+
)
105119

106120
timestamp_subset = value[self.TRACE_ID_DELIMITER_INDEX_1 + 1: self.TRACE_ID_DELIMITER_INDEX_2]
107121
unique_id_subset = value[self.TRACE_ID_DELIMITER_INDEX_2 + 1: self.TRACE_ID_LENGTH]
108-
trace_id = int(timestamp_subset + unique_id_subset, 16)
122+
try:
123+
trace_id = int(timestamp_subset + unique_id_subset, 16)
124+
except ValueError as _:
125+
_logger.error(("Invalid TraceId in X-Ray trace header: '%s' with value '%s'. Returning INVALID span context.", self.TRACE_HEADER_KEY, trace_header))
126+
return trace.set_span_in_context(
127+
trace.INVALID_SPAN,
128+
context=context
129+
)
109130
elif stripped_kv_pair.startswith(self.PARENT_ID_KEY):
110131
if len(value) != self.PARENT_ID_LENGTH:
111132
_logger.error(("Invalid ParentId in X-Ray trace header: '%s' with value '%s'. Returning INVALID span context.", self.TRACE_HEADER_KEY, trace_header))
112-
return trace.INVALID_SPAN_CONTEXT
113-
114-
span_id = int(value, 16)
133+
return trace.set_span_in_context(
134+
trace.INVALID_SPAN,
135+
context=context
136+
)
137+
138+
try:
139+
span_id = int(value, 16)
140+
except ValueError as _:
141+
_logger.error(("Invalid TraceId in X-Ray trace header: '%s' with value '%s'. Returning INVALID span context.", self.TRACE_HEADER_KEY, trace_header))
142+
return trace.set_span_in_context(
143+
trace.INVALID_SPAN,
144+
context=context
145+
)
115146
elif stripped_kv_pair.startswith(self.SAMPLED_FLAG_KEY):
116147
is_sampled_flag_valid = True
117148

@@ -129,7 +160,10 @@ def extract(
129160

130161
if not is_sampled_flag_valid:
131162
_logger.error(("Invalid Sampling flag in X-Ray trace header: '%s' with value '%s'. Returning INVALID span context.", self.TRACE_HEADER_KEY, trace_header))
132-
return trace.INVALID_SPAN_CONTEXT
163+
return trace.set_span_in_context(
164+
trace.INVALID_SPAN,
165+
context=context
166+
)
133167

134168
options = 0
135169
if sampled:
@@ -144,7 +178,11 @@ def extract(
144178
)
145179

146180
if not span_context.is_valid:
147-
return context
181+
_logger.error("Invalid Span Extracted. Insertting INVALID span into provided context.")
182+
return trace.set_span_in_context(
183+
trace.INVALID_SPAN,
184+
context=context
185+
)
148186

149187
return trace.set_span_in_context(
150188
trace.DefaultSpan(
@@ -159,12 +197,9 @@ def inject(
159197
carrier: TextMapPropagatorT,
160198
context: typing.Optional[Context] = None,
161199
) -> None:
162-
if not carrier:
163-
raise ValueError(("Could not extract from carrier: %s", carrier))
164-
165200
span = trace.get_current_span(context=context)
166201

167-
span_context = span.get_context()
202+
span_context = span.get_span_context()
168203
if not span_context.is_valid:
169204
return
170205

Diff for: sdk-extension/opentelemetry-sdk-extension-aws/src/opentelemetry/sdk/extension/aws/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
__version__ = "0.14.b0"
15+
__version__ = "0.15.dev0"

0 commit comments

Comments
 (0)