def test_http_response_parser_code_not_int(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpResponseParser()(out, buf)
     next(p)
     with self.assertRaises(errors.BadStatusLine) as cm:
         p.send(b'HTTP/1.1 ttt test\r\n\r\n')
     self.assertIn('HTTP/1.1 ttt test', str(cm.exception))
示例#2
0
 def test_http_payload_parser_length_broken(self):
     msg = protocol.RawRequestMessage('GET', '/', (1, 1),
                                      [('CONTENT-LENGTH', 'qwe')], None,
                                      None)
     out = aiohttp.DataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg)(out, buf)
     self.assertRaises(errors.InvalidHeader, next, p)
 def test_http_response_parser_bad_status_line_too_long(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpResponseParser(max_headers=2, max_line_size=2)(out,
                                                                     buf)
     next(p)
     self.assertRaises(errors.LineTooLong, p.send,
                       b'HTTP/1.1 200 Ok\r\n\r\n')
 def test_http_response_parser_bad_version(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpResponseParser()(out, buf)
     next(p)
     with self.assertRaises(errors.BadStatusLine) as cm:
         p.send(b'HT/11 200 Ok\r\n\r\n')
     self.assertEqual('HT/11 200 Ok', cm.exception.args[0])
 def test_http_payload_parser_length_wrong(self):
     msg = protocol.RawRequestMessage(
         'GET', '/', (1, 1), CIMultiDict([('CONTENT-LENGTH', '-1')]),
         [(b'CONTENT-LENGTH', b'-1')], None, None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg)(out, buf)
     self.assertRaises(errors.InvalidHeader, next, p)
示例#6
0
 def test_close_frame_invalid(self, m_parse_frame):
     def parse_frame(buf):
         yield
         return (1, websocket.OPCODE_CLOSE, b'1')
     m_parse_frame.side_effect = parse_frame
     buf = aiohttp.ParserBuffer()
     p = websocket.parse_message(buf)
     next(p)
     self.assertRaises(websocket.WebSocketError, p.send, b'')
示例#7
0
 def test_http_payload_parser_no_length(self):
     msg = protocol.RawRequestMessage('GET', '/', (1, 1), CIMultiDict(),
                                      None, None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg, readall=False)(out, buf)
     self.assertRaises(StopIteration, next, p)
     self.assertEqual(b'', b''.join(out._buffer))
     self.assertTrue(out._eof)
示例#8
0
 def test_http_payload_parser_length_zero(self):
     msg = protocol.RawRequestMessage(
         'GET', '/', (1, 1), CIMultiDict([('CONTENT-LENGTH', '0')]), None,
         None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg)(out, buf)
     self.assertRaises(StopIteration, next, p)
     self.assertEqual(b'', b''.join(out._buffer))
示例#9
0
    def test_http_request_parser_max_headers(self):
        out = aiohttp.FlowControlDataQueue(self.stream)
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpRequestParser(8190, 20, 8190)(out, buf)
        next(p)

        self.assertRaises(
            errors.LineTooLong, p.send,
            b'get /path HTTP/1.1\r\ntest: line\r\ntest2: data\r\n\r\n')
示例#10
0
 def test_unknown_frame(self, m_parse_frame):
     def parse_frame(buf):
         yield
         return (1, websocket.OPCODE_CONTINUATION, b'')
     m_parse_frame.side_effect = parse_frame
     buf = aiohttp.ParserBuffer()
     p = websocket.parse_message(buf)
     next(p)
     self.assertRaises(websocket.WebSocketError, p.send, b'')
示例#11
0
 def test_http_payload_parser_eof(self):
     msg = protocol.RawRequestMessage('GET', '/', (1, 1), [], None, None)
     out = aiohttp.DataQueue()
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg, readall=True)(out, buf)
     next(p)
     p.send(b'data')
     p.send(b'line')
     self.assertRaises(aiohttp.EofStream, p.throw, aiohttp.EofStream())
     self.assertEqual(b'dataline', b''.join(out._buffer))
示例#12
0
 def test_http_payload_parser_websocket(self):
     msg = protocol.RawRequestMessage(
         'GET', '/', (1, 1), CIMultiDict([('SEC-WEBSOCKET-KEY1', '13')]),
         None, None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg)(out, buf)
     next(p)
     self.assertRaises(StopIteration, p.send, b'1234567890')
     self.assertEqual(b'12345678', b''.join(d for d, _ in out._buffer))
示例#13
0
 def test_parse_chunked_payload_extension(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(None).parse_chunked_payload(out, buf)
     next(p)
     try:
         p.send(b'4;test\r\ndata\r\n4\r\nline\r\n0\r\ntest\r\n')
     except StopIteration:
         pass
     self.assertEqual(b'dataline', b''.join(d for d, _ in out._buffer))
示例#14
0
    def test_parse_frame_length0(self):
        buf = aiohttp.ParserBuffer()
        p = websocket.parse_frame(buf)
        next(p)
        try:
            p.send(struct.pack('!BB', 0b00000001, 0b00000000))
        except StopIteration as exc:
            fin, opcode, payload = exc.value

        self.assertEqual((0, 1, b''), (fin, opcode, payload))
示例#15
0
 def test_parse_chunked_payload(self):
     out = aiohttp.DataQueue()
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(None).parse_chunked_payload(out, buf)
     next(p)
     try:
         p.send(b'4\r\ndata\r\n4\r\nline\r\n0\r\ntest\r\n')
     except StopIteration:
         pass
     self.assertEqual(b'dataline', b''.join(out._buffer))
     self.assertEqual(b'', bytes(buf))
示例#16
0
 def test_http_request_parser_two_slashes(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpRequestParser()(out, buf)
     next(p)
     try:
         p.send(b'get //path HTTP/1.1\r\n\r\n')
     except StopIteration:
         pass
     self.assertEqual(('GET', '//path', (1, 1), CIMultiDict(), False, None),
                      out._buffer[0][0])
示例#17
0
 def test_http_payload_parser_eof(self):
     msg = protocol.RawRequestMessage('GET', '/', (1, 1), CIMultiDict(),
                                      None, None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg, readall=True)(out, buf)
     next(p)
     p.send(b'data')
     p.send(b'line')
     self.assertRaises(StopIteration, p.throw, aiohttp.EofStream())
     self.assertEqual(b'dataline', b''.join(d for d, _ in out._buffer))
示例#18
0
 def test_http_payload_parser_chunked(self):
     msg = protocol.RawRequestMessage(
         'GET', '/', (1, 1),
         CIMultiDict([('TRANSFER-ENCODING', 'chunked')]), None, None)
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(msg)(out, buf)
     next(p)
     self.assertRaises(StopIteration, p.send,
                       b'4;test\r\ndata\r\n4\r\nline\r\n0\r\ntest\r\n')
     self.assertEqual(b'dataline', b''.join(d for d, _ in out._buffer))
示例#19
0
    def test_http_payload_parser_deflate_disabled(self):
        msg = protocol.RawRequestMessage(
            'GET', '/', (1, 1), [('CONTENT-LENGTH', len(self._COMPRESSED))],
            None, 'deflate')

        out = aiohttp.DataQueue()
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpPayloadParser(msg, compression=False)(out, buf)
        next(p)
        self.assertRaises(StopIteration, p.send, self._COMPRESSED)
        self.assertEqual(self._COMPRESSED, b''.join(out._buffer))
示例#20
0
    def test_parse_eof_payload(self):
        out = aiohttp.DataQueue()
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpPayloadParser(None).parse_eof_payload(out, buf)
        next(p)
        p.send(b'data')
        try:
            p.throw(aiohttp.EofStream())
        except aiohttp.EofStream:
            pass

        self.assertEqual([b'data'], list(out._buffer))
示例#21
0
    def test_http_payload_parser_deflate(self):
        msg = protocol.RawRequestMessage(
            'GET', '/', (1, 1),
            CIMultiDict([('CONTENT-LENGTH', len(self._COMPRESSED))]), None,
            'deflate')

        out = aiohttp.FlowControlDataQueue(self.stream)
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpPayloadParser(msg)(out, buf)
        next(p)
        self.assertRaises(StopIteration, p.send, self._COMPRESSED)
        self.assertEqual(b'data', b''.join(d for d, _ in out._buffer))
示例#22
0
 def test_http_request_parser(self):
     out = aiohttp.DataQueue()
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpRequestParser()(out, buf)
     next(p)
     try:
         p.send(b'get /path HTTP/1.1\r\n\r\n')
     except StopIteration:
         pass
     result = out._buffer[0]
     self.assertEqual(('GET', '/path', (1, 1), deque(), False, None),
                      result)
示例#23
0
    def test_parse_eof_payload(self):
        out = aiohttp.FlowControlDataQueue(self.stream)
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpPayloadParser(None).parse_eof_payload(out, buf)
        next(p)
        p.send(b'data')
        try:
            p.throw(aiohttp.EofStream())
        except StopIteration:
            pass

        self.assertEqual([(bytearray(b'data'), 4)], list(out._buffer))
示例#24
0
 def test_parse_chunked_payload_chunks(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpPayloadParser(None).parse_chunked_payload(out, buf)
     next(p)
     p.send(b'4\r\ndata\r')
     p.send(b'\n4')
     p.send(b'\r')
     p.send(b'\n')
     p.send(b'line\r\n0\r\n')
     self.assertRaises(StopIteration, p.send, b'test\r\n')
     self.assertEqual(b'dataline', b''.join(d for d, _ in out._buffer))
示例#25
0
 def test_close_frame(self, m_parse_frame):
     def parse_frame(buf):
         yield
         return (1, websocket.OPCODE_CLOSE, b'')
     m_parse_frame.side_effect = parse_frame
     p = websocket.parse_message(aiohttp.ParserBuffer())
     next(p)
     try:
         p.send(b'')
     except StopIteration as exc:
         res = exc.value
     self.assertEqual(res, (websocket.OPCODE_CLOSE, 0, ''))
示例#26
0
 def test_http_request_parser_eof(self):
     # HttpRequestParser does fail on EofStream()
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpRequestParser()(out, buf)
     next(p)
     p.send(b'get /path HTTP/1.1\r\n')
     try:
         p.throw(aiohttp.EofStream())
     except aiohttp.EofStream:
         pass
     self.assertFalse(out._buffer)
示例#27
0
 def test_http_response_parser_no_reason(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpResponseParser()(out, buf)
     next(p)
     try:
         p.send(b'HTTP/1.1 200\r\n\r\n')
     except StopIteration:
         pass
     v, s, r = out._buffer[0][0][:3]
     self.assertEqual(v, (1, 1))
     self.assertEqual(s, 200)
     self.assertEqual(r, '')
示例#28
0
 def test_simple_binary(self, m_parse_frame):
     def parse_frame(buf):
         yield
         return (1, websocket.OPCODE_BINARY, b'binary')
     m_parse_frame.side_effect = parse_frame
     buf = aiohttp.ParserBuffer()
     p = websocket.parse_message(buf)
     next(p)
     try:
         p.send(b'')
     except StopIteration as exc:
         res = exc.value
     self.assertEqual(res, (websocket.OPCODE_BINARY, b'binary', ''))
示例#29
0
 def test_http_request_parser_utf8(self):
     out = aiohttp.FlowControlDataQueue(self.stream)
     buf = aiohttp.ParserBuffer()
     p = protocol.HttpRequestParser()(out, buf)
     next(p)
     msg = 'get /path HTTP/1.1\r\nx-test:тест\r\n\r\n'.encode('utf-8')
     try:
         p.send(msg)
     except StopIteration:
         pass
     result = out._buffer[0]
     self.assertEqual(
         ('GET', '/path',
          (1, 1), CIMultiDict([('X-TEST', 'тест')]), False, None), result)
示例#30
0
    def test_http_payload_parser_length(self):
        msg = protocol.RawRequestMessage('GET', '/', (1, 1),
                                         [('CONTENT-LENGTH', '2')], None, None)
        out = aiohttp.DataQueue()
        buf = aiohttp.ParserBuffer()
        p = protocol.HttpPayloadParser(msg)(out, buf)
        next(p)
        try:
            p.send(b'1245')
        except StopIteration:
            pass

        self.assertEqual(b'12', b''.join(out._buffer))
        self.assertEqual(b'45', bytes(buf))