149 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Unit tests verifying put-related delivery stream APIs."""
 | |
| import boto3
 | |
| import sure  # noqa pylint: disable=unused-import
 | |
| 
 | |
| from moto import mock_firehose
 | |
| from moto import mock_s3
 | |
| from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
 | |
| from moto.moto_api._internal import mock_random
 | |
| from tests.test_firehose.test_firehose import TEST_REGION
 | |
| from tests.test_firehose.test_firehose import sample_s3_dest_config
 | |
| from tests.test_firehose.test_firehose_destination_types import (
 | |
|     create_redshift_delivery_stream,
 | |
| )
 | |
| 
 | |
| S3_LOCATION_CONSTRAINT = "us-west-1"
 | |
| 
 | |
| 
 | |
| @mock_firehose
 | |
| def test_put_record_redshift_destination():
 | |
|     """Test invocations of put_record() to a Redshift destination.
 | |
| 
 | |
|     At the moment, for Redshift or Elasticsearch destinations, the data
 | |
|     is just thrown away
 | |
|     """
 | |
|     client = boto3.client("firehose", region_name=TEST_REGION)
 | |
| 
 | |
|     stream_name = f"test_put_record_{mock_random.get_random_hex(6)}"
 | |
|     create_redshift_delivery_stream(client, stream_name)
 | |
|     result = client.put_record(
 | |
|         DeliveryStreamName=stream_name, Record={"Data": "some test data"}
 | |
|     )
 | |
|     assert set(result.keys()) == {"RecordId", "Encrypted", "ResponseMetadata"}
 | |
| 
 | |
| 
 | |
| @mock_firehose
 | |
| def test_put_record_batch_redshift_destination():
 | |
|     """Test invocations of put_record_batch() to a Redshift destination.
 | |
| 
 | |
|     At the moment, for Redshift or Elasticsearch destinations, the data
 | |
|     is just thrown away
 | |
|     """
 | |
|     client = boto3.client("firehose", region_name=TEST_REGION)
 | |
| 
 | |
|     stream_name = f"test_put_record_{mock_random.get_random_hex(6)}"
 | |
|     create_redshift_delivery_stream(client, stream_name)
 | |
|     records = [{"Data": "one"}, {"Data": "two"}, {"Data": "three"}]
 | |
|     result = client.put_record_batch(DeliveryStreamName=stream_name, Records=records)
 | |
|     assert set(result.keys()) == {
 | |
|         "FailedPutCount",
 | |
|         "Encrypted",
 | |
|         "RequestResponses",
 | |
|         "ResponseMetadata",
 | |
|     }
 | |
|     assert result["FailedPutCount"] == 0
 | |
|     assert result["Encrypted"] is False
 | |
|     for response in result["RequestResponses"]:
 | |
|         assert set(response.keys()) == {"RecordId"}
 | |
| 
 | |
| 
 | |
| @mock_firehose
 | |
| def test_put_record_http_destination():
 | |
|     """Test invocations of put_record() to a Http destination."""
 | |
|     client = boto3.client("firehose", region_name=TEST_REGION)
 | |
|     s3_dest_config = sample_s3_dest_config()
 | |
| 
 | |
|     stream_name = f"test_put_record_{mock_random.get_random_hex(6)}"
 | |
|     client.create_delivery_stream(
 | |
|         DeliveryStreamName=stream_name,
 | |
|         HttpEndpointDestinationConfiguration={
 | |
|             "EndpointConfiguration": {"Url": "https://google.com"},
 | |
|             "S3Configuration": s3_dest_config,
 | |
|         },
 | |
|     )
 | |
|     result = client.put_record(
 | |
|         DeliveryStreamName=stream_name, Record={"Data": "some test data"}
 | |
|     )
 | |
|     assert set(result.keys()) == {"RecordId", "Encrypted", "ResponseMetadata"}
 | |
| 
 | |
| 
 | |
| @mock_firehose
 | |
| def test_put_record_batch_http_destination():
 | |
|     """Test invocations of put_record_batch() to a Http destination."""
 | |
|     client = boto3.client("firehose", region_name=TEST_REGION)
 | |
|     s3_dest_config = sample_s3_dest_config()
 | |
| 
 | |
|     stream_name = f"test_put_record_{mock_random.get_random_hex(6)}"
 | |
|     client.create_delivery_stream(
 | |
|         DeliveryStreamName=stream_name,
 | |
|         HttpEndpointDestinationConfiguration={
 | |
|             "EndpointConfiguration": {"Url": "https://google.com"},
 | |
|             "S3Configuration": s3_dest_config,
 | |
|         },
 | |
|     )
 | |
|     records = [{"Data": "one"}, {"Data": "two"}, {"Data": "three"}]
 | |
|     result = client.put_record_batch(DeliveryStreamName=stream_name, Records=records)
 | |
|     assert set(result.keys()) == {
 | |
|         "FailedPutCount",
 | |
|         "Encrypted",
 | |
|         "RequestResponses",
 | |
|         "ResponseMetadata",
 | |
|     }
 | |
|     assert result["FailedPutCount"] == 0
 | |
|     assert result["Encrypted"] is False
 | |
|     for response in result["RequestResponses"]:
 | |
|         assert set(response.keys()) == {"RecordId"}
 | |
| 
 | |
| 
 | |
| @mock_s3
 | |
| @mock_firehose
 | |
| def test_put_record_batch_extended_s3_destination():
 | |
|     """Test invocations of put_record_batch() to a S3 destination."""
 | |
|     client = boto3.client("firehose", region_name=TEST_REGION)
 | |
| 
 | |
|     # Create a S3 bucket.
 | |
|     bucket_name = "firehosetestbucket"
 | |
|     s3_client = boto3.client("s3", region_name=TEST_REGION)
 | |
|     s3_client.create_bucket(
 | |
|         Bucket=bucket_name,
 | |
|         CreateBucketConfiguration={"LocationConstraint": S3_LOCATION_CONSTRAINT},
 | |
|     )
 | |
| 
 | |
|     stream_name = f"test_put_record_{mock_random.get_random_hex(6)}"
 | |
|     client.create_delivery_stream(
 | |
|         DeliveryStreamName=stream_name,
 | |
|         ExtendedS3DestinationConfiguration={
 | |
|             "RoleARN": f"arn:aws:iam::{ACCOUNT_ID}:role/firehose-test-role",
 | |
|             "BucketARN": f"arn:aws:s3::{bucket_name}",
 | |
|         },
 | |
|     )
 | |
|     records = [{"Data": "one"}, {"Data": "two"}, {"Data": "three"}]
 | |
|     result = client.put_record_batch(DeliveryStreamName=stream_name, Records=records)
 | |
|     assert set(result.keys()) == {
 | |
|         "FailedPutCount",
 | |
|         "Encrypted",
 | |
|         "RequestResponses",
 | |
|         "ResponseMetadata",
 | |
|     }
 | |
|     assert result["FailedPutCount"] == 0
 | |
|     assert result["Encrypted"] is False
 | |
|     for response in result["RequestResponses"]:
 | |
|         assert set(response.keys()) == {"RecordId"}
 | |
| 
 | |
|     # Pull data from S3 bucket.
 | |
|     bucket_objects = s3_client.list_objects_v2(Bucket=bucket_name)
 | |
|     response = s3_client.get_object(
 | |
|         Bucket=bucket_name, Key=bucket_objects["Contents"][0]["Key"]
 | |
|     )
 | |
|     assert response["Body"].read() == b"onetwothree"
 |