|
12 | 12 | from werkzeug.wrappers import Request, Response |
13 | 13 |
|
14 | 14 | from sentry_sdk import Hub, Client, add_breadcrumb, capture_message, Scope |
15 | | -from sentry_sdk.transport import _parse_rate_limits |
16 | 15 | from sentry_sdk.envelope import Envelope, parse_json |
| 16 | +from sentry_sdk.transport import KEEP_ALIVE_SOCKET_OPTIONS, _parse_rate_limits |
17 | 17 | from sentry_sdk.integrations.logging import LoggingIntegration, ignore_logger |
18 | 18 |
|
19 | 19 |
|
@@ -164,6 +164,66 @@ def test_socket_options(make_client): |
164 | 164 | assert options["socket_options"] == socket_options |
165 | 165 |
|
166 | 166 |
|
| 167 | +def test_keep_alive_true(make_client): |
| 168 | + client = make_client(keep_alive=True) |
| 169 | + |
| 170 | + options = client.transport._get_pool_options([]) |
| 171 | + assert options["socket_options"] == KEEP_ALIVE_SOCKET_OPTIONS |
| 172 | + |
| 173 | + |
| 174 | +def test_keep_alive_off_by_default(make_client): |
| 175 | + client = make_client() |
| 176 | + options = client.transport._get_pool_options([]) |
| 177 | + assert "socket_options" not in options |
| 178 | + |
| 179 | + |
| 180 | +def test_socket_options_override_keep_alive(make_client): |
| 181 | + socket_options = [ |
| 182 | + (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), |
| 183 | + (socket.SOL_TCP, socket.TCP_KEEPINTVL, 10), |
| 184 | + (socket.SOL_TCP, socket.TCP_KEEPCNT, 6), |
| 185 | + ] |
| 186 | + |
| 187 | + client = make_client(socket_options=socket_options, keep_alive=False) |
| 188 | + |
| 189 | + options = client.transport._get_pool_options([]) |
| 190 | + assert options["socket_options"] == socket_options |
| 191 | + |
| 192 | + |
| 193 | +def test_socket_options_merge_with_keep_alive(make_client): |
| 194 | + socket_options = [ |
| 195 | + (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 42), |
| 196 | + (socket.SOL_TCP, socket.TCP_KEEPINTVL, 42), |
| 197 | + ] |
| 198 | + |
| 199 | + client = make_client(socket_options=socket_options, keep_alive=True) |
| 200 | + |
| 201 | + options = client.transport._get_pool_options([]) |
| 202 | + try: |
| 203 | + assert options["socket_options"] == [ |
| 204 | + (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 42), |
| 205 | + (socket.SOL_TCP, socket.TCP_KEEPINTVL, 42), |
| 206 | + (socket.SOL_TCP, socket.TCP_KEEPIDLE, 45), |
| 207 | + (socket.SOL_TCP, socket.TCP_KEEPCNT, 6), |
| 208 | + ] |
| 209 | + except AttributeError: |
| 210 | + assert options["socket_options"] == [ |
| 211 | + (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 42), |
| 212 | + (socket.SOL_TCP, socket.TCP_KEEPINTVL, 42), |
| 213 | + (socket.SOL_TCP, socket.TCP_KEEPCNT, 6), |
| 214 | + ] |
| 215 | + |
| 216 | + |
| 217 | +def test_socket_options_override_defaults(make_client): |
| 218 | + # If socket_options are set to [], this doesn't mean the user doesn't want |
| 219 | + # any custom socket_options, but rather that they want to disable the urllib3 |
| 220 | + # socket option defaults, so we need to set this and not ignore it. |
| 221 | + client = make_client(socket_options=[]) |
| 222 | + |
| 223 | + options = client.transport._get_pool_options([]) |
| 224 | + assert options["socket_options"] == [] |
| 225 | + |
| 226 | + |
167 | 227 | def test_transport_infinite_loop(capturing_server, request, make_client): |
168 | 228 | client = make_client( |
169 | 229 | debug=True, |
|
0 commit comments