196 lines
6.6 KiB
Python
196 lines
6.6 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import datetime
|
|
|
|
from botocore.exceptions import ClientError
|
|
import boto3
|
|
from freezegun import freeze_time
|
|
import sure # noqa
|
|
|
|
from moto import mock_kinesis
|
|
|
|
|
|
def create_stream(client, stream_name):
|
|
return client.create_delivery_stream(
|
|
DeliveryStreamName=stream_name,
|
|
RedshiftDestinationConfiguration={
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'ClusterJDBCURL': 'jdbc:redshift://host.amazonaws.com:5439/database',
|
|
'CopyCommand': {
|
|
'DataTableName': 'outputTable',
|
|
'CopyOptions': "CSV DELIMITER ',' NULL '\\0'"
|
|
},
|
|
'Username': 'username',
|
|
'Password': 'password',
|
|
'S3Configuration': {
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'BucketARN': 'arn:aws:s3:::kinesis-test',
|
|
'Prefix': 'myFolder/',
|
|
'BufferingHints': {
|
|
'SizeInMBs': 123,
|
|
'IntervalInSeconds': 124
|
|
},
|
|
'CompressionFormat': 'UNCOMPRESSED',
|
|
}
|
|
}
|
|
)
|
|
|
|
|
|
@mock_kinesis
|
|
@freeze_time("2015-03-01")
|
|
def test_create_stream():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
response = create_stream(client, 'stream1')
|
|
stream_arn = response['DeliveryStreamARN']
|
|
|
|
response = client.describe_delivery_stream(DeliveryStreamName='stream1')
|
|
stream_description = response['DeliveryStreamDescription']
|
|
|
|
# Sure and Freezegun don't play nicely together
|
|
created = stream_description.pop('CreateTimestamp')
|
|
last_updated = stream_description.pop('LastUpdateTimestamp')
|
|
from dateutil.tz import tzlocal
|
|
assert created == datetime.datetime(2015, 3, 1, tzinfo=tzlocal())
|
|
assert last_updated == datetime.datetime(2015, 3, 1, tzinfo=tzlocal())
|
|
|
|
stream_description.should.equal({
|
|
'DeliveryStreamName': 'stream1',
|
|
'DeliveryStreamARN': stream_arn,
|
|
'DeliveryStreamStatus': 'ACTIVE',
|
|
'VersionId': 'string',
|
|
'Destinations': [
|
|
{
|
|
'DestinationId': 'string',
|
|
'RedshiftDestinationDescription': {
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'ClusterJDBCURL': 'jdbc:redshift://host.amazonaws.com:5439/database',
|
|
'CopyCommand': {
|
|
'DataTableName': 'outputTable',
|
|
'CopyOptions': "CSV DELIMITER ',' NULL '\\0'"
|
|
},
|
|
'Username': 'username',
|
|
'S3DestinationDescription': {
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'BucketARN': 'arn:aws:s3:::kinesis-test',
|
|
'Prefix': 'myFolder/',
|
|
'BufferingHints': {
|
|
'SizeInMBs': 123,
|
|
'IntervalInSeconds': 124
|
|
},
|
|
'CompressionFormat': 'UNCOMPRESSED',
|
|
}
|
|
}
|
|
},
|
|
],
|
|
"HasMoreDestinations": False,
|
|
})
|
|
|
|
|
|
@mock_kinesis
|
|
@freeze_time("2015-03-01")
|
|
def test_create_stream_without_redshift():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
response = client.create_delivery_stream(
|
|
DeliveryStreamName="stream1",
|
|
S3DestinationConfiguration={
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'BucketARN': 'arn:aws:s3:::kinesis-test',
|
|
'Prefix': 'myFolder/',
|
|
'BufferingHints': {
|
|
'SizeInMBs': 123,
|
|
'IntervalInSeconds': 124
|
|
},
|
|
'CompressionFormat': 'UNCOMPRESSED',
|
|
}
|
|
)
|
|
stream_arn = response['DeliveryStreamARN']
|
|
|
|
response = client.describe_delivery_stream(DeliveryStreamName='stream1')
|
|
stream_description = response['DeliveryStreamDescription']
|
|
|
|
# Sure and Freezegun don't play nicely together
|
|
created = stream_description.pop('CreateTimestamp')
|
|
last_updated = stream_description.pop('LastUpdateTimestamp')
|
|
from dateutil.tz import tzlocal
|
|
assert created == datetime.datetime(2015, 3, 1, tzinfo=tzlocal())
|
|
assert last_updated == datetime.datetime(2015, 3, 1, tzinfo=tzlocal())
|
|
|
|
stream_description.should.equal({
|
|
'DeliveryStreamName': 'stream1',
|
|
'DeliveryStreamARN': stream_arn,
|
|
'DeliveryStreamStatus': 'ACTIVE',
|
|
'VersionId': 'string',
|
|
'Destinations': [
|
|
{
|
|
'DestinationId': 'string',
|
|
'S3DestinationDescription': {
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'RoleARN': 'arn:aws:iam::123456789012:role/firehose_delivery_role',
|
|
'BucketARN': 'arn:aws:s3:::kinesis-test',
|
|
'Prefix': 'myFolder/',
|
|
'BufferingHints': {
|
|
'SizeInMBs': 123,
|
|
'IntervalInSeconds': 124
|
|
},
|
|
'CompressionFormat': 'UNCOMPRESSED',
|
|
}
|
|
},
|
|
],
|
|
"HasMoreDestinations": False,
|
|
})
|
|
|
|
@mock_kinesis
|
|
@freeze_time("2015-03-01")
|
|
def test_deescribe_non_existant_stream():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
client.describe_delivery_stream.when.called_with(DeliveryStreamName='not-a-stream').should.throw(ClientError)
|
|
|
|
|
|
@mock_kinesis
|
|
@freeze_time("2015-03-01")
|
|
def test_list_and_delete_stream():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
create_stream(client, 'stream1')
|
|
create_stream(client, 'stream2')
|
|
|
|
set(client.list_delivery_streams()['DeliveryStreamNames']).should.equal(set(['stream1', 'stream2']))
|
|
|
|
client.delete_delivery_stream(DeliveryStreamName='stream1')
|
|
|
|
set(client.list_delivery_streams()['DeliveryStreamNames']).should.equal(set(['stream2']))
|
|
|
|
|
|
@mock_kinesis
|
|
def test_put_record():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
create_stream(client, 'stream1')
|
|
client.put_record(
|
|
DeliveryStreamName='stream1',
|
|
Record={
|
|
'Data': 'some data'
|
|
}
|
|
)
|
|
|
|
|
|
@mock_kinesis
|
|
def test_put_record_batch():
|
|
client = boto3.client('firehose', region_name='us-east-1')
|
|
|
|
create_stream(client, 'stream1')
|
|
client.put_record_batch(
|
|
DeliveryStreamName='stream1',
|
|
Records=[
|
|
{
|
|
'Data': 'some data1'
|
|
},
|
|
{
|
|
'Data': 'some data2'
|
|
},
|
|
]
|
|
)
|