Skip to content

Commit f079cbc

Browse files
test
1 parent 3883ffd commit f079cbc

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

datadog_lambda/wrapper.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ def __call__(self, event, context, **kwargs):
191191
if self.blocking_response:
192192
return self.blocking_response
193193
self.response = self.func(event, context, **kwargs)
194-
return self.response
195194
except BlockingException:
196195
self.blocking_response = get_asm_blocked_response(self.event_source)
197196
except Exception:
@@ -204,8 +203,10 @@ def __call__(self, event, context, **kwargs):
204203
raise
205204
finally:
206205
self._after(event, context)
207-
if self.blocking_response:
208-
return self.blocking_response
206+
207+
if self.blocking_response:
208+
return self.blocking_response
209+
return self.response
209210

210211
def _inject_authorizer_span_headers(self, request_id):
211212
reference_span = self.inferred_span if self.inferred_span else self.span

tests/test_wrapper.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,23 @@ def lambda_handler(event, context):
765765

766766
assert lambda_handler.span.get_tag("http.status_code") == "403"
767767

768+
def test_handler_exception_propagates_when_appsec_enabled(self):
769+
# Regression guard: before the fix, `return` in the `finally` block
770+
# would silently swallow handler exceptions when no blocking response
771+
# was set, preventing them from reaching the caller.
772+
self.mock_get_asm_blocking_response.return_value = None
773+
774+
class HandlerError(Exception):
775+
pass
776+
777+
def lambda_handler(event, context):
778+
raise HandlerError("handler error")
779+
780+
lambda_handler = wrapper.datadog_lambda_wrapper(lambda_handler)
781+
782+
with self.assertRaises(HandlerError):
783+
lambda_handler(self.api_gateway_request, get_mock_context())
784+
768785
def test_no_blocking_appsec_disabled(self):
769786
os.environ["DD_APPSEC_ENABLED"] = "false"
770787

0 commit comments

Comments
 (0)