diff options
author | coletdjnz <coletdjnz@protonmail.com> | 2023-07-23 17:17:15 +1200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-23 05:17:15 +0000 |
commit | 86aea0d3a213da3be1da638b9b828e6f0ee1d59f (patch) | |
tree | 886b293881ab2f01d1d46f7c6b74cbaa21e35fdf /test | |
parent | 11de6fec9c9b8d34d1f90c8e6218ec58a3471b58 (diff) | |
download | hypervideo-pre-86aea0d3a213da3be1da638b9b828e6f0ee1d59f.tar.lz hypervideo-pre-86aea0d3a213da3be1da638b9b828e6f0ee1d59f.tar.xz hypervideo-pre-86aea0d3a213da3be1da638b9b828e6f0ee1d59f.zip |
[networking] Add strict Request extension checking (#7604)
Authored by: coletdjnz
Co-authored-by: pukkandan <pukkandan.ytdlp@gmail.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/test_networking.py | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/test/test_networking.py b/test/test_networking.py index d4eba2a5d..1bd6afc88 100644 --- a/test/test_networking.py +++ b/test/test_networking.py @@ -804,10 +804,10 @@ class TestUrllibRequestHandler(TestRequestHandlerBase): assert not isinstance(exc_info.value, TransportError) -def run_validation(handler, fail, req, **handler_kwargs): +def run_validation(handler, error, req, **handler_kwargs): with handler(**handler_kwargs) as rh: - if fail: - with pytest.raises(UnsupportedRequest): + if error: + with pytest.raises(error): rh.validate(req) else: rh.validate(req) @@ -824,6 +824,9 @@ class TestRequestHandlerValidation: _SUPPORTED_PROXY_SCHEMES = None _SUPPORTED_URL_SCHEMES = None + def _check_extensions(self, extensions): + extensions.clear() + class HTTPSupportedRH(ValidationRH): _SUPPORTED_URL_SCHEMES = ('http',) @@ -834,26 +837,26 @@ class TestRequestHandlerValidation: ('https', False, {}), ('data', False, {}), ('ftp', False, {}), - ('file', True, {}), + ('file', UnsupportedRequest, {}), ('file', False, {'enable_file_urls': True}), ]), (NoCheckRH, [('http', False, {})]), - (ValidationRH, [('http', True, {})]) + (ValidationRH, [('http', UnsupportedRequest, {})]) ] PROXY_SCHEME_TESTS = [ # scheme, expected to fail ('Urllib', [ ('http', False), - ('https', True), + ('https', UnsupportedRequest), ('socks4', False), ('socks4a', False), ('socks5', False), ('socks5h', False), - ('socks', True), + ('socks', UnsupportedRequest), ]), (NoCheckRH, [('http', False)]), - (HTTPSupportedRH, [('http', True)]), + (HTTPSupportedRH, [('http', UnsupportedRequest)]), ] PROXY_KEY_TESTS = [ @@ -863,8 +866,22 @@ class TestRequestHandlerValidation: ('unrelated', False), ]), (NoCheckRH, [('all', False)]), - (HTTPSupportedRH, [('all', True)]), - (HTTPSupportedRH, [('no', True)]), + (HTTPSupportedRH, [('all', UnsupportedRequest)]), + (HTTPSupportedRH, [('no', UnsupportedRequest)]), + ] + + EXTENSION_TESTS = [ + ('Urllib', [ + ({'cookiejar': 'notacookiejar'}, AssertionError), + ({'cookiejar': CookieJar()}, False), + ({'timeout': 1}, False), + ({'timeout': 'notatimeout'}, AssertionError), + ({'unsupported': 'value'}, UnsupportedRequest), + ]), + (NoCheckRH, [ + ({'cookiejar': 'notacookiejar'}, False), + ({'somerandom': 'test'}, False), # but any extension is allowed through + ]), ] @pytest.mark.parametrize('handler,scheme,fail,handler_kwargs', [ @@ -907,15 +924,16 @@ class TestRequestHandlerValidation: @pytest.mark.parametrize('proxy_url', ['//example.com', 'example.com', '127.0.0.1']) @pytest.mark.parametrize('handler', ['Urllib'], indirect=True) def test_missing_proxy_scheme(self, handler, proxy_url): - run_validation(handler, True, Request('http://', proxies={'http': 'example.com'})) - - @pytest.mark.parametrize('handler', ['Urllib'], indirect=True) - def test_cookiejar_extension(self, handler): - run_validation(handler, True, Request('http://', extensions={'cookiejar': 'notacookiejar'})) + run_validation(handler, UnsupportedRequest, Request('http://', proxies={'http': 'example.com'})) - @pytest.mark.parametrize('handler', ['Urllib'], indirect=True) - def test_timeout_extension(self, handler): - run_validation(handler, True, Request('http://', extensions={'timeout': 'notavalidtimeout'})) + @pytest.mark.parametrize('handler,extensions,fail', [ + (handler_tests[0], extensions, fail) + for handler_tests in EXTENSION_TESTS + for extensions, fail in handler_tests[1] + ], indirect=['handler']) + def test_extension(self, handler, extensions, fail): + run_validation( + handler, fail, Request('http://', extensions=extensions)) def test_invalid_request_type(self): rh = self.ValidationRH(logger=FakeLogger()) |