Skip to content

Commit 10d7a49

Browse files
committed
Added tests
1 parent 39db548 commit 10d7a49

File tree

2 files changed

+104
-1
lines changed

2 files changed

+104
-1
lines changed

sentry_sdk/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1181,7 +1181,7 @@ def merge_stack_frames(frames, full_stack, client_options):
11811181
else None
11821182
)
11831183
if max_stack_frames is not None:
1184-
new_frames = new_frames[:max_stack_frames]
1184+
new_frames = new_frames[len(new_frames) - max_stack_frames :]
11851185

11861186
return new_frames
11871187

tests/test_full_stack_frames.py

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import sentry_sdk
2+
3+
4+
def test_full_stack_frames_default(sentry_init, capture_events):
5+
sentry_init()
6+
events = capture_events()
7+
8+
def foo():
9+
try:
10+
bar()
11+
except Exception as e:
12+
sentry_sdk.capture_exception(e)
13+
14+
def bar():
15+
raise Exception("This is a test exception")
16+
17+
foo()
18+
19+
(event,) = events
20+
frames = event["exception"]["values"][0]["stacktrace"]["frames"]
21+
22+
assert len(frames) == 2
23+
assert frames[-1]["function"] == "bar"
24+
assert frames[-2]["function"] == "foo"
25+
26+
27+
def test_full_stack_frames_enabled(sentry_init, capture_events):
28+
sentry_init(
29+
add_full_stack=True,
30+
)
31+
events = capture_events()
32+
33+
def foo():
34+
try:
35+
bar()
36+
except Exception as e:
37+
sentry_sdk.capture_exception(e)
38+
39+
def bar():
40+
raise Exception("This is a test exception")
41+
42+
foo()
43+
44+
(event,) = events
45+
frames = event["exception"]["values"][0]["stacktrace"]["frames"]
46+
47+
assert len(frames) > 2
48+
assert frames[-1]["function"] == "bar"
49+
assert frames[-2]["function"] == "foo"
50+
assert frames[-3]["function"] == "foo"
51+
assert frames[-4]["function"] == "test_full_stack_frames_enabled"
52+
53+
54+
def test_full_stack_frames_enabled_truncated(sentry_init, capture_events):
55+
sentry_init(
56+
add_full_stack=True,
57+
max_stack_frames=3,
58+
)
59+
events = capture_events()
60+
61+
def foo():
62+
try:
63+
bar()
64+
except Exception as e:
65+
sentry_sdk.capture_exception(e)
66+
67+
def bar():
68+
raise Exception("This is a test exception")
69+
70+
foo()
71+
72+
(event,) = events
73+
frames = event["exception"]["values"][0]["stacktrace"]["frames"]
74+
75+
assert len(frames) == 3
76+
assert frames[-1]["function"] == "bar"
77+
assert frames[-2]["function"] == "foo"
78+
assert frames[-3]["function"] == "foo"
79+
80+
81+
def test_full_stack_frames_default_no_truncation_happening(sentry_init, capture_events):
82+
sentry_init(
83+
max_stack_frames=1, # this is ignored if add_full_stack=False (which is the default)
84+
)
85+
events = capture_events()
86+
87+
def foo():
88+
try:
89+
bar()
90+
except Exception as e:
91+
sentry_sdk.capture_exception(e)
92+
93+
def bar():
94+
raise Exception("This is a test exception")
95+
96+
foo()
97+
98+
(event,) = events
99+
frames = event["exception"]["values"][0]["stacktrace"]["frames"]
100+
101+
assert len(frames) == 2
102+
assert frames[-1]["function"] == "bar"
103+
assert frames[-2]["function"] == "foo"

0 commit comments

Comments
 (0)