Ejemplo n.º 1
0
def test_no_redirect_history_in_exception():
    url = 'http://def-cl-resp.org'
    headers = {'Content-Type': 'application/json;charset=cp1251'}
    response = ClientResponse('get',
                              URL(url),
                              request_info=RequestInfo(url, 'get', headers),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=mock.Mock(),
                              session=mock.Mock())
    response.status = 409
    response.reason = 'CONFLICT'
    with pytest.raises(aiohttp.ClientResponseError) as cm:
        response.raise_for_status()
    assert () == cm.value.history
Ejemplo n.º 2
0
def test_json_override_encoding(loop):
    response = ClientResponse('get', URL('http://def-cl-resp.org'))
    response._post_init(loop)

    def side_effect(*args, **kwargs):
        fut = helpers.create_future(loop)
        fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
        return fut

    response.headers = {'Content-Type': 'application/json;charset=utf8'}
    content = response.content = mock.Mock()
    content.read.side_effect = side_effect
    response._get_encoding = mock.Mock()

    res = yield from response.json(encoding='cp1251')
    assert res == {'тест': 'пройден'}
    assert response._connection is None
    assert not response._get_encoding.called
async def test_read_and_release_connection_with_error(loop, session):
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=loop,
                              session=session)
    content = response.content = mock.Mock()
    content.read.return_value = loop.create_future()
    content.read.return_value.set_exception(ValueError)

    with pytest.raises(ValueError):
        await response.read()
    assert response._closed
Ejemplo n.º 4
0
async def test_response_eof_after_connection_detach(loop, session):
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=loop,
                              session=session)
    response._closed = False
    conn = response._connection = mock.Mock()
    conn.protocol = None

    response._response_eof()
    assert conn.release.called
    assert response._connection is None
Ejemplo n.º 5
0
async def test_json_custom_loader(loop, session) -> None:
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              traces=[],
                              loop=loop,
                              session=session)
    response._headers = {'Content-Type': 'application/json;charset=cp1251'}
    response._body = b'data'

    def custom(content):
        return content + '-custom'

    res = await response.json(loads=custom)
    assert res == 'data-custom'
Ejemplo n.º 6
0
async def test_text_detect_encoding_if_invalid_charset(loop, session):
    response = ClientResponse('get', URL('http://def-cl-resp.org'))
    response._post_init(loop, session)

    def side_effect(*args, **kwargs):
        fut = loop.create_future()
        fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
        return fut

    response.headers = {'Content-Type': 'text/plain;charset=invalid'}
    content = response.content = mock.Mock()
    content.read.side_effect = side_effect

    await response.read()
    res = await response.text()
    assert res == '{"тест": "пройден"}'
    assert response._connection is None
    assert response.get_encoding().lower() in ('windows-1251', 'maccyrillic')
Ejemplo n.º 7
0
async def test_release(loop, session):
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=loop,
                              session=session)
    fut = loop.create_future()
    fut.set_result(b'')
    content = response.content = mock.Mock()
    content.readany.return_value = fut

    response.release()
    assert response._connection is None
Ejemplo n.º 8
0
def test_response_links_no_rel(loop, session):
    url = URL('http://def-cl-resp.org/')
    response = ClientResponse('get',
                              url,
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=loop,
                              session=session)
    response.headers = CIMultiDict([("Link", '<http://example.com/>')])
    assert (response.links == {
        'http://example.com/': {
            'url': URL('http://example.com/')
        }
    })
Ejemplo n.º 9
0
async def test_text_custom_encoding(loop, session):
    response = ClientResponse('get', URL('http://def-cl-resp.org'))
    response._post_init(loop, session)

    def side_effect(*args, **kwargs):
        fut = loop.create_future()
        fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
        return fut

    response.headers = {'Content-Type': 'application/json'}
    content = response.content = mock.Mock()
    content.read.side_effect = side_effect
    response.get_encoding = mock.Mock()

    res = await response.text(encoding='cp1251')
    assert res == '{"тест": "пройден"}'
    assert response._connection is None
    assert not response.get_encoding.called
Ejemplo n.º 10
0
def test_close(loop: Any, session: Any) -> None:
    response = ClientResponse(
        "get",
        URL("http://def-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=loop,
        session=session,
    )
    response._closed = False
    response._connection = mock.Mock()
    response.close()
    assert response.connection is None
    response.close()
    response.close()
Ejemplo n.º 11
0
async def test_json_extended_content_type(loop, session):
    response = ClientResponse('get', URL('http://def-cl-resp.org'))
    response._post_init(loop, session)

    def side_effect(*args, **kwargs):
        fut = loop.create_future()
        fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
        return fut

    response.headers = {
        'Content-Type':
            'application/this.is-1_content+subtype+json;charset=cp1251'}
    content = response.content = mock.Mock()
    content.read.side_effect = side_effect

    res = await response.json()
    assert res == {'тест': 'пройден'}
    assert response._connection is None
Ejemplo n.º 12
0
async def test_json_invalid_content_type(loop, session):
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              auto_decompress=True,
                              traces=[],
                              loop=loop,
                              session=session)
    response.headers = {'Content-Type': 'data/octet-stream'}
    response._body = b''

    with pytest.raises(aiohttp.ContentTypeError) as info:
        await response.json()

    assert info.value.request_info == response.request_info
Ejemplo n.º 13
0
async def test_http_processing_error(session):
    loop = mock.Mock()
    request_info = mock.Mock()
    response = ClientResponse(
        'get', URL('http://del-cl-resp.org'), request_info=request_info)
    response._post_init(loop, session)
    loop.get_debug = mock.Mock()
    loop.get_debug.return_value = True

    connection = mock.Mock()
    connection.protocol = aiohttp.DataQueue(loop=loop)
    connection.protocol.set_response_params = mock.Mock()
    connection.protocol.set_exception(http.HttpProcessingError())

    with pytest.raises(aiohttp.ClientResponseError) as info:
        await response.start(connection)

    assert info.value.request_info is request_info
Ejemplo n.º 14
0
    def test_https_auth(self, ClientRequestMock):
        proxy_req = ClientRequest('GET', URL('http://proxy.example.com'),
                                  auth=aiohttp.helpers.BasicAuth('user',
                                                                 'pass'),
                                  loop=self.loop)
        ClientRequestMock.return_value = proxy_req

        proxy_resp = ClientResponse('get', URL('http://proxy.example.com'))
        proxy_resp._loop = self.loop
        proxy_req.send = send_mock = mock.Mock()
        send_mock.return_value = proxy_resp
        proxy_resp.start = make_mocked_coro(mock.Mock(status=200))

        connector = aiohttp.TCPConnector(loop=self.loop)
        connector._resolve_host = make_mocked_coro(
            [{'hostname': 'hostname', 'host': '127.0.0.1', 'port': 80,
              'family': socket.AF_INET, 'proto': 0, 'flags': 0}])

        tr, proto = mock.Mock(), mock.Mock()
        self.loop.create_connection = make_mocked_coro((tr, proto))

        self.assertIn('AUTHORIZATION', proxy_req.headers)
        self.assertNotIn('PROXY-AUTHORIZATION', proxy_req.headers)

        req = ClientRequest(
            'GET', URL('https://www.python.org'),
            proxy=URL('http://proxy.example.com'),
            loop=self.loop
        )
        self.assertNotIn('AUTHORIZATION', req.headers)
        self.assertNotIn('PROXY-AUTHORIZATION', req.headers)
        self.loop.run_until_complete(connector._create_connection(req))

        self.assertEqual(req.url.path, '/')
        self.assertNotIn('AUTHORIZATION', req.headers)
        self.assertNotIn('PROXY-AUTHORIZATION', req.headers)
        self.assertNotIn('AUTHORIZATION', proxy_req.headers)
        self.assertIn('PROXY-AUTHORIZATION', proxy_req.headers)

        connector._resolve_host.assert_called_with('proxy.example.com', 80)

        self.loop.run_until_complete(proxy_req.close())
        proxy_resp.close()
        self.loop.run_until_complete(req.close())
Ejemplo n.º 15
0
def test_text_bad_encoding(loop):
    response = ClientResponse('get', URL('http://def-cl-resp.org'))
    response._post_init(loop)

    def side_effect(*args, **kwargs):
        fut = helpers.create_future(loop)
        fut.set_result('{"тестkey": "пройденvalue"}'.encode('cp1251'))
        return fut

    # lie about the encoding
    response.headers = {'Content-Type': 'application/json;charset=utf-8'}
    content = response.content = mock.Mock()
    content.read.side_effect = side_effect
    with pytest.raises(UnicodeDecodeError):
        yield from response.text()
    # only the valid utf-8 characters will be returned
    res = yield from response.text(errors='ignore')
    assert res == '{"key": "value"}'
    assert response._connection is None
Ejemplo n.º 16
0
def test_response_not_closed_after_get_ok(mocker) -> None:
    response = ClientResponse(
        "get",
        URL("http://del-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=mock.Mock(),
        session=mock.Mock(),
    )
    response.status = 400
    response.reason = "Bad Request"
    response._closed = False
    spy = mocker.spy(response, "raise_for_status")
    assert not response.ok
    assert not response.closed
    assert spy.call_count == 0
Ejemplo n.º 17
0
def test_no_redirect_history_in_exception() -> None:
    url = "http://def-cl-resp.org"
    headers = {"Content-Type": "application/json;charset=cp1251"}
    response = ClientResponse(
        "get",
        URL(url),
        request_info=RequestInfo(url, "get", headers),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=mock.Mock(),
        session=mock.Mock(),
    )
    response.status = 409
    response.reason = "CONFLICT"
    with pytest.raises(aiohttp.ClientResponseError) as cm:
        response.raise_for_status()
    assert () == cm.value.history
Ejemplo n.º 18
0
async def test_response_eof_upgraded(loop: Any, session: Any) -> None:
    response = ClientResponse(
        "get",
        URL("http://def-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=loop,
        session=session,
    )

    conn = response._connection = mock.Mock()
    conn.protocol.upgraded = True

    response._response_eof()
    assert not conn.release.called
    assert response._connection is conn
Ejemplo n.º 19
0
async def test_release(loop: Any, session: Any) -> None:
    response = ClientResponse(
        "get",
        URL("http://def-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=loop,
        session=session,
    )
    fut = loop.create_future()
    fut.set_result(b"")
    content = response.content = mock.Mock()
    content.readany.return_value = fut

    response.release()
    assert response._connection is None
Ejemplo n.º 20
0
def test_response_links_no_rel(loop: Any, session: Any) -> None:
    url = URL("http://def-cl-resp.org/")
    response = ClientResponse(
        "get",
        url,
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=loop,
        session=session,
    )
    response._headers = CIMultiDict([("Link", "<http://example.com/>")])
    assert response.links == {
        "http://example.com/": {
            "url": URL("http://example.com/")
        }
    }
Ejemplo n.º 21
0
    def test_https_connect_resp_start_error(self, ClientRequestMock) -> None:
        proxy_req = ClientRequest('GET',
                                  URL('http://proxy.example.com'),
                                  loop=self.loop)
        ClientRequestMock.return_value = proxy_req

        proxy_resp = ClientResponse('get',
                                    URL('http://proxy.example.com'),
                                    request_info=mock.Mock(),
                                    writer=mock.Mock(),
                                    continue100=None,
                                    timer=TimerNoop(),
                                    traces=[],
                                    loop=self.loop,
                                    session=mock.Mock())
        proxy_req.send = make_mocked_coro(proxy_resp)
        proxy_resp.start = make_mocked_coro(
            raise_exception=OSError("error message"))

        connector = aiohttp.TCPConnector(loop=self.loop)
        connector._resolve_host = make_mocked_coro([{
            'hostname': 'hostname',
            'host': '127.0.0.1',
            'port': 80,
            'family': socket.AF_INET,
            'proto': 0,
            'flags': 0
        }])

        tr, proto = mock.Mock(), mock.Mock()
        tr.get_extra_info.return_value = None
        self.loop.create_connection = make_mocked_coro((tr, proto))

        req = ClientRequest(
            'GET',
            URL('https://www.python.org'),
            proxy=URL('http://proxy.example.com'),
            loop=self.loop,
        )
        with self.assertRaisesRegex(OSError, "error message"):
            self.loop.run_until_complete(
                connector._create_connection(req, None,
                                             aiohttp.ClientTimeout()))
Ejemplo n.º 22
0
async def test_json_invalid_content_type(loop: Any, session: Any) -> None:
    response = ClientResponse(
        "get",
        URL("http://def-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=loop,
        session=session,
    )
    response._headers = {"Content-Type": "data/octet-stream"}
    response._body = b""

    with pytest.raises(aiohttp.ContentTypeError) as info:
        await response.json()

    assert info.value.request_info == response.request_info
Ejemplo n.º 23
0
def function759(arg791):
    var1906 = ResponseHandler(loop=arg791)
    var1870 = mock.Mock()
    var1906.connection_made(var1870)
    var2202 = mock.Mock()
    var2202.protocol = var1906
    var1906.data_received(b'HTTP/1.1 200 Ok\r\n\r\n')
    var1984 = ClientResponse('get', URL('http://def-cl-resp.org'))
    var1984._post_init(arg791)
    yield from var1984.start(var2202, read_until_eof=True)
    assert (not var1984.content.is_eof())
    var1906.data_received(b'0000')
    var4385 = yield from var1984.content.readany()
    assert (var4385 == b'0000')
    var1906.data_received(b'1111')
    var4385 = yield from var1984.content.readany()
    assert (var4385 == b'1111')
    var1906.connection_lost(None)
    assert var1984.content.is_eof()
Ejemplo n.º 24
0
def test_raise_for_status_4xx_without_reason() -> None:
    response = ClientResponse(
        "get",
        URL("http://def-cl-resp.org"),
        request_info=mock.Mock(),
        writer=mock.Mock(),
        continue100=None,
        timer=TimerNoop(),
        traces=[],
        loop=mock.Mock(),
        session=mock.Mock(),
    )
    response.status = 404
    response.reason = ""
    with pytest.raises(aiohttp.ClientResponseError) as cm:
        response.raise_for_status()
    assert str(cm.value.status) == "404"
    assert str(cm.value.message) == ""
    assert response.closed
Ejemplo n.º 25
0
    def test_connect_env_var_https_used(self, ClientRequestMock):
        proxy_req = ClientRequest('GET',
                                  URL('http://proxy.example.com'),
                                  loop=self.loop)
        ClientRequestMock.return_value = proxy_req

        proxy_resp = ClientResponse('get', URL('http://proxy.example.com'))
        proxy_resp._loop = self.loop
        proxy_req.send = send_mock = mock.Mock()
        send_mock.return_value = proxy_resp
        proxy_resp.start = make_mocked_coro(mock.Mock(status=200))

        connector = aiohttp.TCPConnector(loop=self.loop)
        connector._resolve_host = make_mocked_coro([{
            'hostname': 'hostname',
            'host': '127.0.0.1',
            'port': 80,
            'family': socket.AF_INET,
            'proto': 0,
            'flags': 0
        }])

        tr, proto = mock.Mock(), mock.Mock()
        self.loop.create_connection = make_mocked_coro((tr, proto))

        req = ClientRequest(
            'GET',
            URL('https://www.python.org'),
            proxy_from_env=True,
            loop=self.loop,
        )
        self.loop.run_until_complete(connector._create_connection(req))

        self.assertEqual(req.url.path, '/')
        self.assertEqual(proxy_req.method, 'CONNECT')
        self.assertEqual(proxy_req.url, URL('https://www.python.org'))
        tr.close.assert_called_once_with()
        tr.get_extra_info.assert_called_with('socket', default=None)

        self.loop.run_until_complete(proxy_req.close())
        proxy_resp.close()
        self.loop.run_until_complete(req.close())
        self.assertIn('https', getproxies())
Ejemplo n.º 26
0
def test_content_disposition_full():
    response = ClientResponse('get',
                              URL('http://def-cl-resp.org'),
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              traces=[],
                              loop=mock.Mock(),
                              session=mock.Mock())
    response.headers = {
        'Content-Disposition': 'attachment; filename="archive.tar.gz"; foo=bar'
    }

    assert 'attachment' == response.content_disposition.type
    assert 'bar' == response.content_disposition.parameters["foo"]
    assert 'archive.tar.gz' == response.content_disposition.filename
    with pytest.raises(TypeError):
        response.content_disposition.parameters["foo"] = "baz"
Ejemplo n.º 27
0
 def function1482(self, arg730):
     var3149 = ClientRequest('GET',
                             URL('http://proxy.example.com'),
                             auth=aiohttp.helpers.BasicAuth('user', 'pass'),
                             loop=self.attribute501)
     arg730.return_value = var3149
     var1630 = ClientResponse('get', URL('http://proxy.example.com'))
     var1630._loop = self.attribute501
     var3149.send = var2291 = mock.Mock()
     var2291.return_value = var1630
     var1630.start = make_mocked_coro(mock.Mock(status=200))
     var3229 = aiohttp.TCPConnector(loop=self.attribute501)
     var3229._resolve_host = make_mocked_coro([{
         'hostname': 'hostname',
         'host': '127.0.0.1',
         'port': 80,
         'family': socket.AF_INET,
         'proto': 0,
         'flags': 0,
     }])
     (var3729, var3324) = (mock.Mock(), mock.Mock())
     self.attribute501.create_connection = make_mocked_coro(
         (var3729, var3324))
     self.assertIn('AUTHORIZATION', var3149.headers)
     self.assertNotIn('PROXY-AUTHORIZATION', var3149.headers)
     var3369 = ClientRequest('GET',
                             URL('https://www.python.org'),
                             proxy=URL('http://proxy.example.com'),
                             loop=self.attribute501)
     self.assertNotIn('AUTHORIZATION', var3369.headers)
     self.assertNotIn('PROXY-AUTHORIZATION', var3369.headers)
     self.attribute501.run_until_complete(
         var3229._create_connection(var3369))
     self.assertEqual(var3369.url.path, '/')
     self.assertNotIn('AUTHORIZATION', var3369.headers)
     self.assertNotIn('PROXY-AUTHORIZATION', var3369.headers)
     self.assertNotIn('AUTHORIZATION', var3149.headers)
     self.assertIn('PROXY-AUTHORIZATION', var3149.headers)
     var3229._resolve_host.assert_called_with('proxy.example.com', 80)
     self.attribute501.run_until_complete(var3149.close())
     var1630.close()
     self.attribute501.run_until_complete(var3369.close())
Ejemplo n.º 28
0
    def test_https_connect_pass_ssl_context(self, ClientRequestMock):
        loop_mock = _create_mocked_loop()
        proxy_req = ClientRequest('GET',
                                  'http://proxy.example.com',
                                  loop=loop_mock)
        ClientRequestMock.return_value = proxy_req

        proxy_resp = ClientResponse('get', 'http://proxy.example.com')
        proxy_resp._loop = loop_mock
        proxy_req.send = send_mock = unittest.mock.Mock()
        send_mock.return_value = proxy_resp
        proxy_resp.start = start_mock = unittest.mock.Mock()
        self._fake_coroutine(start_mock, unittest.mock.Mock(status=200))

        connector = aiohttp.TCPConnector(loop=loop_mock)

        tr, proto = unittest.mock.Mock(), unittest.mock.Mock()
        self._fake_coroutine(loop_mock.create_connection, (tr, proto))

        req = ClientRequest(
            'GET',
            'https://www.python.org',
            proxy='http://proxy.example.com',
            loop=self.loop,
        )
        self.loop.run_until_complete(connector._create_connection(req))

        loop_mock.create_connection.assert_called_with(
            mock.ANY,
            ssl=connector.ssl_context,
            sock=mock.ANY,
            server_hostname='www.python.org')

        self.assertEqual(req.path, '/')
        self.assertEqual(proxy_req.method, 'CONNECT')
        self.assertEqual(proxy_req.path, 'www.python.org:443')
        tr.pause_reading.assert_called_once_with()
        tr.get_extra_info.assert_called_with('socket', default=None)

        self.loop.run_until_complete(proxy_req.close())
        proxy_resp.close()
        self.loop.run_until_complete(req.close())
Ejemplo n.º 29
0
def test_response_links_relative(loop, session):
    url = URL('http://def-cl-resp.org/')
    response = ClientResponse('get',
                              url,
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              traces=[],
                              loop=loop,
                              session=session)
    response.headers = CIMultiDict([
        ("Link", '</relative/path>; rel=rel'),
    ])
    assert (response.links == {
        'rel': {
            'url': URL('http://def-cl-resp.org/relative/path'),
            'rel': 'rel'
        }
    })
Ejemplo n.º 30
0
def test_response_links_quoted(loop, session):
    url = URL('http://def-cl-resp.org/')
    response = ClientResponse('get',
                              url,
                              request_info=mock.Mock(),
                              writer=mock.Mock(),
                              continue100=None,
                              timer=TimerNoop(),
                              traces=[],
                              loop=loop,
                              session=session)
    response.headers = CIMultiDict([
        ("Link", '<http://example.com/>; rel="home-page"'),
    ])
    assert (response.links == {
        'home-page': {
            'url': URL('http://example.com/'),
            'rel': 'home-page'
        }
    })