1
1
import logging
2
2
import pickle
3
- import gzip
4
- import io
5
3
import os
6
4
import socket
7
5
import sys
8
- from collections import defaultdict , namedtuple
6
+ from collections import defaultdict
9
7
from datetime import datetime , timedelta , timezone
10
8
from unittest import mock
11
9
12
- import brotli
13
10
import pytest
14
- from pytest_localserver .http import WSGIServer
15
- from werkzeug .wrappers import Request , Response
11
+ from tests .conftest import CapturingServer
16
12
17
13
try :
18
14
import httpcore
19
15
except (ImportError , ModuleNotFoundError ):
20
16
httpcore = None
21
17
22
- try :
23
- import gevent
24
- except ImportError :
25
- gevent = None
26
-
27
18
import sentry_sdk
28
19
from sentry_sdk import (
29
20
Client ,
42
33
)
43
34
from sentry_sdk .integrations .logging import LoggingIntegration , ignore_logger
44
35
45
- CapturedData = namedtuple ("CapturedData" , ["path" , "event" , "envelope" , "compressed" ])
46
-
47
-
48
- class CapturingServer (WSGIServer ):
49
- def __init__ (self , host = "127.0.0.1" , port = 0 , ssl_context = None ):
50
- WSGIServer .__init__ (self , host , port , self , ssl_context = ssl_context )
51
- self .code = 204
52
- self .headers = {}
53
- self .captured = []
54
-
55
- def respond_with (self , code = 200 , headers = None ):
56
- self .code = code
57
- if headers :
58
- self .headers = headers
59
-
60
- def clear_captured (self ):
61
- del self .captured [:]
62
-
63
- def __call__ (self , environ , start_response ):
64
- """
65
- This is the WSGI application.
66
- """
67
- request = Request (environ )
68
- event = envelope = None
69
- content_encoding = request .headers .get ("content-encoding" )
70
- if content_encoding == "gzip" :
71
- rdr = gzip .GzipFile (fileobj = io .BytesIO (request .data ))
72
- compressed = True
73
- elif content_encoding == "br" :
74
- rdr = io .BytesIO (brotli .decompress (request .data ))
75
- compressed = True
76
- else :
77
- rdr = io .BytesIO (request .data )
78
- compressed = False
79
-
80
- if request .mimetype == "application/json" :
81
- event = parse_json (rdr .read ())
82
- else :
83
- envelope = Envelope .deserialize_from (rdr )
84
-
85
- self .captured .append (
86
- CapturedData (
87
- path = request .path ,
88
- event = event ,
89
- envelope = envelope ,
90
- compressed = compressed ,
91
- )
92
- )
93
36
94
- response = Response (status = self .code )
95
- response .headers .extend (self .headers )
96
- return response (environ , start_response )
37
+ server = None
97
38
98
39
99
- @pytest .fixture
100
- def capturing_server (request ):
40
+ @pytest .fixture (scope = "module" , autouse = True )
41
+ def make_capturing_server (request ):
42
+ global server
101
43
server = CapturingServer ()
102
44
server .start ()
103
45
request .addfinalizer (server .stop )
46
+
47
+
48
+ @pytest .fixture
49
+ def capturing_server ():
50
+ global server
51
+ server .clear_captured ()
104
52
return server
105
53
106
54
@@ -129,18 +77,13 @@ def mock_transaction_envelope(span_count):
129
77
return envelope
130
78
131
79
132
- @pytest .mark .forked
133
80
@pytest .mark .parametrize ("debug" , (True , False ))
134
81
@pytest .mark .parametrize ("client_flush_method" , ["close" , "flush" ])
135
82
@pytest .mark .parametrize ("use_pickle" , (True , False ))
136
83
@pytest .mark .parametrize ("compression_level" , (0 , 9 , None ))
137
84
@pytest .mark .parametrize (
138
85
"compression_algo" ,
139
- (
140
- ("gzip" , "br" , "<invalid>" , None )
141
- if PY37 or gevent is None
142
- else ("gzip" , "<invalid>" , None )
143
- ),
86
+ (("gzip" , "br" , "<invalid>" , None ) if PY37 else ("gzip" , "<invalid>" , None )),
144
87
)
145
88
@pytest .mark .parametrize ("http2" , [True , False ] if PY38 else [False ])
146
89
def test_transport_works (
@@ -155,7 +98,6 @@ def test_transport_works(
155
98
compression_level ,
156
99
compression_algo ,
157
100
http2 ,
158
- maybe_monkeypatched_threading ,
159
101
):
160
102
caplog .set_level (logging .DEBUG )
161
103
0 commit comments