1
from __future__ import annotations
4
from email.errors import MessageDefect
5
from test import DUMMY_POOL
9
from urllib3.connection import HTTPConnection
10
from urllib3.connectionpool import HTTPConnectionPool
11
from urllib3.exceptions import (
26
@pytest.mark.parametrize(
30
MaxRetryError(DUMMY_POOL, "", None),
31
LocationParseError(""),
32
ConnectTimeoutError(None),
34
HTTPError("foo", IOError("foo")),
35
MaxRetryError(HTTPConnectionPool("localhost"), "/", None),
36
LocationParseError("fake location"),
37
ClosedPoolError(HTTPConnectionPool("localhost"), ""),
38
EmptyPoolError(HTTPConnectionPool("localhost"), ""),
39
HostChangedError(HTTPConnectionPool("localhost"), "/", 0),
40
ReadTimeoutError(HTTPConnectionPool("localhost"), "/", ""),
43
def test_exceptions(self, exception: Exception) -> None:
44
result = pickle.loads(pickle.dumps(exception))
45
assert isinstance(result, type(exception))
49
def test_header_parsing_errors(self) -> None:
50
hpe = HeaderParsingError([MessageDefect("defects")], "unparsed_data")
52
assert "defects" in str(hpe)
53
assert "unparsed_data" in str(hpe)
56
class TestNewConnectionError:
57
def test_pool_property_deprecation_warning(self) -> None:
58
err = NewConnectionError(HTTPConnection("localhost"), "test")
59
with pytest.warns(DeprecationWarning) as records:
62
assert err_pool is err.conn
64
"The 'pool' property is deprecated and will be removed "
65
"in urllib3 v2.1.0. Use 'conn' instead."
68
assert isinstance(record.message, Warning)
69
assert record.message.args[0] == msg