162 lines
5.8 KiB
Python
162 lines
5.8 KiB
Python
"""Kinesis integration tests."""
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
|
|
# Disable CBOR — use JSON 1.1 as the emulator supports
|
|
os.environ["AWS_CBOR_DISABLE"] = "true"
|
|
|
|
|
|
class TestKinesisStream:
|
|
"""Test Kinesis stream operations."""
|
|
|
|
def test_create_stream(self, kinesis_client, unique_name):
|
|
"""Test CreateStream creates a stream."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
try:
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
# If no exception, test passes
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_list_streams(self, kinesis_client, unique_name):
|
|
"""Test ListStreams includes created stream."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
response = kinesis_client.list_streams()
|
|
assert stream_name in response["StreamNames"]
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_describe_stream(self, kinesis_client, unique_name):
|
|
"""Test DescribeStream returns stream details."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
response = kinesis_client.describe_stream(StreamName=stream_name)
|
|
assert response["StreamDescription"]["StreamName"] == stream_name
|
|
assert response["StreamDescription"]["Shards"]
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_describe_stream_summary(self, kinesis_client, unique_name):
|
|
"""Test DescribeStreamSummary returns summary."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
response = kinesis_client.describe_stream_summary(StreamName=stream_name)
|
|
assert response["StreamDescriptionSummary"]["StreamName"] == stream_name
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_delete_stream(self, kinesis_client, unique_name):
|
|
"""Test DeleteStream removes stream."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
response = kinesis_client.list_streams()
|
|
assert stream_name not in response.get("StreamNames", [])
|
|
|
|
|
|
class TestKinesisRecords:
|
|
"""Test Kinesis record operations."""
|
|
|
|
def test_put_record(self, kinesis_client, unique_name):
|
|
"""Test PutRecord writes record to stream."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
data = b"hello kinesis pytest"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
response = kinesis_client.put_record(
|
|
StreamName=stream_name, Data=data, PartitionKey="pk1"
|
|
)
|
|
assert response.get("SequenceNumber")
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_get_records(self, kinesis_client, unique_name):
|
|
"""Test GetRecords retrieves records from stream."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
data = b"hello kinesis pytest"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
# Put a record
|
|
kinesis_client.put_record(
|
|
StreamName=stream_name, Data=data, PartitionKey="pk1"
|
|
)
|
|
|
|
# Get shard iterator
|
|
describe_response = kinesis_client.describe_stream(StreamName=stream_name)
|
|
shard_id = describe_response["StreamDescription"]["Shards"][0]["ShardId"]
|
|
|
|
iterator_response = kinesis_client.get_shard_iterator(
|
|
StreamName=stream_name,
|
|
ShardId=shard_id,
|
|
ShardIteratorType="TRIM_HORIZON",
|
|
)
|
|
shard_iterator = iterator_response["ShardIterator"]
|
|
|
|
# Get records
|
|
response = kinesis_client.get_records(ShardIterator=shard_iterator)
|
|
found = any(rec["Data"] == data for rec in response["Records"])
|
|
assert found
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
def test_put_records_batch(self, kinesis_client, unique_name):
|
|
"""Test PutRecords writes multiple records."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
response = kinesis_client.put_records(
|
|
StreamName=stream_name,
|
|
Records=[
|
|
{"Data": b"batch1", "PartitionKey": "pk1"},
|
|
{"Data": b"batch2", "PartitionKey": "pk2"},
|
|
],
|
|
)
|
|
assert response["FailedRecordCount"] == 0
|
|
assert len(response["Records"]) == 2
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|
|
|
|
|
|
class TestKinesisTags:
|
|
"""Test Kinesis tagging operations."""
|
|
|
|
def test_add_tags_to_stream(self, kinesis_client, unique_name):
|
|
"""Test AddTagsToStream adds tags."""
|
|
stream_name = f"pytest-stream-{unique_name}"
|
|
|
|
kinesis_client.create_stream(StreamName=stream_name, ShardCount=1)
|
|
|
|
try:
|
|
kinesis_client.add_tags_to_stream(
|
|
StreamName=stream_name, Tags={"project": "floci"}
|
|
)
|
|
|
|
response = kinesis_client.list_tags_for_stream(StreamName=stream_name)
|
|
assert any(
|
|
t["Key"] == "project" and t["Value"] == "floci" for t in response["Tags"]
|
|
)
|
|
finally:
|
|
kinesis_client.delete_stream(StreamName=stream_name)
|