@@ -12,6 +12,28 @@ def app(environ, start_response):
12
12
return app
13
13
14
14
15
+ class IterableApp (object ):
16
+ def __init__ (self , iterable ):
17
+ self .iterable = iterable
18
+
19
+ def __call__ (self , environ , start_response ):
20
+ return self .iterable
21
+
22
+
23
+ class ExitingIterable (object ):
24
+ def __init__ (self , exc_func ):
25
+ self ._exc_func = exc_func
26
+
27
+ def __iter__ (self ):
28
+ return self
29
+
30
+ def __next__ (self ):
31
+ raise self ._exc_func ()
32
+
33
+ def next (self ):
34
+ return type (self ).__next__ (self )
35
+
36
+
15
37
def test_basic (sentry_init , crashing_app , capture_events ):
16
38
sentry_init (send_default_pii = True )
17
39
app = SentryWsgiMiddleware (crashing_app )
@@ -30,3 +52,58 @@ def test_basic(sentry_init, crashing_app, capture_events):
30
52
"query_string" : "" ,
31
53
"url" : "http://localhost/" ,
32
54
}
55
+
56
+
57
+ @pytest .fixture (params = [0 , None ])
58
+ def test_systemexit_zero_is_ignored (sentry_init , capture_events , request ):
59
+ zero_code = request .param
60
+ sentry_init (send_default_pii = True )
61
+ iterable = ExitingIterable (lambda : SystemExit (zero_code ))
62
+ app = SentryWsgiMiddleware (IterableApp (iterable ))
63
+ client = Client (app )
64
+ events = capture_events ()
65
+
66
+ with pytest .raises (SystemExit ):
67
+ client .get ("/" )
68
+
69
+ assert len (events ) == 0
70
+
71
+
72
+ @pytest .fixture (params = ["" , "foo" , 1 , 2 ])
73
+ def test_systemexit_nonzero_is_captured (sentry_init , capture_events , request ):
74
+ nonzero_code = request .param
75
+ sentry_init (send_default_pii = True )
76
+ iterable = ExitingIterable (lambda : SystemExit (nonzero_code ))
77
+ app = SentryWsgiMiddleware (IterableApp (iterable ))
78
+ client = Client (app )
79
+ events = capture_events ()
80
+
81
+ with pytest .raises (SystemExit ):
82
+ client .get ("/" )
83
+
84
+ event , = events
85
+
86
+ assert "exception" in event
87
+ exc = event ["exception" ]["values" ][- 1 ]
88
+ assert exc ["type" ] == "SystemExit"
89
+ assert exc ["value" ] == nonzero_code
90
+ assert event ["level" ] == "error"
91
+
92
+
93
+ def test_keyboard_interrupt_is_captured (sentry_init , capture_events ):
94
+ sentry_init (send_default_pii = True )
95
+ iterable = ExitingIterable (lambda : KeyboardInterrupt ())
96
+ app = SentryWsgiMiddleware (IterableApp (iterable ))
97
+ client = Client (app )
98
+ events = capture_events ()
99
+
100
+ with pytest .raises (KeyboardInterrupt ):
101
+ client .get ("/" )
102
+
103
+ event , = events
104
+
105
+ assert "exception" in event
106
+ exc = event ["exception" ]["values" ][- 1 ]
107
+ assert exc ["type" ] == "KeyboardInterrupt"
108
+ assert exc ["value" ] == ""
109
+ assert event ["level" ] == "error"
0 commit comments