Compatibility tests for Floci using boto3 (1.37.1).
| 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 |
- Python 3.9+
- pip
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-pythonlegacy/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/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| Variable | Default | Description |
|---|---|---|
FLOCI_ENDPOINT |
http://localhost:4566 |
Floci emulator endpoint |
AWS credentials are always test / test / us-east-1.
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 1Real 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_WRITESOnly 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 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