Skip to content

Latest commit

 

History

History
136 lines (104 loc) · 6.07 KB

README.md

File metadata and controls

136 lines (104 loc) · 6.07 KB

sdk-test-python

Compatibility tests for Floci using boto3 (1.37.1).

Services Covered

Group Description
ssm Parameter Store — put, get, label, history, path, tags
sqs Queues, send/receive/delete, DLQ, visibility
sns Topics, subscriptions, publish, SQS delivery
s3 Buckets, objects, tagging, copy, batch delete
s3-cors CORS configuration
s3-notifications S3 → SQS event notifications
dynamodb Tables, CRUD, batch, TTL, tags
lambda Create/invoke/update/delete functions
lambda-web Web functions, revisions, endpoints, waiters, tags, resource policy
iam Users, roles, policies, access keys
sts GetCallerIdentity, AssumeRole, GetSessionToken
secretsmanager Create/get/put/list/delete secrets, versioning, tags
kms Keys, aliases, encrypt/decrypt, data keys, sign/verify
kinesis Streams, shards, PutRecord/GetRecords
cloudwatch-metrics PutMetricData, ListMetrics, GetMetricStatistics, alarms
cloudformation-naming Auto physical name generation, explicit name precedence, cross-reference
cognito User pools, clients, AdminCreateUser, InitiateAuth, GetUser
elbv2 Listener certificates resolved against IAM and ACM

Requirements

  • Python 3.9+
  • pip

Running

pip install -r requirements.txt

# All groups
pytest tests/ --junit-xml=test-results/junit.xml

# Specific tests
pytest tests/test_s3.py

# Via just (from compatibility-tests/)
just test-python

Legacy DynamoDB client

legacy/test_dynamodb_20111205.py exercises the 2011-12-05 API with Boto 2, including paginated queries and batch cleanup of tables created by Boto 3. Public Boto 2.49.0 needs Python 3.9: it uses retired collections and import interfaces. Run this suite in a separate environment; the ordinary Python 3.12 suite retains its existing dependencies.

python3.9 -m venv .venv-legacy
.venv-legacy/bin/pip install -r requirements-legacy.txt
FLOCI_ENDPOINT=http://localhost:4566 .venv-legacy/bin/python -m pytest legacy/

tests/test_ec2_subnet_ipv6.py checks that expanded IPv6 subnet CIDRs are stored and returned in canonical form through Boto 3.

Legacy Query GET

legacy/test_elb_query_get.py checks that public Boto 2 Query GET reads and deletes Classic load balancers created through Boto 3 POST, including the missing-resource error. Boto 2.49.0 requires a separate Python 3.9 environment:

python3.9 -m venv .venv-legacy
.venv-legacy/bin/pip install boto==2.49.0 boto3 pytest cryptography
FLOCI_ENDPOINT=http://localhost:4566 .venv-legacy/bin/python -m pytest legacy/test_elb_query_get.py

Configuration

Variable Default Description
FLOCI_ENDPOINT http://localhost:4566 Floci emulator endpoint

AWS credentials are always test / test / us-east-1.

Opt-in metric filter replay against AWS

tests/metric_filter_replay.py is a standalone script, not a test: pytest does not collect it, and tests/test_metric_filter_replay.py checks its logic offline with the network blocked. It does not change conftest.py, and FLOCI_TARGET=aws does not select real AWS.

From the repository root, with the declared requirements installed:

python -m pytest compatibility-tests/sdk-test-python/tests/test_metric_filter_replay.py

# Against a local Floci
python compatibility-tests/sdk-test-python/tests/metric_filter_replay.py \
  --endpoint http://127.0.0.1:4566 --region eu-west-1 \
  --timeout 30 --stable-seconds 2 --poll-interval 1

Real AWS mode requires all three safety arguments. It creates billable CloudWatch metrics and a tagged log group, and metric series cannot be deleted; they remain until AWS ages them out.

python compatibility-tests/sdk-test-python/tests/metric_filter_replay.py \
  --aws --profile YOUR_DISPOSABLE_TEST_PROFILE --region eu-west-1 \
  --ack-live-writes I_ACCEPT_AWS_WRITES

Only commercial AWS regions are accepted, the clients pin the official regional endpoints, and the group is deleted in finally only after its ownership tag is verified. A cleanup failure exits nonzero and prints the group name. Credentials, account ids, profile names and raw service errors are never printed.

The expected values come from tests/fixtures/metric-filter-publishing-aws.json, a byte-identical copy of the root fixture src/test/resources/cloudwatchlogs/metric-filter-publishing-aws.json; the root CloudWatchLogsMetricFilterFixturePackagingTest fails when either SDK module copy drifts. The replay ingests each scenario into its own backdated minute, runs the quiet-default scenario last with no later ingestion, and accepts a result only after every expected series, absent series and the idle minute after the quiet one have stayed stable for a full window (AWS defaults: 240 second deadline, 30 second window). Output is JSON lines of observations, not a regenerated fixture.

Docker

docker build -t floci-sdk-python .
docker run --rm --network host floci-sdk-python

# Custom endpoint (macOS/Windows)
docker run --rm -e FLOCI_ENDPOINT=http://host.docker.internal:4566 floci-sdk-python