Skip to content

Commit f9a0618

Browse files
committed
writing tests much fun
1 parent b12febd commit f9a0618

File tree

2 files changed

+90
-2
lines changed

2 files changed

+90
-2
lines changed

sentry_sdk/monitor.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ class Monitor(object):
2020
name = "sentry.monitor"
2121

2222
def __init__(self, transport, interval=10):
23-
# type: (sentry_sdk.transport.Transport, int) -> None
23+
# type: (sentry_sdk.transport.Transport, float) -> None
2424
self.transport = transport # type: sentry_sdk.transport.Transport
25-
self.interval = interval # type: int
25+
self.interval = interval # type: float
2626

2727
self._healthy = True
2828
self._downsample_factor = 1 # type: int

tests/test_monitor.py

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import random
2+
from time import sleep
3+
4+
from sentry_sdk import Hub, start_transaction
5+
from sentry_sdk.transport import Transport
6+
7+
8+
class HealthyTestTransport(Transport):
9+
def _send_event(self, event):
10+
pass
11+
12+
def _send_envelope(self, envelope):
13+
pass
14+
15+
def is_worker_full(self):
16+
return False
17+
18+
19+
class UnhealthyTestTransport(HealthyTestTransport):
20+
def is_worker_full(self):
21+
return True
22+
23+
24+
def test_no_monitor_if_disabled(sentry_init):
25+
sentry_init(transport=HealthyTestTransport())
26+
assert Hub.current.client.monitor is None
27+
28+
29+
def test_monitor_if_enabled(sentry_init):
30+
sentry_init(
31+
transport=HealthyTestTransport(),
32+
_experiments={"enable_backpressure_handling": True},
33+
)
34+
35+
monitor = Hub.current.client.monitor
36+
assert monitor is not None
37+
assert monitor._thread is None
38+
39+
assert monitor.is_healthy() is True
40+
assert monitor.downsample_factor() == 1
41+
assert monitor._thread is not None
42+
assert monitor._thread.name == "sentry.monitor"
43+
44+
45+
def test_monitor_unhealthy(sentry_init):
46+
sentry_init(
47+
transport=UnhealthyTestTransport(),
48+
_experiments={"enable_backpressure_handling": True},
49+
)
50+
51+
monitor = Hub.current.client.monitor
52+
monitor.interval = 0.1
53+
54+
assert monitor.is_healthy() is True
55+
sleep(0.1) # wait for monitor to run
56+
assert monitor.is_healthy() is False
57+
assert monitor.downsample_factor() == 2
58+
sleep(0.1) # wait for monitor to run
59+
assert monitor.downsample_factor() == 4
60+
61+
62+
def test_transaction_uses_downsampled_rate(
63+
sentry_init, capture_client_reports, monkeypatch
64+
):
65+
sentry_init(
66+
traces_sample_rate=1.0,
67+
transport=UnhealthyTestTransport(),
68+
_experiments={"enable_backpressure_handling": True},
69+
)
70+
71+
reports = capture_client_reports()
72+
73+
monitor = Hub.current.client.monitor
74+
monitor.interval = 0.1
75+
76+
# make sure rng doesn't sample
77+
monkeypatch.setattr(random, "random", lambda: 0.9)
78+
79+
assert monitor.is_healthy() is True
80+
sleep(0.1) # wait for monitor to run
81+
assert monitor.is_healthy() is False
82+
assert monitor.downsample_factor() == 2
83+
84+
with start_transaction(name="foobar") as transaction:
85+
assert transaction.sampled is False
86+
assert transaction.sample_rate == 0.5
87+
88+
assert reports == [("backpressure", "transaction")]

0 commit comments

Comments
 (0)