Skip to content

Commit a60841b

Browse files
committed
Test parenting for lazy loaded package.
1 parent 85f3abe commit a60841b

File tree

1 file changed

+46
-2
lines changed

1 file changed

+46
-2
lines changed

tests/test_cold_start.py

+46-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
import os
12
import time
23
import unittest
3-
import datadog_lambda.cold_start as cold_start
4+
45
from sys import modules, meta_path
5-
import os
66
from unittest.mock import MagicMock
77

8+
import datadog_lambda.cold_start as cold_start
9+
import datadog_lambda.wrapper as wrapper
10+
811

912
class TestColdStartTracingSetup(unittest.TestCase):
1013
def test_proactive_init(self):
@@ -234,3 +237,44 @@ def test_trace_ignore_libs(self):
234237
self.cold_start_tracer.trace(nodes)
235238
self.mock_activate.assert_called_once_with(self.mock_trace_ctx)
236239
self.assertEqual(self.output_spans, ["node_0", "unittest_cold_start"])
240+
241+
def test_lazy_loaded_package_imports(monkeypatch):
242+
243+
spans = []
244+
245+
def finish(span):
246+
spans.append(span)
247+
248+
monkeypatch.setattr(wrapper.tracer, "_on_span_finish", finish)
249+
monkeypatch.setattr(wrapper, "is_new_sandbox", lambda: True)
250+
monkeypatch.setattr("datadog_lambda.wrapper.dd_tracing_enabled", True)
251+
monkeypatch.setenv(
252+
"DD_COLD_START_TRACE_SKIP_LIB", "ddtrace.contrib.logging,datadog_lambda.wrapper"
253+
)
254+
monkeypatch.setenv("DD_MIN_COLD_START_DURATION", "0")
255+
256+
@wrapper.datadog_lambda_wrapper
257+
def handler(event, context):
258+
import tabnanny
259+
return "hello world"
260+
261+
lambda_context = MagicMock()
262+
lambda_context.invoked_function_arn = (
263+
"arn:aws:lambda:us-west-1:123457598159:function:python-layer-test:1"
264+
)
265+
266+
handler.cold_start_tracing = True
267+
result = handler({}, lambda_context)
268+
269+
assert result == "hello world"
270+
271+
function_span = import_span = None
272+
for span in spans:
273+
if span.resource == "tabnanny":
274+
import_span = span
275+
elif span.name == "aws.lambda":
276+
function_span = span
277+
278+
assert function_span is not None
279+
assert import_span is not None
280+
assert import_span.parent_id == function_span.span_id

0 commit comments

Comments
 (0)