second first commit
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user