def test_decode_error(self): """ Decoder error returns HpackDecodeError """ decoder = Decoder() with self.assertRaises(HpackDecodeError): decoder.decode_block(b"")
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]
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]
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()
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))
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)
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] )