|
1 |
| -import unittest |
| 1 | +import copy |
2 | 2 | import functools
|
3 | 3 | import json
|
| 4 | +import pytest |
4 | 5 | import os
|
5 |
| -import copy |
| 6 | +import unittest |
6 | 7 |
|
7 | 8 | from unittest.mock import MagicMock, Mock, patch, call
|
8 | 9 |
|
|
48 | 49 |
|
49 | 50 | event_samples = "tests/event_samples/"
|
50 | 51 |
|
51 |
| -span_to_finish = None |
52 |
| - |
53 |
| - |
54 |
| -def _clean_up_span(): |
55 |
| - global span_to_finish |
56 |
| - if span_to_finish is not None: |
57 |
| - span_to_finish.finish() |
58 |
| - span_to_finish = None |
59 |
| - |
60 |
| - |
61 |
| -def register_span(span): |
62 |
| - global span_to_finish |
63 |
| - _clean_up_span() |
64 |
| - span_to_finish = span |
65 |
| - return span |
66 |
| - |
67 |
| - |
68 |
| -def wrapped_span_creator(span_creator_func): |
69 |
| - def result_func(*args, **kwargs): |
70 |
| - return register_span(span_creator_func(*args, **kwargs)) |
71 |
| - |
72 |
| - return result_func |
73 |
| - |
74 |
| - |
75 |
| -create_inferred_span = wrapped_span_creator(create_inferred_span) |
76 |
| - |
77 | 52 |
|
78 | 53 | class ClientContext(object):
|
79 | 54 | def __init__(self, custom=None):
|
@@ -712,160 +687,6 @@ def test_set_dd_trace_py_root_no_span_id(self):
|
712 | 687 | self.mock_activate.assert_has_calls([call(expected_context)])
|
713 | 688 |
|
714 | 689 |
|
715 |
| -class TestAuthorizerInferredSpans(unittest.TestCase): |
716 |
| - def setUp(self): |
717 |
| - patcher = patch("ddtrace.Span.finish", autospec=True) |
718 |
| - self.mock_span_stop = patcher.start() |
719 |
| - self.addCleanup(patcher.stop) |
720 |
| - |
721 |
| - def tearDown(self): |
722 |
| - _clean_up_span() |
723 |
| - |
724 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_v1_event(self): |
725 |
| - event_sample_source = "authorizer-request-api-gateway-v1" |
726 |
| - finish_time = ( |
727 |
| - 1663295021.832 # request_time_epoch + integrationLatency for api-gateway-v1 |
728 |
| - ) |
729 |
| - span = self._authorizer_span_testing_items(event_sample_source, finish_time) |
730 |
| - self._basic_common_checks(span, "aws.apigateway.rest") |
731 |
| - |
732 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_v1_cached_event( |
733 |
| - self, |
734 |
| - ): |
735 |
| - event_sample_source = "authorizer-request-api-gateway-v1-cached" |
736 |
| - test_file = event_samples + event_sample_source + ".json" |
737 |
| - with open(test_file, "r") as event: |
738 |
| - event = json.load(event) |
739 |
| - ctx = get_mock_context() |
740 |
| - ctx.aws_request_id = "abc123" # injected data's requestId is abc321 |
741 |
| - span = create_inferred_span(event, ctx) |
742 |
| - self.mock_span_stop.assert_not_called() # NO authorizer span is injected |
743 |
| - self._basic_common_checks(span, "aws.apigateway.rest") |
744 |
| - |
745 |
| - def test_create_inferred_span_from_authorizer_token_api_gateway_v1_event(self): |
746 |
| - event_sample_source = "authorizer-token-api-gateway-v1" |
747 |
| - finish_time = ( |
748 |
| - 1663295021.832 # request_time_epoch + integrationLatency for api-gateway-v1 |
749 |
| - ) |
750 |
| - span = self._authorizer_span_testing_items(event_sample_source, finish_time) |
751 |
| - self._basic_common_checks(span, "aws.apigateway.rest") |
752 |
| - |
753 |
| - def test_create_inferred_span_from_authorizer_token_api_gateway_v2_cached_event( |
754 |
| - self, |
755 |
| - ): |
756 |
| - event_sample_source = "authorizer-token-api-gateway-v1-cached" |
757 |
| - test_file = event_samples + event_sample_source + ".json" |
758 |
| - with open(test_file, "r") as event: |
759 |
| - event = json.load(event) |
760 |
| - ctx = get_mock_context() |
761 |
| - ctx.aws_request_id = "abc123" # injected data's requestId is abc321 |
762 |
| - span = create_inferred_span(event, ctx) |
763 |
| - self.mock_span_stop.assert_not_called() # NO authorizer span is injected |
764 |
| - self._basic_common_checks(span, "aws.apigateway.rest") |
765 |
| - |
766 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_v2_event(self): |
767 |
| - event_sample_source = "authorizer-request-api-gateway-v2" |
768 |
| - finish_time = 1664228639533775400 # use the injected parent span finish time as an approximation |
769 |
| - test_file = event_samples + event_sample_source + ".json" |
770 |
| - with open(test_file, "r") as event: |
771 |
| - event = json.load(event) |
772 |
| - ctx = get_mock_context() |
773 |
| - ctx.aws_request_id = "abc123" |
774 |
| - span = create_inferred_span(event, ctx) |
775 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
776 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
777 |
| - self.mock_span_stop.assert_not_called() |
778 |
| - self.assertEqual(span.start_ns, finish_time) |
779 |
| - self._basic_common_checks(span, "aws.httpapi") |
780 |
| - |
781 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_v2_cached_event( |
782 |
| - self, |
783 |
| - ): |
784 |
| - event_sample_source = "authorizer-request-api-gateway-v2-cached" |
785 |
| - test_file = event_samples + event_sample_source + ".json" |
786 |
| - with open(test_file, "r") as event: |
787 |
| - event = json.load(event) |
788 |
| - ctx = get_mock_context() |
789 |
| - ctx.aws_request_id = "abc123" # injected data's requestId is abc321 |
790 |
| - span = create_inferred_span(event, ctx) |
791 |
| - self.mock_span_stop.assert_not_called() # NO authorizer span is injected |
792 |
| - self._basic_common_checks(span, "aws.httpapi") |
793 |
| - |
794 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_websocket_connect_event( |
795 |
| - self, |
796 |
| - ): |
797 |
| - event_sample_source = "authorizer-request-api-gateway-websocket-connect" |
798 |
| - finish_time = ( |
799 |
| - 1664388386.892 # request_time_epoch + integrationLatency in websocket case |
800 |
| - ) |
801 |
| - span = self._authorizer_span_testing_items(event_sample_source, finish_time) |
802 |
| - self._basic_common_checks( |
803 |
| - span, "aws.apigateway.websocket", "web", "$connect", None |
804 |
| - ) |
805 |
| - |
806 |
| - def test_create_inferred_span_from_authorizer_request_api_gateway_websocket_message_event( |
807 |
| - self, |
808 |
| - ): |
809 |
| - event_sample_source = "authorizer-request-api-gateway-websocket-message" |
810 |
| - test_file = event_samples + event_sample_source + ".json" |
811 |
| - with open(test_file, "r") as event: |
812 |
| - event = json.load(event) |
813 |
| - ctx = get_mock_context() |
814 |
| - ctx.aws_request_id = "abc123" # injected data's requestId is abc321 |
815 |
| - span = create_inferred_span(event, ctx) |
816 |
| - self.mock_span_stop.assert_not_called() # NO authorizer span is injected |
817 |
| - self._basic_common_checks(span, "aws.apigateway.websocket", "web", "main", None) |
818 |
| - |
819 |
| - def _authorizer_span_testing_items(self, event_sample_source, finish_time): |
820 |
| - test_file = event_samples + event_sample_source + ".json" |
821 |
| - with open(test_file, "r") as event: |
822 |
| - event = json.load(event) |
823 |
| - ctx = get_mock_context() |
824 |
| - ctx.aws_request_id = "abc123" |
825 |
| - span = create_inferred_span(event, ctx) |
826 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
827 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
828 |
| - |
829 |
| - # checking the upstream_authorizer_span |
830 |
| - self.mock_span_stop.assert_called_once() |
831 |
| - args, kwargs = self.mock_span_stop.call_args_list[0] |
832 |
| - self.assertEqual(kwargs.get("finish_time", args[1]), finish_time) |
833 |
| - self.assertEqual(span.start, finish_time) |
834 |
| - authorizer_span = args[0] |
835 |
| - self.assertEqual(authorizer_span.name, "aws.apigateway.authorizer") |
836 |
| - self.assertEqual(span.parent_id, authorizer_span.span_id) |
837 |
| - return span |
838 |
| - |
839 |
| - def _basic_common_checks( |
840 |
| - self, |
841 |
| - span, |
842 |
| - operation_name, |
843 |
| - span_type="http", |
844 |
| - route_key="/hello", |
845 |
| - http_method="GET", |
846 |
| - ): |
847 |
| - self.assertEqual(span.get_tag("apiid"), "amddr1rix9") |
848 |
| - self.assertEqual(span.get_tag("apiname"), "amddr1rix9") |
849 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
850 |
| - self.assertEqual(span.get_tag("operation_name"), operation_name) |
851 |
| - self.assertEqual(span.span_type, span_type) |
852 |
| - self.assertEqual( |
853 |
| - span.service, |
854 |
| - "amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
855 |
| - ) |
856 |
| - self.assertEqual( |
857 |
| - span.get_tag("http.url"), |
858 |
| - "amddr1rix9.execute-api.eu-west-1.amazonaws.com" + route_key, |
859 |
| - ) |
860 |
| - self.assertEqual(span.get_tag("endpoint"), route_key) |
861 |
| - self.assertEqual(span.get_tag("http.method"), http_method) |
862 |
| - self.assertEqual( |
863 |
| - span.get_tag("resource_names"), |
864 |
| - f"{http_method} {route_key}" if http_method else route_key, |
865 |
| - ) |
866 |
| - self.assertEqual(span.get_tag("request_id"), "abc123") |
867 |
| - |
868 |
| - |
869 | 690 | class TestServiceMapping(unittest.TestCase):
|
870 | 691 | def setUp(self):
|
871 | 692 | self.service_mapping = {}
|
@@ -1369,545 +1190,589 @@ def test_remaps_specific_inferred_span_service_names_from_eventbridge_event(
|
1369 | 1190 | self.assertEqual(span2.service, "eventbridge")
|
1370 | 1191 |
|
1371 | 1192 |
|
1372 |
| -class TestInferredSpans(unittest.TestCase): |
1373 |
| - def tearDown(self): |
1374 |
| - _clean_up_span() |
| 1193 | +class _Span(object): |
| 1194 | + def __init__(self, service, start, span_type, parent_name=None, tags=None): |
| 1195 | + self.service = service |
| 1196 | + self.start = start |
| 1197 | + self.span_type = span_type |
| 1198 | + self.parent_name = parent_name |
| 1199 | + self.tags = tags or {} |
| 1200 | + |
| 1201 | + |
| 1202 | +_test_create_inferred_span = ( |
| 1203 | + ( |
| 1204 | + "api-gateway", |
| 1205 | + _Span( |
| 1206 | + service="70ixmpl4fl.execute-api.us-east-2.amazonaws.com", |
| 1207 | + start=1428582896.0, |
| 1208 | + span_type="http", |
| 1209 | + tags={ |
| 1210 | + "_dd.origin": "lambda", |
| 1211 | + "_inferred_span.synchronicity": "sync", |
| 1212 | + "_inferred_span.tag_source": "self", |
| 1213 | + "apiid": "1234567890", |
| 1214 | + "apiname": "1234567890", |
| 1215 | + "endpoint": "/path/to/resource", |
| 1216 | + "http.method": "POST", |
| 1217 | + "http.url": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource", |
| 1218 | + "operation_name": "aws.apigateway.rest", |
| 1219 | + "request_id": "123", |
| 1220 | + "resource_names": "POST /path/to/resource", |
| 1221 | + "stage": "prod", |
| 1222 | + }, |
| 1223 | + ), |
| 1224 | + ), |
| 1225 | + ( |
| 1226 | + "api-gateway-non-proxy-async", |
| 1227 | + _Span( |
| 1228 | + service="lgxbo6a518.execute-api.eu-west-1.amazonaws.com", |
| 1229 | + start=1631210915.2510002, |
| 1230 | + span_type="http", |
| 1231 | + tags={ |
| 1232 | + "_dd.origin": "lambda", |
| 1233 | + "_inferred_span.synchronicity": "async", |
| 1234 | + "_inferred_span.tag_source": "self", |
| 1235 | + "apiid": "lgxbo6a518", |
| 1236 | + "apiname": "lgxbo6a518", |
| 1237 | + "endpoint": "/http/get", |
| 1238 | + "http.method": "GET", |
| 1239 | + "http.url": "lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get", |
| 1240 | + "operation_name": "aws.apigateway.rest", |
| 1241 | + "request_id": "123", |
| 1242 | + "resource_names": "GET /http/get", |
| 1243 | + "stage": "dev", |
| 1244 | + }, |
| 1245 | + ), |
| 1246 | + ), |
| 1247 | + ( |
| 1248 | + "api-gateway-non-proxy", |
| 1249 | + _Span( |
| 1250 | + service="lgxbo6a518.execute-api.eu-west-1.amazonaws.com", |
| 1251 | + start=1631210915.2510002, |
| 1252 | + span_type="http", |
| 1253 | + tags={ |
| 1254 | + "_dd.origin": "lambda", |
| 1255 | + "_inferred_span.synchronicity": "sync", |
| 1256 | + "_inferred_span.tag_source": "self", |
| 1257 | + "apiid": "lgxbo6a518", |
| 1258 | + "apiname": "lgxbo6a518", |
| 1259 | + "endpoint": "/http/get", |
| 1260 | + "http.method": "GET", |
| 1261 | + "http.url": "lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get", |
| 1262 | + "operation_name": "aws.apigateway.rest", |
| 1263 | + "request_id": "123", |
| 1264 | + "resource_names": "GET /http/get", |
| 1265 | + "stage": "dev", |
| 1266 | + }, |
| 1267 | + ), |
| 1268 | + ), |
| 1269 | + ( |
| 1270 | + "http-api", |
| 1271 | + _Span( |
| 1272 | + service="x02yirxc7a.execute-api.eu-west-1.amazonaws.com", |
| 1273 | + start=1631212283.738, |
| 1274 | + span_type="http", |
| 1275 | + tags={ |
| 1276 | + "_dd.origin": "lambda", |
| 1277 | + "_inferred_span.synchronicity": "sync", |
| 1278 | + "_inferred_span.tag_source": "self", |
| 1279 | + "apiid": "x02yirxc7a", |
| 1280 | + "apiname": "x02yirxc7a", |
| 1281 | + "endpoint": "/httpapi/get", |
| 1282 | + "http.method": "GET", |
| 1283 | + "http.protocol": "HTTP/1.1", |
| 1284 | + "http.source_ip": "38.122.226.210", |
| 1285 | + "http.url": "x02yirxc7a.execute-api.eu-west-1.amazonaws.com/httpapi/get", |
| 1286 | + "http.user_agent": "curl/7.64.1", |
| 1287 | + "operation_name": "aws.httpapi", |
| 1288 | + "request_id": "123", |
| 1289 | + "resource_names": "GET /httpapi/get", |
| 1290 | + "stage": "$default", |
| 1291 | + }, |
| 1292 | + ), |
| 1293 | + ), |
| 1294 | + ( |
| 1295 | + "api-gateway-websocket-default", |
| 1296 | + _Span( |
| 1297 | + service="p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
| 1298 | + start=1631285061.365, |
| 1299 | + span_type="web", |
| 1300 | + tags={ |
| 1301 | + "_dd.origin": "lambda", |
| 1302 | + "_inferred_span.synchronicity": "sync", |
| 1303 | + "_inferred_span.tag_source": "self", |
| 1304 | + "apiid": "p62c47itsb", |
| 1305 | + "apiname": "p62c47itsb", |
| 1306 | + "connection_id": "Fc5SzcoYGjQCJlg=", |
| 1307 | + "endpoint": "$default", |
| 1308 | + "event_type": "MESSAGE", |
| 1309 | + "http.url": "p62c47itsb.execute-api.eu-west-1.amazonaws.com$default", |
| 1310 | + "message_direction": "IN", |
| 1311 | + "operation_name": "aws.apigateway.websocket", |
| 1312 | + "request_id": "123", |
| 1313 | + "resource_names": "$default", |
| 1314 | + "stage": "dev", |
| 1315 | + }, |
| 1316 | + ), |
| 1317 | + ), |
| 1318 | + ( |
| 1319 | + "api-gateway-websocket-connect", |
| 1320 | + _Span( |
| 1321 | + service="p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
| 1322 | + start=1631284003.071, |
| 1323 | + span_type="web", |
| 1324 | + tags={ |
| 1325 | + "_dd.origin": "lambda", |
| 1326 | + "_inferred_span.synchronicity": "sync", |
| 1327 | + "_inferred_span.tag_source": "self", |
| 1328 | + "apiid": "p62c47itsb", |
| 1329 | + "apiname": "p62c47itsb", |
| 1330 | + "connection_id": "Fc2tgfl3mjQCJfA=", |
| 1331 | + "endpoint": "$connect", |
| 1332 | + "event_type": "CONNECT", |
| 1333 | + "http.url": "p62c47itsb.execute-api.eu-west-1.amazonaws.com$connect", |
| 1334 | + "message_direction": "IN", |
| 1335 | + "operation_name": "aws.apigateway.websocket", |
| 1336 | + "request_id": "123", |
| 1337 | + "resource_names": "$connect", |
| 1338 | + "stage": "dev", |
| 1339 | + }, |
| 1340 | + ), |
| 1341 | + ), |
| 1342 | + ( |
| 1343 | + "api-gateway-websocket-disconnect", |
| 1344 | + _Span( |
| 1345 | + service="p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
| 1346 | + start=1631284034.737, |
| 1347 | + span_type="web", |
| 1348 | + tags={ |
| 1349 | + "_dd.origin": "lambda", |
| 1350 | + "_inferred_span.synchronicity": "sync", |
| 1351 | + "_inferred_span.tag_source": "self", |
| 1352 | + "apiid": "p62c47itsb", |
| 1353 | + "apiname": "p62c47itsb", |
| 1354 | + "connection_id": "Fc2tgfl3mjQCJfA=", |
| 1355 | + "endpoint": "$disconnect", |
| 1356 | + "event_type": "DISCONNECT", |
| 1357 | + "http.url": "p62c47itsb.execute-api.eu-west-1.amazonaws.com$disconnect", |
| 1358 | + "message_direction": "IN", |
| 1359 | + "operation_name": "aws.apigateway.websocket", |
| 1360 | + "request_id": "123", |
| 1361 | + "resource_names": "$disconnect", |
| 1362 | + "stage": "dev", |
| 1363 | + }, |
| 1364 | + ), |
| 1365 | + ), |
| 1366 | + ( |
| 1367 | + "sqs-string-msg-attribute", |
| 1368 | + _Span( |
| 1369 | + service="sqs", |
| 1370 | + start=1634662094.538, |
| 1371 | + span_type="web", |
| 1372 | + tags={ |
| 1373 | + "_dd.origin": "lambda", |
| 1374 | + "_inferred_span.synchronicity": "async", |
| 1375 | + "_inferred_span.tag_source": "self", |
| 1376 | + "event_source_arn": "arn:aws:sqs:eu-west-1:601427279990:InferredSpansQueueNode", |
| 1377 | + "operation_name": "aws.sqs", |
| 1378 | + "queuename": "InferredSpansQueueNode", |
| 1379 | + "resource_names": "InferredSpansQueueNode", |
| 1380 | + "sender_id": "AROAYYB64AB3LSVUYFP5T:harv-inferred-spans-dev-initSender", |
| 1381 | + }, |
| 1382 | + ), |
| 1383 | + ), |
| 1384 | + ( |
| 1385 | + "sns-string-msg-attribute", |
| 1386 | + _Span( |
| 1387 | + service="sns", |
| 1388 | + start=1643638421.637, |
| 1389 | + span_type="web", |
| 1390 | + tags={ |
| 1391 | + "_dd.origin": "lambda", |
| 1392 | + "_inferred_span.synchronicity": "async", |
| 1393 | + "_inferred_span.tag_source": "self", |
| 1394 | + "message_id": "87056a47-f506-5d77-908b-303605d3b197", |
| 1395 | + "operation_name": "aws.sns", |
| 1396 | + "resource_names": "serverlessTracingTopicPy", |
| 1397 | + "topic_arn": "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy", |
| 1398 | + "topicname": "serverlessTracingTopicPy", |
| 1399 | + "type": "Notification", |
| 1400 | + }, |
| 1401 | + ), |
| 1402 | + ), |
| 1403 | + ( |
| 1404 | + "sns-b64-msg-attribute", |
| 1405 | + _Span( |
| 1406 | + service="sns", |
| 1407 | + start=1643638421.637, |
| 1408 | + span_type="web", |
| 1409 | + tags={ |
| 1410 | + "_dd.origin": "lambda", |
| 1411 | + "_inferred_span.synchronicity": "async", |
| 1412 | + "_inferred_span.tag_source": "self", |
| 1413 | + "message_id": "87056a47-f506-5d77-908b-303605d3b197", |
| 1414 | + "operation_name": "aws.sns", |
| 1415 | + "resource_names": "serverlessTracingTopicPy", |
| 1416 | + "topic_arn": "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy", |
| 1417 | + "topicname": "serverlessTracingTopicPy", |
| 1418 | + "type": "Notification", |
| 1419 | + }, |
| 1420 | + ), |
| 1421 | + ), |
| 1422 | + ( |
| 1423 | + "kinesis", |
| 1424 | + _Span( |
| 1425 | + service="kinesis", |
| 1426 | + start=1643638425.163, |
| 1427 | + span_type="web", |
| 1428 | + tags={ |
| 1429 | + "_dd.origin": "lambda", |
| 1430 | + "_inferred_span.synchronicity": "async", |
| 1431 | + "_inferred_span.tag_source": "self", |
| 1432 | + "endpoint": None, |
| 1433 | + "event_id": "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", |
| 1434 | + "event_name": "aws:kinesis:record", |
| 1435 | + "event_source_arn": "arn:aws:kinesis:eu-west-1:601427279990:stream/kinesisStream", |
| 1436 | + "event_version": "1.0", |
| 1437 | + "http.method": None, |
| 1438 | + "http.url": None, |
| 1439 | + "operation_name": "aws.kinesis", |
| 1440 | + "partition_key": "partitionkey", |
| 1441 | + "request_id": None, |
| 1442 | + "resource_names": "stream/kinesisStream", |
| 1443 | + "shardid": "shardId-000000000002", |
| 1444 | + "streamname": "stream/kinesisStream", |
| 1445 | + }, |
| 1446 | + ), |
| 1447 | + ), |
| 1448 | + ( |
| 1449 | + "dynamodb", |
| 1450 | + _Span( |
| 1451 | + service="dynamodb", |
| 1452 | + start=1428537600.0, |
| 1453 | + span_type="web", |
| 1454 | + tags={ |
| 1455 | + "_dd.origin": "lambda", |
| 1456 | + "_inferred_span.synchronicity": "async", |
| 1457 | + "_inferred_span.tag_source": "self", |
| 1458 | + "endpoint": None, |
| 1459 | + "event_id": "c4ca4238a0b923820dcc509a6f75849b", |
| 1460 | + "event_name": "INSERT", |
| 1461 | + "event_source_arn": "arn:aws:dynamodb:us-east-1:123456789012:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", |
| 1462 | + "event_version": "1.1", |
| 1463 | + "http.method": None, |
| 1464 | + "http.url": None, |
| 1465 | + "operation_name": "aws.dynamodb", |
| 1466 | + "request_id": None, |
| 1467 | + "resource_names": "ExampleTableWithStream", |
| 1468 | + "size_bytes": "26", |
| 1469 | + "stream_view_type": "NEW_AND_OLD_IMAGES", |
| 1470 | + "tablename": "ExampleTableWithStream", |
| 1471 | + }, |
| 1472 | + ), |
| 1473 | + ), |
| 1474 | + ( |
| 1475 | + "s3", |
| 1476 | + _Span( |
| 1477 | + service="s3", |
| 1478 | + start=0.0, |
| 1479 | + span_type="web", |
| 1480 | + tags={ |
| 1481 | + "_dd.origin": "lambda", |
| 1482 | + "_inferred_span.synchronicity": "async", |
| 1483 | + "_inferred_span.tag_source": "self", |
| 1484 | + "bucket_arn": "arn:aws:s3:::example-bucket", |
| 1485 | + "bucketname": "example-bucket", |
| 1486 | + "endpoint": None, |
| 1487 | + "event_name": "ObjectCreated:Put", |
| 1488 | + "http.method": None, |
| 1489 | + "http.url": None, |
| 1490 | + "object_etag": "0123456789abcdef0123456789abcdef", |
| 1491 | + "object_key": "test/key", |
| 1492 | + "object_size": "1024", |
| 1493 | + "operation_name": "aws.s3", |
| 1494 | + "request_id": None, |
| 1495 | + "resource_names": "example-bucket", |
| 1496 | + }, |
| 1497 | + ), |
| 1498 | + ), |
| 1499 | + ( |
| 1500 | + "eventbridge-custom", |
| 1501 | + _Span( |
| 1502 | + service="eventbridge", |
| 1503 | + start=1635989865.0, |
| 1504 | + span_type="web", |
| 1505 | + tags={ |
| 1506 | + "_dd.origin": "lambda", |
| 1507 | + "_inferred_span.synchronicity": "async", |
| 1508 | + "_inferred_span.tag_source": "self", |
| 1509 | + "endpoint": None, |
| 1510 | + "http.method": None, |
| 1511 | + "http.url": None, |
| 1512 | + "operation_name": "aws.eventbridge", |
| 1513 | + "request_id": None, |
| 1514 | + "resource_names": "eventbridge.custom.event.sender", |
| 1515 | + }, |
| 1516 | + ), |
| 1517 | + ), |
| 1518 | + ( |
| 1519 | + "eventbridge-sqs", |
| 1520 | + _Span( |
| 1521 | + service="sqs", |
| 1522 | + start=1691102943.638, |
| 1523 | + span_type="web", |
| 1524 | + parent_name="aws.eventbridge", |
| 1525 | + tags={ |
| 1526 | + "_dd.origin": "lambda", |
| 1527 | + "_inferred_span.synchronicity": "async", |
| 1528 | + "_inferred_span.tag_source": "self", |
| 1529 | + "endpoint": None, |
| 1530 | + "event_source_arn": "arn:aws:sqs:us-east-1:425362996713:eventbridge-sqs-queue", |
| 1531 | + "http.method": None, |
| 1532 | + "http.url": None, |
| 1533 | + "operation_name": "aws.sqs", |
| 1534 | + "queuename": "eventbridge-sqs-queue", |
| 1535 | + "request_id": None, |
| 1536 | + "resource_names": "eventbridge-sqs-queue", |
| 1537 | + "sender_id": "AIDAJXNJGGKNS7OSV23OI", |
| 1538 | + }, |
| 1539 | + ), |
| 1540 | + ), |
| 1541 | + ( |
| 1542 | + "api-gateway-no-apiid", |
| 1543 | + _Span( |
| 1544 | + service="70ixmpl4fl.execute-api.us-east-2.amazonaws.com", |
| 1545 | + start=1428582896.0, |
| 1546 | + span_type="http", |
| 1547 | + tags={ |
| 1548 | + "_dd.origin": "lambda", |
| 1549 | + "_inferred_span.synchronicity": "sync", |
| 1550 | + "_inferred_span.tag_source": "self", |
| 1551 | + "apiid": "None", |
| 1552 | + "apiname": "None", |
| 1553 | + "endpoint": "/path/to/resource", |
| 1554 | + "http.method": "POST", |
| 1555 | + "http.url": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource", |
| 1556 | + "operation_name": "aws.apigateway.rest", |
| 1557 | + "request_id": "123", |
| 1558 | + "resource_names": "POST /path/to/resource", |
| 1559 | + "stage": "prod", |
| 1560 | + }, |
| 1561 | + ), |
| 1562 | + ), |
| 1563 | + ( |
| 1564 | + "authorizer-request-api-gateway-v1", |
| 1565 | + _Span( |
| 1566 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1567 | + start=1663295021.832, |
| 1568 | + span_type="http", |
| 1569 | + parent_name="aws.apigateway.authorizer", |
| 1570 | + tags={ |
| 1571 | + "_dd.origin": "lambda", |
| 1572 | + "_inferred_span.synchronicity": "sync", |
| 1573 | + "_inferred_span.tag_source": "self", |
| 1574 | + "apiid": "amddr1rix9", |
| 1575 | + "apiname": "amddr1rix9", |
| 1576 | + "endpoint": "/hello", |
| 1577 | + "http.method": "GET", |
| 1578 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1579 | + "operation_name": "aws.apigateway.rest", |
| 1580 | + "request_id": "123", |
| 1581 | + "resource_names": "GET /hello", |
| 1582 | + "stage": "dev", |
| 1583 | + }, |
| 1584 | + ), |
| 1585 | + ), |
| 1586 | + ( |
| 1587 | + "authorizer-request-api-gateway-v1-cached", |
| 1588 | + _Span( |
| 1589 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1590 | + start=1666714653.636, |
| 1591 | + span_type="http", |
| 1592 | + tags={ |
| 1593 | + "_dd.origin": "lambda", |
| 1594 | + "_inferred_span.synchronicity": "sync", |
| 1595 | + "_inferred_span.tag_source": "self", |
| 1596 | + "apiid": "amddr1rix9", |
| 1597 | + "apiname": "amddr1rix9", |
| 1598 | + "endpoint": "/hello", |
| 1599 | + "http.method": "GET", |
| 1600 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1601 | + "operation_name": "aws.apigateway.rest", |
| 1602 | + "request_id": "123", |
| 1603 | + "resource_names": "GET /hello", |
| 1604 | + "stage": "dev", |
| 1605 | + }, |
| 1606 | + ), |
| 1607 | + ), |
| 1608 | + ( |
| 1609 | + "authorizer-token-api-gateway-v1", |
| 1610 | + _Span( |
| 1611 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1612 | + start=1663295021.832, |
| 1613 | + span_type="http", |
| 1614 | + parent_name="aws.apigateway.authorizer", |
| 1615 | + tags={ |
| 1616 | + "_dd.origin": "lambda", |
| 1617 | + "_inferred_span.synchronicity": "sync", |
| 1618 | + "_inferred_span.tag_source": "self", |
| 1619 | + "apiid": "amddr1rix9", |
| 1620 | + "apiname": "amddr1rix9", |
| 1621 | + "endpoint": "/hello", |
| 1622 | + "http.method": "GET", |
| 1623 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1624 | + "operation_name": "aws.apigateway.rest", |
| 1625 | + "request_id": "123", |
| 1626 | + "resource_names": "GET /hello", |
| 1627 | + "stage": "dev", |
| 1628 | + }, |
| 1629 | + ), |
| 1630 | + ), |
| 1631 | + ( |
| 1632 | + "authorizer-token-api-gateway-v1-cached", |
| 1633 | + _Span( |
| 1634 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1635 | + start=1666803622.99, |
| 1636 | + span_type="http", |
| 1637 | + tags={ |
| 1638 | + "_dd.origin": "lambda", |
| 1639 | + "_inferred_span.synchronicity": "sync", |
| 1640 | + "_inferred_span.tag_source": "self", |
| 1641 | + "apiid": "amddr1rix9", |
| 1642 | + "apiname": "amddr1rix9", |
| 1643 | + "endpoint": "/hello", |
| 1644 | + "http.method": "GET", |
| 1645 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1646 | + "operation_name": "aws.apigateway.rest", |
| 1647 | + "request_id": "123", |
| 1648 | + "resource_names": "GET /hello", |
| 1649 | + "stage": "dev", |
| 1650 | + }, |
| 1651 | + ), |
| 1652 | + ), |
| 1653 | + ( |
| 1654 | + "authorizer-request-api-gateway-v2", |
| 1655 | + _Span( |
| 1656 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1657 | + start=1664228639.5337753, |
| 1658 | + span_type="http", |
| 1659 | + tags={ |
| 1660 | + "_dd.origin": "lambda", |
| 1661 | + "_inferred_span.synchronicity": "sync", |
| 1662 | + "_inferred_span.tag_source": "self", |
| 1663 | + "apiid": "amddr1rix9", |
| 1664 | + "apiname": "amddr1rix9", |
| 1665 | + "endpoint": "/hello", |
| 1666 | + "http.method": "GET", |
| 1667 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1668 | + "operation_name": "aws.httpapi", |
| 1669 | + "request_id": "123", |
| 1670 | + "resource_names": "GET /hello", |
| 1671 | + "stage": "dev", |
| 1672 | + }, |
| 1673 | + ), |
| 1674 | + ), |
| 1675 | + ( |
| 1676 | + "authorizer-request-api-gateway-v2-cached", |
| 1677 | + _Span( |
| 1678 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1679 | + start=1666715429.349, |
| 1680 | + span_type="http", |
| 1681 | + tags={ |
| 1682 | + "_dd.origin": "lambda", |
| 1683 | + "_inferred_span.synchronicity": "sync", |
| 1684 | + "_inferred_span.tag_source": "self", |
| 1685 | + "apiid": "amddr1rix9", |
| 1686 | + "apiname": "amddr1rix9", |
| 1687 | + "endpoint": "/hello", |
| 1688 | + "http.method": "GET", |
| 1689 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com/hello", |
| 1690 | + "operation_name": "aws.httpapi", |
| 1691 | + "request_id": "123", |
| 1692 | + "resource_names": "GET /hello", |
| 1693 | + "stage": "dev", |
| 1694 | + }, |
| 1695 | + ), |
| 1696 | + ), |
| 1697 | + ( |
| 1698 | + "authorizer-request-api-gateway-websocket-connect", |
| 1699 | + _Span( |
| 1700 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1701 | + start=1664388386.892, |
| 1702 | + span_type="web", |
| 1703 | + parent_name="aws.apigateway.authorizer", |
| 1704 | + tags={ |
| 1705 | + "_dd.origin": "lambda", |
| 1706 | + "_inferred_span.synchronicity": "sync", |
| 1707 | + "_inferred_span.tag_source": "self", |
| 1708 | + "apiid": "amddr1rix9", |
| 1709 | + "apiname": "amddr1rix9", |
| 1710 | + "connection_id": "ZLr9QeNLmjQCIZA=", |
| 1711 | + "endpoint": "$connect", |
| 1712 | + "event_type": "CONNECT", |
| 1713 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.com$connect", |
| 1714 | + "message_direction": "IN", |
| 1715 | + "operation_name": "aws.apigateway.websocket", |
| 1716 | + "request_id": "123", |
| 1717 | + "resource_names": "$connect", |
| 1718 | + "stage": "dev", |
| 1719 | + }, |
| 1720 | + ), |
| 1721 | + ), |
| 1722 | + ( |
| 1723 | + "authorizer-request-api-gateway-websocket-message", |
| 1724 | + _Span( |
| 1725 | + service="amddr1rix9.execute-api.eu-west-1.amazonaws.com", |
| 1726 | + start=1664390397.1169999, |
| 1727 | + span_type="web", |
| 1728 | + tags={ |
| 1729 | + "_dd.origin": "lambda", |
| 1730 | + "_inferred_span.synchronicity": "sync", |
| 1731 | + "_inferred_span.tag_source": "self", |
| 1732 | + "apiid": "amddr1rix9", |
| 1733 | + "apiname": "amddr1rix9", |
| 1734 | + "connection_id": "ZLwtceO1mjQCI8Q=", |
| 1735 | + "endpoint": "main", |
| 1736 | + "event_type": "MESSAGE", |
| 1737 | + "http.url": "amddr1rix9.execute-api.eu-west-1.amazonaws.commain", |
| 1738 | + "message_direction": "IN", |
| 1739 | + "operation_name": "aws.apigateway.websocket", |
| 1740 | + "request_id": "123", |
| 1741 | + "resource_names": "main", |
| 1742 | + "stage": "dev", |
| 1743 | + }, |
| 1744 | + ), |
| 1745 | + ), |
| 1746 | +) |
1375 | 1747 |
|
1376 |
| - def test_create_inferred_span_from_api_gateway_event(self): |
1377 |
| - event_sample_source = "api-gateway" |
1378 |
| - test_file = event_samples + event_sample_source + ".json" |
1379 |
| - with open(test_file, "r") as event: |
1380 |
| - event = json.load(event) |
1381 |
| - ctx = get_mock_context() |
1382 |
| - ctx.aws_request_id = "123" |
1383 |
| - span = create_inferred_span(event, ctx) |
1384 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") |
1385 |
| - self.assertEqual( |
1386 |
| - span.service, |
1387 |
| - "70ixmpl4fl.execute-api.us-east-2.amazonaws.com", |
1388 |
| - ) |
1389 |
| - self.assertEqual( |
1390 |
| - span.get_tag("http.url"), |
1391 |
| - "70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource", |
1392 |
| - ) |
1393 |
| - self.assertEqual(span.get_tag("endpoint"), "/path/to/resource") |
1394 |
| - self.assertEqual(span.get_tag("http.method"), "POST") |
1395 |
| - self.assertEqual( |
1396 |
| - span.get_tag("resource_names"), |
1397 |
| - "POST /path/to/resource", |
1398 |
| - ) |
1399 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1400 |
| - self.assertEqual(span.get_tag("apiid"), "1234567890") |
1401 |
| - self.assertEqual(span.get_tag("apiname"), "1234567890") |
1402 |
| - self.assertEqual(span.get_tag("stage"), "prod") |
1403 |
| - self.assertEqual(span.start, 1428582896.0) |
1404 |
| - self.assertEqual(span.span_type, "http") |
1405 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1406 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1407 |
| - |
1408 |
| - def test_create_inferred_span_from_api_gateway_non_proxy_event_async(self): |
1409 |
| - event_sample_source = "api-gateway-non-proxy-async" |
1410 |
| - test_file = event_samples + event_sample_source + ".json" |
1411 |
| - with open(test_file, "r") as event: |
1412 |
| - event = json.load(event) |
1413 |
| - ctx = get_mock_context() |
1414 |
| - ctx.aws_request_id = "123" |
1415 |
| - span = create_inferred_span(event, ctx) |
1416 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") |
1417 |
| - self.assertEqual( |
1418 |
| - span.service, |
1419 |
| - "lgxbo6a518.execute-api.eu-west-1.amazonaws.com", |
1420 |
| - ) |
1421 |
| - self.assertEqual( |
1422 |
| - span.get_tag("http.url"), |
1423 |
| - "lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get", |
1424 |
| - ) |
1425 |
| - self.assertEqual(span.get_tag("endpoint"), "/http/get") |
1426 |
| - self.assertEqual(span.get_tag("http.method"), "GET") |
1427 |
| - self.assertEqual( |
1428 |
| - span.get_tag("resource_names"), |
1429 |
| - "GET /http/get", |
1430 |
| - ) |
1431 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1432 |
| - self.assertEqual(span.get_tag("apiid"), "lgxbo6a518") |
1433 |
| - self.assertEqual(span.get_tag("apiname"), "lgxbo6a518") |
1434 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
1435 |
| - self.assertEqual(span.start, 1631210915.2510002) |
1436 |
| - self.assertEqual(span.span_type, "http") |
1437 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1438 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1439 |
| - |
1440 |
| - def test_create_inferred_span_from_api_gateway_non_proxy_event_sync(self): |
1441 |
| - event_sample_source = "api-gateway-non-proxy" |
1442 |
| - test_file = event_samples + event_sample_source + ".json" |
1443 |
| - with open(test_file, "r") as event: |
1444 |
| - event = json.load(event) |
1445 |
| - ctx = get_mock_context() |
1446 |
| - ctx.aws_request_id = "123" |
1447 |
| - span = create_inferred_span(event, ctx) |
1448 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") |
1449 |
| - self.assertEqual( |
1450 |
| - span.service, |
1451 |
| - "lgxbo6a518.execute-api.eu-west-1.amazonaws.com", |
1452 |
| - ) |
1453 |
| - self.assertEqual( |
1454 |
| - span.get_tag("http.url"), |
1455 |
| - "lgxbo6a518.execute-api.eu-west-1.amazonaws.com/http/get", |
1456 |
| - ) |
1457 |
| - self.assertEqual(span.get_tag("endpoint"), "/http/get") |
1458 |
| - self.assertEqual(span.get_tag("http.method"), "GET") |
1459 |
| - self.assertEqual( |
1460 |
| - span.get_tag("resource_names"), |
1461 |
| - "GET /http/get", |
1462 |
| - ) |
1463 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1464 |
| - self.assertEqual(span.get_tag("apiid"), "lgxbo6a518") |
1465 |
| - self.assertEqual(span.get_tag("apiname"), "lgxbo6a518") |
1466 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
1467 |
| - self.assertEqual(span.start, 1631210915.2510002) |
1468 |
| - self.assertEqual(span.span_type, "http") |
1469 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1470 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1471 |
| - |
1472 |
| - def test_create_inferred_span_from_http_api_event(self): |
1473 |
| - event_sample_source = "http-api" |
1474 |
| - test_file = event_samples + event_sample_source + ".json" |
1475 |
| - with open(test_file, "r") as event: |
1476 |
| - event = json.load(event) |
1477 |
| - ctx = get_mock_context() |
1478 |
| - ctx.aws_request_id = "123" |
1479 |
| - span = create_inferred_span(event, ctx) |
1480 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.httpapi") |
1481 |
| - self.assertEqual( |
1482 |
| - span.service, |
1483 |
| - "x02yirxc7a.execute-api.eu-west-1.amazonaws.com", |
1484 |
| - ) |
1485 |
| - self.assertEqual( |
1486 |
| - span.get_tag("http.url"), |
1487 |
| - "x02yirxc7a.execute-api.eu-west-1.amazonaws.com/httpapi/get", |
1488 |
| - ) |
1489 |
| - self.assertEqual(span.get_tag("endpoint"), "/httpapi/get") |
1490 |
| - self.assertEqual(span.get_tag("http.method"), "GET") |
1491 |
| - self.assertEqual( |
1492 |
| - span.get_tag("resource_names"), |
1493 |
| - "GET /httpapi/get", |
1494 |
| - ) |
1495 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1496 |
| - self.assertEqual(span.get_tag("apiid"), "x02yirxc7a") |
1497 |
| - self.assertEqual(span.get_tag("apiname"), "x02yirxc7a") |
1498 |
| - self.assertEqual(span.get_tag("stage"), "$default") |
1499 |
| - self.assertEqual(span.get_tag("http.protocol"), "HTTP/1.1") |
1500 |
| - self.assertEqual(span.get_tag("http.source_ip"), "38.122.226.210") |
1501 |
| - self.assertEqual(span.get_tag("http.user_agent"), "curl/7.64.1") |
1502 |
| - self.assertEqual(span.start, 1631212283.738) |
1503 |
| - self.assertEqual(span.span_type, "http") |
1504 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1505 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1506 |
| - |
1507 |
| - def test_create_inferred_span_from_api_gateway_websocket_default_event(self): |
1508 |
| - event_sample_source = "api-gateway-websocket-default" |
1509 |
| - test_file = event_samples + event_sample_source + ".json" |
1510 |
| - with open(test_file, "r") as event: |
1511 |
| - event = json.load(event) |
1512 |
| - ctx = get_mock_context() |
1513 |
| - ctx.aws_request_id = "123" |
1514 |
| - span = create_inferred_span(event, ctx) |
1515 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") |
1516 |
| - self.assertEqual( |
1517 |
| - span.service, |
1518 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
1519 |
| - ) |
1520 |
| - self.assertEqual( |
1521 |
| - span.get_tag("http.url"), |
1522 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com$default", |
1523 |
| - ) |
1524 |
| - self.assertEqual(span.get_tag("endpoint"), "$default") |
1525 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1526 |
| - self.assertEqual( |
1527 |
| - span.get_tag("resource_names"), |
1528 |
| - "$default", |
1529 |
| - ) |
1530 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1531 |
| - self.assertEqual(span.get_tag("apiid"), "p62c47itsb") |
1532 |
| - self.assertEqual(span.get_tag("apiname"), "p62c47itsb") |
1533 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
1534 |
| - self.assertEqual(span.get_tag("connection_id"), "Fc5SzcoYGjQCJlg=") |
1535 |
| - self.assertEqual(span.get_tag("event_type"), "MESSAGE") |
1536 |
| - self.assertEqual(span.get_tag("message_direction"), "IN") |
1537 |
| - self.assertEqual(span.start, 1631285061.365) |
1538 |
| - self.assertEqual(span.span_type, "web") |
1539 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1540 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1541 |
| - |
1542 |
| - def test_create_inferred_span_from_api_gateway_websocket_connect_event(self): |
1543 |
| - event_sample_source = "api-gateway-websocket-connect" |
1544 |
| - test_file = event_samples + event_sample_source + ".json" |
1545 |
| - with open(test_file, "r") as event: |
1546 |
| - event = json.load(event) |
1547 |
| - ctx = get_mock_context() |
1548 |
| - ctx.aws_request_id = "123" |
1549 |
| - span = create_inferred_span(event, ctx) |
1550 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") |
1551 |
| - self.assertEqual( |
1552 |
| - span.service, |
1553 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
1554 |
| - ) |
1555 |
| - self.assertEqual( |
1556 |
| - span.get_tag("http.url"), |
1557 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com$connect", |
1558 |
| - ) |
1559 |
| - self.assertEqual(span.get_tag("endpoint"), "$connect") |
1560 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1561 |
| - self.assertEqual( |
1562 |
| - span.get_tag("resource_names"), |
1563 |
| - "$connect", |
1564 |
| - ) |
1565 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1566 |
| - self.assertEqual(span.get_tag("apiid"), "p62c47itsb") |
1567 |
| - self.assertEqual(span.get_tag("apiname"), "p62c47itsb") |
1568 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
1569 |
| - self.assertEqual(span.get_tag("connection_id"), "Fc2tgfl3mjQCJfA=") |
1570 |
| - self.assertEqual(span.get_tag("event_type"), "CONNECT") |
1571 |
| - self.assertEqual(span.get_tag("message_direction"), "IN") |
1572 |
| - self.assertEqual(span.start, 1631284003.071) |
1573 |
| - self.assertEqual(span.span_type, "web") |
1574 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1575 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1576 |
| - |
1577 |
| - def test_create_inferred_span_from_api_gateway_websocket_disconnect_event(self): |
1578 |
| - event_sample_source = "api-gateway-websocket-disconnect" |
1579 |
| - test_file = event_samples + event_sample_source + ".json" |
1580 |
| - with open(test_file, "r") as event: |
1581 |
| - event = json.load(event) |
1582 |
| - ctx = get_mock_context() |
1583 |
| - ctx.aws_request_id = "123" |
1584 |
| - span = create_inferred_span(event, ctx) |
1585 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.websocket") |
1586 |
| - self.assertEqual( |
1587 |
| - span.service, |
1588 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com", |
1589 |
| - ) |
1590 |
| - self.assertEqual( |
1591 |
| - span.get_tag("http.url"), |
1592 |
| - "p62c47itsb.execute-api.eu-west-1.amazonaws.com$disconnect", |
1593 |
| - ) |
1594 |
| - self.assertEqual(span.get_tag("endpoint"), "$disconnect") |
1595 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1596 |
| - self.assertEqual( |
1597 |
| - span.get_tag("resource_names"), |
1598 |
| - "$disconnect", |
1599 |
| - ) |
1600 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
1601 |
| - self.assertEqual(span.get_tag("apiid"), "p62c47itsb") |
1602 |
| - self.assertEqual(span.get_tag("apiname"), "p62c47itsb") |
1603 |
| - self.assertEqual(span.get_tag("stage"), "dev") |
1604 |
| - self.assertEqual(span.get_tag("connection_id"), "Fc2tgfl3mjQCJfA=") |
1605 |
| - self.assertEqual(span.get_tag("event_type"), "DISCONNECT") |
1606 |
| - self.assertEqual(span.get_tag("message_direction"), "IN") |
1607 |
| - self.assertEqual(span.start, 1631284034.737) |
1608 |
| - self.assertEqual(span.span_type, "web") |
1609 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1610 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
1611 |
| - |
1612 |
| - def test_create_inferred_span_from_sqs_event_string_msg_attr(self): |
1613 |
| - event_sample_name = "sqs-string-msg-attribute" |
1614 |
| - test_file = event_samples + event_sample_name + ".json" |
1615 |
| - with open(test_file, "r") as event: |
1616 |
| - event = json.load(event) |
1617 |
| - ctx = get_mock_context() |
1618 |
| - ctx.aws_request_id = "123" |
1619 |
| - span = create_inferred_span(event, ctx) |
1620 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.sqs") |
1621 |
| - self.assertEqual( |
1622 |
| - span.service, |
1623 |
| - "sqs", |
1624 |
| - ) |
1625 |
| - self.assertEqual( |
1626 |
| - span.get_tag("http.url"), |
1627 |
| - None, |
1628 |
| - ) |
1629 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1630 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1631 |
| - self.assertEqual( |
1632 |
| - span.get_tag("resource_names"), |
1633 |
| - "InferredSpansQueueNode", |
1634 |
| - ) |
1635 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1636 |
| - self.assertEqual(span.get_tag("queuename"), "InferredSpansQueueNode") |
1637 |
| - self.assertEqual( |
1638 |
| - span.get_tag("event_source_arn"), |
1639 |
| - "arn:aws:sqs:eu-west-1:601427279990:InferredSpansQueueNode", |
1640 |
| - ) |
1641 |
| - self.assertEqual( |
1642 |
| - span.get_tag("sender_id"), |
1643 |
| - "AROAYYB64AB3LSVUYFP5T:harv-inferred-spans-dev-initSender", |
1644 |
| - ) |
1645 |
| - self.assertEqual(span.start, 1634662094.538) |
1646 |
| - self.assertEqual(span.span_type, "web") |
1647 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1648 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1649 |
| - |
1650 |
| - def test_create_inferred_span_from_sns_event_string_msg_attr(self): |
1651 |
| - event_sample_name = "sns-string-msg-attribute" |
1652 |
| - test_file = event_samples + event_sample_name + ".json" |
1653 |
| - with open(test_file, "r") as event: |
1654 |
| - event = json.load(event) |
1655 |
| - ctx = get_mock_context() |
1656 |
| - ctx.aws_request_id = "123" |
1657 |
| - span = create_inferred_span(event, ctx) |
1658 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.sns") |
1659 |
| - self.assertEqual( |
1660 |
| - span.service, |
1661 |
| - "sns", |
1662 |
| - ) |
1663 |
| - self.assertEqual( |
1664 |
| - span.get_tag("http.url"), |
1665 |
| - None, |
1666 |
| - ) |
1667 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1668 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1669 |
| - self.assertEqual( |
1670 |
| - span.get_tag("resource_names"), |
1671 |
| - "serverlessTracingTopicPy", |
1672 |
| - ) |
1673 |
| - self.assertEqual(span.get_tag("topicname"), "serverlessTracingTopicPy") |
1674 |
| - self.assertEqual( |
1675 |
| - span.get_tag("topic_arn"), |
1676 |
| - "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy", |
1677 |
| - ) |
1678 |
| - self.assertEqual( |
1679 |
| - span.get_tag("message_id"), "87056a47-f506-5d77-908b-303605d3b197" |
1680 |
| - ) |
1681 |
| - self.assertEqual(span.get_tag("type"), "Notification") |
1682 |
| - self.assertEqual(span.get_tag("subject"), None) |
1683 |
| - self.assertEqual(span.start, 1643638421.637) |
1684 |
| - self.assertEqual(span.span_type, "web") |
1685 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1686 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1687 |
| - |
1688 |
| - def test_create_inferred_span_from_sns_event_b64_msg_attr(self): |
1689 |
| - event_sample_name = "sns-b64-msg-attribute" |
1690 |
| - test_file = event_samples + event_sample_name + ".json" |
1691 |
| - with open(test_file, "r") as event: |
1692 |
| - event = json.load(event) |
1693 |
| - ctx = get_mock_context() |
1694 |
| - ctx.aws_request_id = "123" |
1695 |
| - span = create_inferred_span(event, ctx) |
1696 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.sns") |
1697 |
| - self.assertEqual( |
1698 |
| - span.service, |
1699 |
| - "sns", |
1700 |
| - ) |
1701 |
| - self.assertEqual( |
1702 |
| - span.get_tag("http.url"), |
1703 |
| - None, |
1704 |
| - ) |
1705 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1706 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1707 |
| - self.assertEqual( |
1708 |
| - span.get_tag("resource_names"), |
1709 |
| - "serverlessTracingTopicPy", |
1710 |
| - ) |
1711 |
| - self.assertEqual(span.get_tag("topicname"), "serverlessTracingTopicPy") |
1712 |
| - self.assertEqual( |
1713 |
| - span.get_tag("topic_arn"), |
1714 |
| - "arn:aws:sns:eu-west-1:601427279990:serverlessTracingTopicPy", |
1715 |
| - ) |
1716 |
| - self.assertEqual( |
1717 |
| - span.get_tag("message_id"), "87056a47-f506-5d77-908b-303605d3b197" |
1718 |
| - ) |
1719 |
| - self.assertEqual(span.get_tag("type"), "Notification") |
1720 |
| - self.assertEqual(span.get_tag("subject"), None) |
1721 |
| - self.assertEqual(span.start, 1643638421.637) |
1722 |
| - self.assertEqual(span.span_type, "web") |
1723 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1724 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1725 |
| - |
1726 |
| - def test_create_inferred_span_from_kinesis_event(self): |
1727 |
| - event_sample_source = "kinesis" |
1728 |
| - test_file = event_samples + event_sample_source + ".json" |
1729 |
| - with open(test_file, "r") as event: |
1730 |
| - event = json.load(event) |
1731 |
| - ctx = get_mock_context() |
1732 |
| - ctx.aws_request_id = "123" |
1733 |
| - span = create_inferred_span(event, ctx) |
1734 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.kinesis") |
1735 |
| - self.assertEqual( |
1736 |
| - span.service, |
1737 |
| - "kinesis", |
1738 |
| - ) |
1739 |
| - self.assertEqual( |
1740 |
| - span.get_tag("http.url"), |
1741 |
| - None, |
1742 |
| - ) |
1743 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1744 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1745 |
| - self.assertEqual( |
1746 |
| - span.get_tag("resource_names"), |
1747 |
| - "stream/kinesisStream", |
1748 |
| - ) |
1749 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1750 |
| - self.assertEqual(span.get_tag("streamname"), "stream/kinesisStream") |
1751 |
| - self.assertEqual(span.get_tag("shardid"), "shardId-000000000002") |
1752 |
| - self.assertEqual( |
1753 |
| - span.get_tag("event_source_arn"), |
1754 |
| - "arn:aws:kinesis:eu-west-1:601427279990:stream/kinesisStream", |
1755 |
| - ) |
1756 |
| - self.assertEqual( |
1757 |
| - span.get_tag("event_id"), |
1758 |
| - "shardId-000000000002:49624230154685806402418173680709770494154422022871973922", |
1759 |
| - ) |
1760 |
| - self.assertEqual(span.get_tag("event_name"), "aws:kinesis:record") |
1761 |
| - self.assertEqual(span.get_tag("event_version"), "1.0") |
1762 |
| - self.assertEqual(span.get_tag("partition_key"), "partitionkey") |
1763 |
| - self.assertEqual(span.start, 1643638425.163) |
1764 |
| - self.assertEqual(span.span_type, "web") |
1765 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1766 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1767 |
| - |
1768 |
| - def test_create_inferred_span_from_dynamodb_event(self): |
1769 |
| - event_sample_source = "dynamodb" |
1770 |
| - test_file = event_samples + event_sample_source + ".json" |
1771 |
| - with open(test_file, "r") as event: |
1772 |
| - event = json.load(event) |
1773 |
| - ctx = get_mock_context() |
1774 |
| - ctx.aws_request_id = "123" |
1775 |
| - span = create_inferred_span(event, ctx) |
1776 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.dynamodb") |
1777 |
| - self.assertEqual( |
1778 |
| - span.service, |
1779 |
| - "dynamodb", |
1780 |
| - ) |
1781 |
| - self.assertEqual( |
1782 |
| - span.get_tag("http.url"), |
1783 |
| - None, |
1784 |
| - ) |
1785 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1786 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1787 |
| - self.assertEqual( |
1788 |
| - span.get_tag("resource_names"), |
1789 |
| - "ExampleTableWithStream", |
1790 |
| - ) |
1791 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1792 |
| - self.assertEqual(span.get_tag("tablename"), "ExampleTableWithStream") |
1793 |
| - self.assertEqual( |
1794 |
| - span.get_tag("event_source_arn"), |
1795 |
| - "arn:aws:dynamodb:us-east-1:123456789012:table/ExampleTableWithStream/stream/2015-06-27T00:48:05.899", |
1796 |
| - ) |
1797 |
| - self.assertEqual(span.get_tag("event_id"), "c4ca4238a0b923820dcc509a6f75849b") |
1798 |
| - self.assertEqual(span.get_tag("event_name"), "INSERT") |
1799 |
| - self.assertEqual(span.get_tag("event_version"), "1.1") |
1800 |
| - self.assertEqual(span.get_tag("stream_view_type"), "NEW_AND_OLD_IMAGES") |
1801 |
| - self.assertEqual(span.get_tag("size_bytes"), "26") |
1802 |
| - self.assertEqual(span.start, 1428537600.0) |
1803 |
| - self.assertEqual(span.span_type, "web") |
1804 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1805 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1806 |
| - |
1807 |
| - def test_create_inferred_span_from_s3_event(self): |
1808 |
| - event_sample_source = "s3" |
1809 |
| - test_file = event_samples + event_sample_source + ".json" |
1810 |
| - with open(test_file, "r") as event: |
1811 |
| - event = json.load(event) |
1812 |
| - ctx = get_mock_context() |
1813 |
| - ctx.aws_request_id = "123" |
1814 |
| - span = create_inferred_span(event, ctx) |
1815 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.s3") |
1816 |
| - self.assertEqual( |
1817 |
| - span.service, |
1818 |
| - "s3", |
1819 |
| - ) |
1820 |
| - self.assertEqual( |
1821 |
| - span.get_tag("http.url"), |
1822 |
| - None, |
1823 |
| - ) |
1824 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1825 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1826 |
| - self.assertEqual( |
1827 |
| - span.get_tag("resource_names"), |
1828 |
| - "example-bucket", |
1829 |
| - ) |
1830 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1831 |
| - self.assertEqual(span.get_tag("event_name"), "ObjectCreated:Put") |
1832 |
| - self.assertEqual(span.get_tag("bucketname"), "example-bucket") |
1833 |
| - self.assertEqual(span.get_tag("bucket_arn"), "arn:aws:s3:::example-bucket") |
1834 |
| - self.assertEqual(span.get_tag("object_key"), "test/key") |
1835 |
| - self.assertEqual(span.get_tag("object_size"), "1024") |
1836 |
| - self.assertEqual( |
1837 |
| - span.get_tag("object_etag"), "0123456789abcdef0123456789abcdef" |
1838 |
| - ) |
1839 |
| - self.assertEqual(span.start, 0.0) |
1840 |
| - self.assertEqual(span.span_type, "web") |
1841 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1842 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1843 | 1748 |
|
1844 |
| - def test_create_inferred_span_from_eventbridge_event(self): |
1845 |
| - event_sample_source = "eventbridge-custom" |
1846 |
| - test_file = event_samples + event_sample_source + ".json" |
1847 |
| - with open(test_file, "r") as event: |
1848 |
| - event = json.load(event) |
1849 |
| - ctx = get_mock_context() |
1850 |
| - ctx.aws_request_id = "123" |
1851 |
| - span = create_inferred_span(event, ctx) |
1852 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.eventbridge") |
1853 |
| - self.assertEqual( |
1854 |
| - span.service, |
1855 |
| - "eventbridge", |
1856 |
| - ) |
1857 |
| - self.assertEqual( |
1858 |
| - span.get_tag("http.url"), |
1859 |
| - None, |
1860 |
| - ) |
1861 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1862 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1863 |
| - self.assertEqual( |
1864 |
| - span.get_tag("resource_names"), |
1865 |
| - "eventbridge.custom.event.sender", |
1866 |
| - ) |
1867 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1868 |
| - self.assertEqual(span.start, 1635989865.0) |
1869 |
| - self.assertEqual(span.span_type, "web") |
1870 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1871 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
1872 |
| - |
1873 |
| - def test_create_inferred_span_from_eventbridge_sqs_event(self): |
1874 |
| - event_sample_name = "eventbridge-sqs" |
1875 |
| - test_file = event_samples + event_sample_name + ".json" |
1876 |
| - with open(test_file, "r") as event: |
1877 |
| - event = json.load(event) |
1878 |
| - ctx = get_mock_context() |
1879 |
| - ctx.aws_request_id = "123" |
1880 |
| - span = create_inferred_span(event, ctx) |
1881 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.sqs") |
1882 |
| - self.assertEqual( |
1883 |
| - span.service, |
1884 |
| - "sqs", |
1885 |
| - ) |
1886 |
| - self.assertEqual( |
1887 |
| - span.get_tag("http.url"), |
1888 |
| - None, |
1889 |
| - ) |
1890 |
| - self.assertEqual(span.get_tag("endpoint"), None) |
1891 |
| - self.assertEqual(span.get_tag("http.method"), None) |
1892 |
| - self.assertEqual( |
1893 |
| - span.get_tag("resource_names"), |
1894 |
| - "eventbridge-sqs-queue", |
1895 |
| - ) |
1896 |
| - self.assertEqual(span.get_tag("request_id"), None) |
1897 |
| - self.assertEqual(span.get_tag("queuename"), "eventbridge-sqs-queue") |
1898 |
| - self.assertEqual( |
1899 |
| - span.get_tag("event_source_arn"), |
1900 |
| - "arn:aws:sqs:us-east-1:425362996713:eventbridge-sqs-queue", |
1901 |
| - ) |
1902 |
| - self.assertEqual( |
1903 |
| - span.get_tag("sender_id"), |
1904 |
| - "AIDAJXNJGGKNS7OSV23OI", |
1905 |
| - ) |
1906 |
| - self.assertEqual(span.start, 1691102943.638) |
1907 |
| - self.assertEqual(span.span_type, "web") |
1908 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
1909 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "async") |
| 1749 | +@pytest.mark.parametrize("source,expect", _test_create_inferred_span) |
| 1750 | +@patch("ddtrace.Span.finish", autospec=True) |
| 1751 | +def test_create_inferred_span(mock_span_finish, source, expect): |
| 1752 | + with open(f"{event_samples}{source}.json") as f: |
| 1753 | + event = json.load(f) |
| 1754 | + ctx = get_mock_context(aws_request_id="123") |
| 1755 | + |
| 1756 | + actual = create_inferred_span(event, ctx) |
| 1757 | + assert actual.service == expect.service |
| 1758 | + assert actual.start == expect.start |
| 1759 | + assert actual.span_type == expect.span_type |
| 1760 | + for tag, value in expect.tags.items(): |
| 1761 | + assert actual.get_tag(tag) == value, f"wrong value for tag {tag}" |
| 1762 | + |
| 1763 | + if expect.parent_name is not None: # there are two inferred spans |
| 1764 | + assert mock_span_finish.call_count == 1 |
| 1765 | + args, kwargs = mock_span_finish.call_args_list[0] |
| 1766 | + parent = args[0] |
| 1767 | + finish_time = kwargs.get("finish_time") or args[1] |
| 1768 | + assert parent.name == expect.parent_name |
| 1769 | + assert actual.parent_id == parent.span_id |
| 1770 | + assert finish_time == expect.start |
| 1771 | + else: # there is only one inferred span |
| 1772 | + assert mock_span_finish.call_count == 0 |
1910 | 1773 |
|
| 1774 | + |
| 1775 | +class TestInferredSpans(unittest.TestCase): |
1911 | 1776 | def test_extract_context_from_eventbridge_event(self):
|
1912 | 1777 | event_sample_source = "eventbridge-custom"
|
1913 | 1778 | test_file = event_samples + event_sample_source + ".json"
|
@@ -2029,38 +1894,6 @@ def test_extract_context_from_kinesis_batch_event(self):
|
2029 | 1894 | self.assertEqual(context.span_id, 2876253380018681026)
|
2030 | 1895 | self.assertEqual(context.sampling_priority, 1)
|
2031 | 1896 |
|
2032 |
| - def test_create_inferred_span_from_api_gateway_event_no_apiid(self): |
2033 |
| - event_sample_source = "api-gateway-no-apiid" |
2034 |
| - test_file = event_samples + event_sample_source + ".json" |
2035 |
| - with open(test_file, "r") as event: |
2036 |
| - event = json.load(event) |
2037 |
| - ctx = get_mock_context() |
2038 |
| - ctx.aws_request_id = "123" |
2039 |
| - span = create_inferred_span(event, ctx) |
2040 |
| - self.assertEqual(span.get_tag("operation_name"), "aws.apigateway.rest") |
2041 |
| - self.assertEqual( |
2042 |
| - span.service, |
2043 |
| - "70ixmpl4fl.execute-api.us-east-2.amazonaws.com", |
2044 |
| - ) |
2045 |
| - self.assertEqual( |
2046 |
| - span.get_tag("http.url"), |
2047 |
| - "70ixmpl4fl.execute-api.us-east-2.amazonaws.com/path/to/resource", |
2048 |
| - ) |
2049 |
| - self.assertEqual(span.get_tag("endpoint"), "/path/to/resource") |
2050 |
| - self.assertEqual(span.get_tag("http.method"), "POST") |
2051 |
| - self.assertEqual( |
2052 |
| - span.get_tag("resource_names"), |
2053 |
| - "POST /path/to/resource", |
2054 |
| - ) |
2055 |
| - self.assertEqual(span.get_tag("request_id"), "123") |
2056 |
| - self.assertEqual(span.get_tag("apiid"), "None") |
2057 |
| - self.assertEqual(span.get_tag("apiname"), "None") |
2058 |
| - self.assertEqual(span.get_tag("stage"), "prod") |
2059 |
| - self.assertEqual(span.start, 1428582896.0) |
2060 |
| - self.assertEqual(span.span_type, "http") |
2061 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.TAG_SOURCE), "self") |
2062 |
| - self.assertEqual(span.get_tag(InferredSpanInfo.SYNCHRONICITY), "sync") |
2063 |
| - |
2064 | 1897 | @patch("datadog_lambda.tracing.submit_errors_metric")
|
2065 | 1898 | def test_mark_trace_as_error_for_5xx_responses_getting_400_response_code(
|
2066 | 1899 | self, mock_submit_errors_metric
|
|
0 commit comments