From: coletdjnz Date: Mon, 24 Jul 2023 19:18:52 +0000 (+1200) Subject: [test] Fix `httplib_validation_errors` test for old Python versions (#7677) X-Git-Tag: 2023.09.24~122 X-Git-Url: https://jfr.im/git/yt-dlp.git/commitdiff_plain/95abea9a03289da1384e5bda3d590223ccc0a238 [test] Fix `httplib_validation_errors` test for old Python versions (#7677) Fixes https://github.com/yt-dlp/yt-dlp/issues/7674 Authored by: coletdjnz --- diff --git a/test/test_networking.py b/test/test_networking.py index 1bd6afc88..dbe28359b 100644 --- a/test/test_networking.py +++ b/test/test_networking.py @@ -785,22 +785,31 @@ def test_verify_cert_error_text(self, handler): validate_and_send(rh, Request(f'https://127.0.0.1:{self.https_port}/headers')) @pytest.mark.parametrize('handler', ['Urllib'], indirect=True) - def test_httplib_validation_errors(self, handler): - with handler() as rh: - - # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1256 - with pytest.raises(RequestError, match='method can\'t contain control characters') as exc_info: - validate_and_send(rh, Request('http://127.0.0.1', method='GET\n')) - assert not isinstance(exc_info.value, TransportError) - - # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1265 - with pytest.raises(RequestError, match='URL can\'t contain control characters') as exc_info: - validate_and_send(rh, Request('http://127.0.0. 1', method='GET\n')) - assert not isinstance(exc_info.value, TransportError) + @pytest.mark.parametrize('req,match,version_check', [ + # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1256 + # bpo-39603: Check implemented in 3.7.9+, 3.8.5+ + ( + Request('http://127.0.0.1', method='GET\n'), + 'method can\'t contain control characters', + lambda v: v < (3, 7, 9) or (3, 8, 0) <= v < (3, 8, 5) + ), + # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1265 + # bpo-38576: Check implemented in 3.7.8+, 3.8.3+ + ( + Request('http://127.0.0. 1', method='GET'), + 'URL can\'t contain control characters', + lambda v: v < (3, 7, 8) or (3, 8, 0) <= v < (3, 8, 3) + ), + # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1288C31-L1288C50 + (Request('http://127.0.0.1', headers={'foo\n': 'bar'}), 'Invalid header name', None), + ]) + def test_httplib_validation_errors(self, handler, req, match, version_check): + if version_check and version_check(sys.version_info): + pytest.skip(f'Python {sys.version} version does not have the required validation for this test.') - # https://github.com/python/cpython/blob/987b712b4aeeece336eed24fcc87a950a756c3e2/Lib/http/client.py#L1288C31-L1288C50 - with pytest.raises(RequestError, match='Invalid header name') as exc_info: - validate_and_send(rh, Request('http://127.0.0.1', headers={'foo\n': 'bar'})) + with handler() as rh: + with pytest.raises(RequestError, match=match) as exc_info: + validate_and_send(rh, req) assert not isinstance(exc_info.value, TransportError)