11from sentry_sdk .integrations .rq import RqIntegration
22
3- import pytest
3+ import os
4+ import json
45
56from fakeredis import FakeStrictRedis
6- from rq import SimpleWorker , Queue
7+ import rq
78
8-
9- @pytest .fixture
10- def run_job ():
11- queue = Queue (connection = FakeStrictRedis ())
12- worker = SimpleWorker ([queue ], connection = queue .connection )
13-
14- def inner (fn , * a , ** kw ):
15- job = queue .enqueue (fn , * a , ** kw )
16- worker .work (burst = True )
17- return job
18-
19- return inner
9+ from sentry_sdk import Hub
2010
2111
2212def crashing_job (foo ):
2313 1 / 0
2414
2515
26- def test_basic (sentry_init , capture_events , run_job ):
16+ def test_basic (sentry_init , capture_events ):
2717 sentry_init (integrations = [RqIntegration ()])
28-
2918 events = capture_events ()
30- run_job (crashing_job , foo = 42 )
19+
20+ queue = rq .Queue (connection = FakeStrictRedis ())
21+ worker = rq .SimpleWorker ([queue ], connection = queue .connection )
22+
23+ queue .enqueue (crashing_job , foo = 42 )
24+ worker .work (burst = True )
25+
3126 event , = events
3227
3328 exception , = event ["exception" ]["values" ]
@@ -43,3 +38,35 @@ def test_basic(sentry_init, capture_events, run_job):
4338 "job_id" : event ["extra" ]["rq-job" ]["job_id" ],
4439 "kwargs" : {"foo" : 42 },
4540 }
41+
42+
43+ def test_transport_shutdown (sentry_init ):
44+ sentry_init (integrations = [RqIntegration ()])
45+
46+ events_r , events_w = os .pipe ()
47+ events_r = os .fdopen (events_r , "rb" , 0 )
48+ events_w = os .fdopen (events_w , "wb" , 0 )
49+
50+ def capture_event (event ):
51+ events_w .write (json .dumps (event ).encode ("utf-8" ))
52+ events_w .write (b"\n " )
53+
54+ def shutdown (timeout , callback = None ):
55+ events_w .write (b"shutdown\n " )
56+
57+ Hub .current .client .transport .capture_event = capture_event
58+ Hub .current .client .transport .shutdown = shutdown
59+
60+ queue = rq .Queue (connection = FakeStrictRedis ())
61+ worker = rq .Worker ([queue ], connection = queue .connection )
62+
63+ queue .enqueue (crashing_job , foo = 42 )
64+ worker .work (burst = True )
65+
66+ event = events_r .readline ()
67+ shutdown = events_r .readline ()
68+ event = json .loads (event .decode ("utf-8" ))
69+ assert shutdown == b"shutdown\n "
70+
71+ exception , = event ["exception" ]["values" ]
72+ assert exception ["type" ] == "ZeroDivisionError"
0 commit comments