def test_read_headers_no_colon(self): # Setup: Create a reader with a buffer that contains the control sequence but does not # match the header format test_buffer = bytearray(b'1234567890\r\n\r\n') reader = JSONRPCReader(None, logger=utils.get_mock_logger()) reader._buffer = test_buffer reader._buffer_end_offset = len(reader._buffer) reader._read_offset = 1 # If: I look for a header block in the buffer # Then: # ... I should get an exception b/c of the malformed header with self.assertRaises(KeyError): reader._try_read_headers() # ... The current reading position of the buffer should be reset to 0 self.assertEqual(reader._read_offset, 0) # ... The buffer should have been trashed self.assertIsNot(reader._buffer, test_buffer)
def test_read_headers_bad_format(self): # Setup: Create a reader with a header block that contains invalid content-length test_buffer = bytearray(b'Content-Length: abc\r\n\r\n') reader = JSONRPCReader(None, logger=utils.get_mock_logger()) reader._buffer = test_buffer reader._buffer_end_offset = len(reader._buffer) reader._read_offset = 1 # If: I look for a header block in the buffer # Then: # ... I should get an exception from there not being a content-length header with self.assertRaises(LookupError): reader._try_read_headers() # ... The current reading position of the buffer should be reset to 0 self.assertEqual(reader._read_offset, 0) # ... The buffer should have been trashed self.assertIsNot(reader._buffer, test_buffer) # ... The headers should have been trashed self.assertEqual(len(reader._headers), 0)
def test_read_headers_not_found(self): # Setup: Create a reader with a loaded buffer that does not contain the \r\n\r\n control reader = JSONRPCReader(None, logger=utils.get_mock_logger()) reader._buffer = bytearray(b'1234567890') reader._buffer_end_offset = len(reader._buffer) # If: I look for a header block in the buffer result = reader._try_read_headers() # Then: # ... I should not have found any self.assertFalse(result) # ... The current reading position of the buffer should not have moved self.assertEqual(reader._read_offset, 0) self.assertEqual(reader._read_state, JSONRPCReader.ReadState.Header)
def test_read_headers_success(self): # Setup: Create a reader with a loaded buffer that contains a a complete header reader = JSONRPCReader(None, logger=utils.get_mock_logger()) reader._buffer = bytearray(b'Content-Length: 56\r\n\r\n') reader._buffer_end_offset = len(reader._buffer) # If: I look for a header block in the buffer result = reader._try_read_headers() # Then: # ... I should have found a header self.assertTrue(result) # ... The current reading position should have moved to the end of the buffer self.assertEqual(reader._read_offset, len(reader._buffer)) self.assertEqual(reader._read_state, JSONRPCReader.ReadState.Content) # ... The headers should have been stored self.assertEqual(reader._expected_content_length, 56) self.assertDictEqual(reader._headers, {'content-length': '56'})