Esempio n. 1
0
 def test_decode_set_capacity(self):
     """
     Decoder.set_capacity()
     """
     decoder = Decoder()
     decoder.set_capacity(8192)
     self.assertEqual(decoder.capacity, 8192)
Esempio n. 2
0
 def test_decode_error(self):
     """
     Decoder error returns HpackDecodeError
     """
     decoder = Decoder()
     with self.assertRaises(HpackDecodeError):
         decoder.decode_block(b"")
Esempio n. 3
0
 def test_headers_no_set_delete(self):
     """
     Headers does not support set or delete
     """
     decoder = Decoder()
     headers = decoder.decode_block(EXAMPLE_BLOCK)
     with self.assertRaises(TypeError):
         headers[0] = None
     with self.assertRaises(TypeError):
         del headers[0]
Esempio n. 4
0
 def test_headers_getitem(self):
     """
     Headers supports array indexing
     """
     decoder = Decoder()
     headers = decoder.decode_block(EXAMPLE_BLOCK)
     self.assertEqual(headers[0], EXAMPLE_HEADERS[0])
     self.assertEqual(headers[1], EXAMPLE_HEADERS[1])
     self.assertEqual(headers[2], EXAMPLE_HEADERS[2])
     self.assertEqual(headers[3], EXAMPLE_HEADERS[3])
     with self.assertRaises(IndexError):
         _ = headers[4]
Esempio n. 5
0
    def test_del(self):
        """
        Decoder.__del__, Headers.__del__
        """
        decoder = Decoder()
        headers = decoder.decode_block(EXAMPLE_BLOCK)
        self.assertIsInstance(headers, Headers)

        del headers
        del decoder

        gc.collect()
Esempio n. 6
0
 def test_header_iter(self):
     """
     Header is iterable
     """
     decoder = Decoder()
     headers = decoder.decode_block(EXAMPLE_BLOCK)
     self.assertEqual(len(headers), len(EXAMPLE_HEADERS))
     seen = 0
     for (idx, header) in enumerate(headers):
         seen += 1
         self.assertEqual(header.name, EXAMPLE_HEADERS[idx][0])
         self.assertEqual(header.value, EXAMPLE_HEADERS[idx][1])
     self.assertEqual(seen, len(EXAMPLE_HEADERS))
Esempio n. 7
0
    def test_decode_ret(self):
        """
        Decoder returns Headers, has a useful __repr__
        """
        decoder = Decoder()
        headers = decoder.decode_block(EXAMPLE_BLOCK)
        self.assertIsInstance(headers, Headers)

        ref_str = (
            'Headers((":method", "GET"), (":scheme", "http"), ' '(":path", "/"), (":authority", "www.example.com"))'
        )
        if PY3:
            ref_str = ref_str.replace('("', "(b'").replace(', "', ", b'").replace('"', "'")

        self.assertEqual(headers.__repr__(), ref_str)
Esempio n. 8
0
def _test_story(path):
    with open(path, 'r') as fileh:
        data = json.load(fileh)

    decoder = Decoder()
    for case in data['cases']:
        block = unhexlify(case['wire'])
        headers = decoder.decode_block(block)
        assert len(headers) == len(case['headers'])
        for (idx, header) in enumerate(headers):
            assert header.name == norm(
                list(case['headers'][idx].keys())[0]
            )
            assert header.value == norm(
                list(case['headers'][idx].values())[0]
            )