Exemplo n.º 1
0
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
Exemplo n.º 6
0
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)