def test_logs_json_serializer(is_valid, given_input, expected_output):
    if not is_valid:
        with pytest.raises(ValueError) as ve:
            data = logs_json_serializer(given_input)
    else:
        data = logs_json_serializer(given_input, sort_keys=True)
        assert data == expected_output

    # Make sure the datetime was serialized in the correct ISO8601
    datetime_str = json.loads(data)["datetime"]
    assert datetime_str == TEST_DATETIME.isoformat()
 def send(self, logentry):
   try:
     data = logs_json_serializer(logentry)
     self._producer.put_record(
       StreamName=self._stream_name,
       Data=data,
       PartitionKey=_partition_key()
     )
   except ClientError as ce:
     logger.exception('KinesisStreamLogsProducer client error sending log to Kinesis: %s', ce)
     raise LogSendException('KinesisStreamLogsProducer client error sending log to Kinesis: %s' % ce)
   except Exception as e:
     logger.exception('KinesisStreamLogsProducer exception sending log to Kinesis: %s', e)
     raise LogSendException('KinesisStreamLogsProducer exception sending log to Kinesis: %s' % e)