Skip to content

Commit 09143fe

Browse files
authored
Improve testing for ddtrace imports. (#662)
1 parent b6131e5 commit 09143fe

File tree

4 files changed

+117
-1
lines changed

4 files changed

+117
-1
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ on:
55
branches:
66
- "main"
77
pull_request:
8+
schedule:
9+
- cron: '0 0,12 * * *' # Runs every day at midnight and noon utc
810

911
jobs:
1012
lint:

datadog_lambda/wrapper.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
extract_http_status_code_tag,
4747
)
4848

49+
# ddtrace imports are also tested in
50+
# dd-trace-py/tests/internal/test_serverless.py please update those tests when
51+
# making changes to any ddtrace import.
52+
4953
if config.appsec_enabled:
5054
from datadog_lambda.asm import (
5155
asm_set_context,

scripts/check_layer_size.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# Compares layer size to threshold, and fails if below that threshold
99

1010
set -e
11-
MAX_LAYER_COMPRESSED_SIZE_KB=$(expr 17 \* 1024 / 2) # 8704 KB
11+
MAX_LAYER_COMPRESSED_SIZE_KB=$(expr 9 \* 1024) # 9216 KB
1212
MAX_LAYER_UNCOMPRESSED_SIZE_KB=$(expr 25 \* 1024) # 25600 KB
1313

1414

tests/test_wrapper.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,3 +789,113 @@ def lambda_handler(event, context):
789789
self.mock_asm_start_response.assert_not_called()
790790

791791
assert lambda_handler.span.get_tag("http.status_code") == "200"
792+
793+
794+
@patch("datadog_lambda.config.Config.exception_replay_enabled", True)
795+
def test_exception_replay_enabled(monkeypatch):
796+
importlib.reload(wrapper)
797+
798+
original_SpanExceptionHandler_enable = wrapper.SpanExceptionHandler.enable
799+
SpanExceptionHandler_enable_calls = []
800+
801+
def SpanExceptionHandler_enable(*args, **kwargs):
802+
SpanExceptionHandler_enable_calls.append((args, kwargs))
803+
return original_SpanExceptionHandler_enable(*args, **kwargs)
804+
805+
original_SignalUploader_periodic = wrapper.SignalUploader.periodic
806+
SignalUploader_periodic_calls = []
807+
808+
def SignalUploader_periodic(*args, **kwargs):
809+
SignalUploader_periodic_calls.append((args, kwargs))
810+
return original_SignalUploader_periodic(*args, **kwargs)
811+
812+
monkeypatch.setattr(
813+
"datadog_lambda.wrapper.SpanExceptionHandler.enable",
814+
SpanExceptionHandler_enable,
815+
)
816+
monkeypatch.setattr(
817+
"datadog_lambda.wrapper.SignalUploader.periodic", SignalUploader_periodic
818+
)
819+
820+
expected_response = {
821+
"statusCode": 200,
822+
"body": "This should be returned",
823+
}
824+
825+
@wrapper.datadog_lambda_wrapper
826+
def lambda_handler(event, context):
827+
return expected_response
828+
829+
response = lambda_handler({}, get_mock_context())
830+
831+
assert response == expected_response
832+
assert len(SpanExceptionHandler_enable_calls) == 1
833+
assert len(SignalUploader_periodic_calls) == 1
834+
835+
836+
@patch("datadog_lambda.config.Config.profiling_enabled", True)
837+
def test_profiling_enabled(monkeypatch):
838+
importlib.reload(wrapper)
839+
840+
original_Profiler_start = wrapper.profiler.Profiler.start
841+
Profiler_start_calls = []
842+
843+
def Profiler_start(*args, **kwargs):
844+
Profiler_start_calls.append((args, kwargs))
845+
return original_Profiler_start(*args, **kwargs)
846+
847+
monkeypatch.setattr("datadog_lambda.wrapper.is_new_sandbox", lambda: True)
848+
monkeypatch.setattr(
849+
"datadog_lambda.wrapper.profiler.Profiler.start", Profiler_start
850+
)
851+
852+
expected_response = {
853+
"statusCode": 200,
854+
"body": "This should be returned",
855+
}
856+
857+
@wrapper.datadog_lambda_wrapper
858+
def lambda_handler(event, context):
859+
return expected_response
860+
861+
response = lambda_handler({}, get_mock_context())
862+
863+
assert response == expected_response
864+
assert len(Profiler_start_calls) == 1
865+
866+
867+
@patch("datadog_lambda.config.Config.llmobs_enabled", True)
868+
def test_llmobs_enabled(monkeypatch):
869+
importlib.reload(wrapper)
870+
871+
original_LLMObs_enable = wrapper.LLMObs.enable
872+
LLMObs_enable_calls = []
873+
874+
def LLMObs_enable(*args, **kwargs):
875+
LLMObs_enable_calls.append((args, kwargs))
876+
return original_LLMObs_enable(*args, **kwargs)
877+
878+
original_LLMObs_flush = wrapper.LLMObs.flush
879+
LLMObs_flush_calls = []
880+
881+
def LLMObs_flush(*args, **kwargs):
882+
LLMObs_flush_calls.append((args, kwargs))
883+
return original_LLMObs_flush(*args, **kwargs)
884+
885+
monkeypatch.setattr("datadog_lambda.wrapper.LLMObs.enable", LLMObs_enable)
886+
monkeypatch.setattr("datadog_lambda.wrapper.LLMObs.flush", LLMObs_flush)
887+
888+
expected_response = {
889+
"statusCode": 200,
890+
"body": "This should be returned",
891+
}
892+
893+
@wrapper.datadog_lambda_wrapper
894+
def lambda_handler(event, context):
895+
return expected_response
896+
897+
response = lambda_handler({}, get_mock_context())
898+
899+
assert response == expected_response
900+
assert len(LLMObs_enable_calls) == 1
901+
assert len(LLMObs_flush_calls) == 1

0 commit comments

Comments
 (0)