def test_Request_open(urlopen_mock, install_opener_mock): r = Request().open('GET', 'https://ansible.com/') args = urlopen_mock.call_args[0] assert args[1] is None # data, this is handled in the Request not urlopen assert args[2] == 10 # timeout req = args[0] assert req.headers == {} assert req.data is None assert req.get_method() == 'GET' opener = install_opener_mock.call_args[0][0] handlers = opener.handlers if not HAS_SSLCONTEXT: expected_handlers = ( SSLValidationHandler, RedirectHandlerFactory(), # factory, get handler ) else: expected_handlers = ( RedirectHandlerFactory(), # factory, get handler ) found_handlers = [] for handler in handlers: if isinstance(handler, SSLValidationHandler ) or handler.__class__.__name__ == 'RedirectHandler': found_handlers.append(handler) assert len(found_handlers) == len(expected_handlers)
def test_no_redirs(urllib_req, request_body): handler = RedirectHandlerFactory('none', False) inst = handler() with pytest.raises(urllib_error.HTTPError): inst.redirect_request(urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/')
def test_redir_http_error_308_urllib2(urllib_req, request_body): handler = RedirectHandlerFactory('urllib2', False) inst = handler() with pytest.raises(urllib_error.HTTPError): inst.redirect_request(urllib_req, request_body, 308, '308 Permanent Redirect', {}, 'https://docs.ansible.com/')
def test_redir_safe_not_safe(request_body): handler = RedirectHandlerFactory('safe', False) inst = handler() req = urllib_request.Request('https://ansible.com/', 'POST') with pytest.raises(urllib_error.HTTPError): inst.redirect_request(req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/')
def test_redir_validate_certs(urllib_req, request_body, mocker): opener_mock = mocker.patch( 'ansible.module_utils.urls.urllib_request._opener') handler = RedirectHandlerFactory('all', True) inst = handler() inst.redirect_request(urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/') assert opener_mock.add_handler.call_count == 1
def test_redir_http_error_308_urllib2(urllib_req, request_body, mocker): redir_mock = mocker.patch.object(urllib_request.HTTPRedirectHandler, 'redirect_request') handler = RedirectHandlerFactory('urllib2', False) inst = handler() inst.redirect_request(urllib_req, request_body, 308, '308 Permanent Redirect', {}, 'https://docs.ansible.com/') assert redir_mock.call_count == 1
def test_all_redir(urllib_req, request_body, mocker): req_mock = mocker.patch('ansible.module_utils.urls.RequestWithMethod') handler = RedirectHandlerFactory('all', False) inst = handler() inst.redirect_request(urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/') req_mock.assert_called_once_with('https://docs.ansible.com/', data=None, headers={}, method='GET', origin_req_host='ansible.com', unverifiable=True)
def test_urllib2_redir(urllib_req, request_body, mocker): redir_request_mock = mocker.patch( 'ansible.module_utils.urls.urllib_request.HTTPRedirectHandler.redirect_request' ) handler = RedirectHandlerFactory('urllib2', False) inst = handler() inst.redirect_request(urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/') redir_request_mock.assert_called_once_with(inst, urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/')
def test_redir_headers_removal(urllib_req, request_body, mocker): req_mock = mocker.patch('ansible.module_utils.urls.RequestWithMethod') handler = RedirectHandlerFactory('all', False) inst = handler() urllib_req.headers = { 'Content-Type': 'application/json', 'Content-Length': 100, 'Foo': 'bar', } inst.redirect_request(urllib_req, request_body, 301, '301 Moved Permanently', {}, 'https://docs.ansible.com/') req_mock.assert_called_once_with('https://docs.ansible.com/', data=None, headers={'Foo': 'bar'}, method='GET', origin_req_host='ansible.com', unverifiable=True)