Exemple #1
0
def test_set_exception(loop):
    reader = streams.StreamReader(loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    exc = ValueError()
    reader.set_exception(exc)

    assert waiter.exception() is exc
    assert eof_waiter.exception() is exc
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #2
0
async def test_stream_reader_iter_chunks_chunked_encoding(loop, protocol):
    stream = streams.StreamReader(protocol, loop=loop)
    for line in DATA.splitlines(keepends=True):
        stream.begin_http_chunk_receiving()
        stream.feed_data(line)
        stream.end_http_chunk_receiving()
    stream.feed_eof()

    it = iter([b'line1\n', b'line2\n', b'line3\n'])
    async for data, end_of_chunk in stream.iter_chunks():
        assert (data, end_of_chunk) == (next(it), True)
    pytest.raises(StopIteration, next, it)
def function2145(arg180):
    var1226 = streams.StreamReader(loop=arg180)
    var3512 = var1226._waiter = helpers.create_future(arg180)
    var1757 = var1226._eof_waiter = helpers.create_future(arg180)
    var3512.set_result(1)
    var1757.set_result(1)
    var2994 = ValueError()
    var1226.set_exception(var2994)
    assert (var3512.exception() is None)
    assert (var1757.exception() is None)
    assert (var1226._waiter is None)
    assert (var1226._eof_waiter is None)
Exemple #4
0
async def test_on_eof_exc_in_callback(protocol) -> None:
    loop = asyncio.get_event_loop()
    reader = streams.StreamReader(protocol, loop=loop)

    on_eof = mock.Mock()
    on_eof.side_effect = ValueError

    reader.on_eof(on_eof)
    assert not on_eof.called
    reader.feed_eof()
    assert on_eof.called
    assert not reader._eof_callbacks
Exemple #5
0
def test_feed_eof_waiters(loop):
    reader = streams.StreamReader(loop=loop)
    waiter = reader._waiter = helpers.create_future(loop)
    eof_waiter = reader._eof_waiter = helpers.create_future(loop)

    reader.feed_eof()
    assert reader._eof

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #6
0
def test_feed_eof_waiters(loop, protocol):
    reader = streams.StreamReader(protocol, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    reader.feed_eof()
    assert reader._eof

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
def function569(arg1357):
    var1577 = streams.StreamReader(loop=arg1357)
    var2495 = var1577._waiter = helpers.create_future(arg1357)
    var1147 = var1577._eof_waiter = helpers.create_future(arg1357)
    var1577.feed_data(b'1')
    assert (list(var1577._buffer) == [b'1'])
    assert (var1577._size == 1)
    assert (var1577.total_bytes == 1)
    assert var2495.done()
    assert (not var1147.done())
    assert (var1577._waiter is None)
    assert (var1577._eof_waiter is var1147)
Exemple #8
0
async def test_feed_eof_waiters(protocol) -> None:
    loop = asyncio.get_event_loop()
    reader = streams.StreamReader(protocol, 2 ** 16, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    reader.feed_eof()
    assert reader._eof

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #9
0
async def test_set_exception(protocol) -> None:
    loop = asyncio.get_event_loop()
    reader = streams.StreamReader(protocol, 2 ** 16, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    exc = ValueError()
    reader.set_exception(exc)

    assert waiter.exception() is exc
    assert eof_waiter.exception() is exc
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #10
0
def test_feed_data_waiters(loop, protocol) -> None:
    reader = streams.StreamReader(protocol, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    reader.feed_data(b'1')
    assert list(reader._buffer) == [b'1']
    assert reader._size == 1
    assert reader.total_bytes == 1

    assert waiter.done()
    assert not eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is eof_waiter
Exemple #11
0
async def test_stream_reader_iter_chunks_chunked_encoding(
        protocol: Any) -> None:
    loop = asyncio.get_event_loop()
    stream = streams.StreamReader(protocol, 2**16, loop=loop)
    for line in DATA.splitlines(keepends=True):
        stream.begin_http_chunk_receiving()
        stream.feed_data(line)
        stream.end_http_chunk_receiving()
    stream.feed_eof()

    it = iter([b"line1\n", b"line2\n", b"line3\n"])
    async for data, end_of_chunk in stream.iter_chunks():
        assert (data, end_of_chunk) == (next(it), True)
    pytest.raises(StopIteration, next, it)
Exemple #12
0
async def invoke(app, request, args):
    headers = args.get('__ow_headers', {})
    method = args.get('__ow_method', 'GET').upper()
    path = args.get('__ow_path', '/')

    body = None
    if method in ('POST', 'PUT'):
        content_type = headers.get('content-type', 'application/octet-stream')
        parsed_content_type = http.parse_options_header(content_type)
        raw = args.get('__ow_body')
        if parsed_content_type[0][0:5] == 'text/':
            body = raw.encode(parsed_content_type[1].get('charset', 'utf-8'))
        else:
            body = base64.b64decode(raw) if raw is not None else None

    request = request.clone(method=method,
                            rel_url=path,
                            headers=get_headers(headers))
    request._payload = streams.StreamReader(request._payload._protocol)
    request._payload.feed_data(body)
    request._payload.feed_eof()

    match_info = await _normalize(request, app)
    if match_info is None:
        response = web.HTTPNotFound()
    else:
        request._match_info = match_info
        try:
            if path == "/swagger.json":
                response = await match_info.handler(request)
            else:
                response = await match_info.handler(request, wsk_args=args)
        except web.HTTPException as e:
            response = e

    response_type = http.parse_options_header(
        response.headers.get('Content-Type', 'application/octet-stream'))

    if not response.body:
        body = None
    elif response_type[0][0:response_type[0].find('/')] != 'octet-stream':
        body = response.body.decode(response_type[1].get('charset', 'utf-8'))
    else:
        body = base64.b64encode(response.text)

    return {
        'headers': dict(response.headers),
        'statusCode': response.status,
        'body': body
    }
def make_request(method, path, *, loop=None, headers=sentinel, data=None):
    if headers is sentinel:
        headers = {'Content-Type': 'application/json'}
    elif 'Content-Type' not in headers:
        headers['Content-Type'] = 'application/json'
    if data is not None:
        data = json.dumps(data).encode()
        payload = streams.StreamReader(loop=loop)
        payload.feed_data(data)
        payload.feed_eof()
        headers.update({'Content-Length': str(len(data))})
    else:
        payload = sentinel
    return make_mocked_request(method, path, headers=headers, payload=payload)
Exemple #14
0
def test_feed_data_waiters(loop):
    reader = streams.StreamReader(loop=loop)
    waiter = reader._waiter = helpers.create_future(loop)
    eof_waiter = reader._eof_waiter = helpers.create_future(loop)

    reader.feed_data(b'1')
    assert list(reader._buffer) == [b'1']
    assert reader._size == 1
    assert reader.total_bytes == 1

    assert waiter.done()
    assert not eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is eof_waiter
Exemple #15
0
def test_feed_eof_cancelled(loop, protocol):
    reader = streams.StreamReader(protocol, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    waiter.set_result(1)
    eof_waiter.set_result(1)

    reader.feed_eof()

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #16
0
def test_feed_eof_cancelled(loop):
    reader = streams.StreamReader(loop=loop)
    waiter = reader._waiter = helpers.create_future(loop)
    eof_waiter = reader._eof_waiter = helpers.create_future(loop)

    waiter.set_result(1)
    eof_waiter.set_result(1)

    reader.feed_eof()

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #17
0
def test_set_exception_cancelled(loop):
    reader = streams.StreamReader(loop=loop)
    waiter = reader._waiter = helpers.create_future(loop)
    eof_waiter = reader._eof_waiter = helpers.create_future(loop)

    waiter.set_result(1)
    eof_waiter.set_result(1)

    exc = ValueError()
    reader.set_exception(exc)

    assert waiter.exception() is None
    assert eof_waiter.exception() is None
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #18
0
async def test_stream_reader_long_lines(loop) -> None:
    DATA = b'0' * 1024**3

    stream = streams.StreamReader(mock.Mock(), loop=loop)
    stream.feed_data(DATA)
    stream.feed_eof()
    body = payload.get_payload(stream)

    writer = mock.Mock()
    writer.write.return_value = loop.create_future()
    writer.write.return_value.set_result(None)
    await body.write(writer)
    writer.write.assert_called_once_with(mock.ANY)
    (chunk, ), _ = writer.write.call_args
    assert len(chunk) == len(DATA)
Exemple #19
0
def test_set_exception_cancelled(loop, protocol) -> None:
    reader = streams.StreamReader(protocol, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    waiter.set_result(1)
    eof_waiter.set_result(1)

    exc = ValueError()
    reader.set_exception(exc)

    assert waiter.exception() is None
    assert eof_waiter.exception() is None
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #20
0
async def test_feed_eof_cancelled(protocol) -> None:
    loop = asyncio.get_event_loop()
    reader = streams.StreamReader(protocol, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    waiter.set_result(1)
    eof_waiter.set_result(1)

    reader.feed_eof()

    assert waiter.done()
    assert eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is None
Exemple #21
0
async def test_feed_data_waiters(protocol) -> None:
    loop = asyncio.get_event_loop()
    reader = streams.StreamReader(protocol, 2 ** 16, loop=loop)
    waiter = reader._waiter = loop.create_future()
    eof_waiter = reader._eof_waiter = loop.create_future()

    reader.feed_data(b"1")
    assert list(reader._buffer) == [b"1"]
    assert reader._size == 1
    assert reader.total_bytes == 1

    assert waiter.done()
    assert not eof_waiter.done()
    assert reader._waiter is None
    assert reader._eof_waiter is eof_waiter
Exemple #22
0
def get_request(app,
                path='/',
                method='GET',
                content=None,
                auth=None,
                content_type=None,
                headers=None,
                json_encode=True):
    """Create a test request.

    The `auth` parameter for Basic-Authorization can be provided as tuple with
    (user, password).

    If `json_encode` is set to False, the content is not converted to JSON (in
    which case it should be bytes).

    """
    if headers is None:
        headers = {}
    if auth is not None:
        headers.update(basic_auth_header(*auth))

    if json_encode and content is None:
        content = {}

    if content is not None:
        payload = streams.StreamReader(loop=app.loop)
        if json_encode:
            data = json.dumps(content).encode('utf-8')
        else:
            data = content
        payload.feed_data(data)
        payload.feed_eof()
        headers.update({
            'Content-Type': 'application/json',
            'Content-Length': str(len(data))
        })
    else:
        payload = sentinel

    if content_type is not None:
        headers['Content-Type'] = content_type

    return make_mocked_request(method,
                               path,
                               app=app,
                               payload=payload,
                               headers=headers)
Exemple #23
0
async def test_issues_event(loop):
    headers = {
        'User-Agent': 'GitHub-Hookshot/abcde',
        'Content-Type': 'application/json',
        'X-GitHub-Event': 'issues',
        'X-GitHub-Delivery': 'askfjbcalskeuhfaw3r',
        'X-Hub-Signature': 'q3r5awfeaea',
    }
    protocol = mock.Mock(_reading_paused=False)
    payload = streams.StreamReader(protocol=protocol, limit=2 ** 16, loop=loop)
    payload.feed_data(PAYLOAD)
    payload.feed_eof()
    webhook_request = make_mocked_request('POST', '/', headers=headers, payload=payload)

    event = await github.Event(webhook_request)
    assert isinstance(event, github.EventType)
    assert event.app
    assert event.key == 'issue'
    assert event.type == 'issues'
    assert event.action == 'opened'
Exemple #24
0
 def _make_one(self, *args, **kwargs):
     loop = asyncio.get_event_loop()
     kwargs.setdefault("limit", 2 ** 16)
     return streams.StreamReader(
         mock.Mock(_reading_paused=False), *args, **kwargs, loop=loop
     )
Exemple #25
0
 def test_ctor_global_loop(self, m_asyncio):
     stream = streams.StreamReader()
     self.assertIs(stream._loop, m_asyncio.get_event_loop.return_value)
Exemple #26
0
 def _make_one(self, *args, **kwargs):
     return streams.StreamReader(loop=self.loop, *args, **kwargs)
Exemple #27
0
    def test_ctor_global_loop(self):
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        stream = streams.StreamReader(mock.Mock(_reading_paused=False))

        assert stream._loop is loop
Exemple #28
0
 def _make_one(self, *args, **kwargs):
     return streams.StreamReader(mock.Mock(_reading_paused=False), *args,
                                 **kwargs)
Exemple #29
0
def create_stream(loop):
    stream = streams.StreamReader(loop=loop)
    stream.feed_data(DATA)
    stream.feed_eof()
    return stream
Exemple #30
0
def create_stream(loop):
    protocol = mock.Mock(_reading_paused=False)
    stream = streams.StreamReader(protocol, loop=loop)
    stream.feed_data(DATA)
    stream.feed_eof()
    return stream