def test_can_emit_http_request_record(self): # HTTP_REQUEST records have have their entire body field as a binary # blob, however it will all be utf-8 valid since the binary fields # from the api call will have been b64 encoded. payload = { 'url': ('https://lambda.us-west-2.amazonaws.com/2015-03-31/' 'functions'), 'method': 'POST', 'headers': CaseInsensitiveDict({'foo': 'bar'}), 'body': b'body with no invalid utf-8 bytes in it', 'streaming': False } self.handler.emit('HTTP_REQUEST', payload, 'BOTOCORE') record = self._get_last_record() parsed_payload = payload.copy() parsed_payload['headers'] = dict(parsed_payload['headers']) parsed_payload['body'] = 'body with no invalid utf-8 bytes in it' self._assert_record_has_command_id(record) self._assert_expected_event_type('HTTP_REQUEST', record) self._assert_expected_payload(parsed_payload, record) self._assert_expected_source('BOTOCORE', record)
def test_can_emit_http_response_record(self): # HTTP_RESPONSE also contains a binary response in its body, but it # will not contain any non-unicode characters payload = { 'status_code': 200, 'headers': CaseInsensitiveDict({'foo': 'bar'}), 'body': b'body with no invalid utf-8 bytes in it', 'streaming': False } self.handler.emit('HTTP_RESPONSE', payload, 'BOTOCORE') record = self._get_last_record() parsed_payload = payload.copy() parsed_payload['headers'] = dict(parsed_payload['headers']) parsed_payload['body'] = 'body with no invalid utf-8 bytes in it' self._assert_record_has_command_id(record) self._assert_expected_event_type('HTTP_RESPONSE', record) self._assert_expected_payload(parsed_payload, record) self._assert_expected_source('BOTOCORE', record)
def test_can_write_http_request_record(self): self.writer.write_record({ 'command_id': 'command', 'event_type': 'HTTP_REQUEST', 'payload': { 'method': 'GET', 'headers': CaseInsensitiveDict({}), 'body': '...', }, 'source': 'TEST', 'timestamp': 1234 }) written_record = self._read_last_record() self.assertEqual(written_record, ('command', None, 'TEST', 'HTTP_REQUEST', 1234, json.dumps({ 'method': 'GET', 'headers': {}, 'body': '...', })))
def test_can_serialize_case_insensitive_dict(self): original = CaseInsensitiveDict({'fOo': 'bar'}) string_value = json.dumps(original, cls=PayloadSerializer) reloaded = json.loads(string_value) self.assertEqual(original, reloaded)