S3Mock
AGENTS.md1.2k starsChanged 3 months agoApache-2.0View on GitHub
Lightweight S3 API mock server for local integration testing. Read INVARIANTS.md first — it lists non-negotiable constraints that apply to all work in this repository. AGENTS.md Convention: Module-level AGENTS.md files inherit from this root file and contain only module-specific additions — never duplicate rules already stated here. Keep all AGENTS.md files concise: no redundant sections, no generic troubleshooting, no restating of rules from the root. Two independent bounded contexts under com.adobe.testing.s3mock, plus a thin shared common/ package: - s3/ —…
We split this AGENTS.md into the rules it gives an agent
13 rules. About 0 are common, 6 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈6
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
Use data classes for DTOs with Jackson XML annotations
- Distinctive: line 42
Use AWS SDK v2 for all new integration tests
- Distinctive: line 43
Use JUnit 5 for all new tests
- Distinctive: line 45
Keep DTO enum constants and fields that mirror the full AWS S3 API surface even if unused by current code — "unused" lint warnings on these …
- Very specific: line 46
Keep supporting deprecated-but-still-live AWS APIs (e.g.
- Very specific: line 108
Always use make targets. Never invoke ./mvnw directly.
- Very specific: line 110
Run make (or make help) to see all available targets with descriptions.
- Very specific: line 112
Use the lint skill to fix formatting and verify style gates (ktlint + Checkstyle) pass.
- Very specific: line 116
All PRs and pushes are validated by the maven-ci-and-prb.yml GitHub Actions workflow.
- Distinctive: line 133
Prefer Kotlin stdlib / JDK APIs over adding new third-party libraries
- Very specific: line 140
Update CHANGELOG.md under the current version section for user-facing changes
- Distinctive: line 141
Ensure all CI gates pass before requesting review
- Very specific: line 148
Tags: follow semver: 5.0.0, 4.11.0, etc.
≈ “Common” is an estimate: at least 1 in 5 of the 36,368 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent Context for S3Mock
Lightweight S3 API mock server for local integration testing.
Read INVARIANTS.md first — it lists non-negotiable constraints that apply to all work in this repository.
AGENTS.md Convention: Module-level
AGENTS.mdfiles inherit from this root file and contain only module-specific additions — never duplicate rules already stated here. Keep all AGENTS.md files concise: no redundant sections, no generic troubleshooting, no restating of rules from the root.
Tech Stack
- Kotlin (language/API compatibility 2.2, JVM bytecode target 17 — the fixed Spring Boot 4.x targets), Spring Boot 4.x, Maven 3.9+. Exact Kotlin/Spring Boot/build-JDK versions are pinned in the root
pom.xml— do not restate them here (they drift on every dependency bump) - Testing: JUnit 5, Mockito, AssertJ, Testcontainers
- Container: OCI image built by Spring Boot / Cloud Native Buildpacks (BellSoft Alpaquita Linux
muslbuilder, multi-arch)
Structure
| Module | Description | Agent context |
server/ | Core implementation (Controller→Service→Store); also builds the OCI Docker image | server/AGENTS.md |
integration-tests/ | AWS SDK integration tests | integration-tests/AGENTS.md |
testsupport/ | JUnit 5, Testcontainers, TestNG integrations | testsupport/AGENTS.md |
docs/ | Convention docs (KOTLIN.md, SPRING.md, TESTING.md, JAVA.md) | — |
Architecture
Two independent bounded contexts under com.adobe.testing.s3mock, plus a thin shared common/ package:
s3/— the core S3 API. Layered: Controller (REST) → Service (logic) → Store (filesystem). Key packages:s3/controller/,s3/service/,s3/store/,s3/model/,s3/dto/,s3/util/.vectors/— the S3 Vectors API (separate ports, JSON wire format). Mirrors the same layering:vectors/controller/,vectors/service/,vectors/store/,vectors/dto/.
s3 and vectors must not depend on each other (enforced by ArchitectureTest). common/ holds the few things both contexts share (e.g. StripedLocks, AwsHttpHeaders) and must not depend on either context.
DO / DON'T
For Kotlin idioms and naming conventions, see docs/KOTLIN.md. For Spring Boot patterns and testing setup, see docs/SPRING.md. For testing conventions and commands, see docs/TESTING.md.
DO
- Use data classes for DTOs with Jackson XML annotations
- Use AWS SDK v2 for all new integration tests
- Use JUnit 5 for all new tests
- Validate XML serialization against AWS S3 API documentation
- Keep DTO enum constants and fields that mirror the full AWS S3 API surface even if unused by current code — "unused" lint warnings on these are expected, not dead code
- Keep supporting deprecated-but-still-live AWS APIs (e.g.
listObjectsV1) for as long as AWS supports them; suppress the resulting warning with@Suppress("DEPRECATION")at the call site instead of removing the code
DON'T
See INVARIANTS.md for all non-negotiable constraints — SDK version, test framework, XML naming, layering rules, copyright, and runtime scope.
Code Style
See docs/KOTLIN.md for Kotlin idioms, naming conventions, common anti-patterns, and KDoc guidelines.
See docs/JAVA.md for Java idioms, naming conventions, common anti-patterns, and Javadoc guidelines.
See docs/SPRING.md for Spring Boot patterns, bean registration, dependency injection, controller guidelines, configuration properties, exception handling, and testing.
XML Serialization
Jackson 3 XML with AWS-compatible structure. Key annotations (Jackson 3 — tools.jackson packages):
@JsonRootName("...", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")— replaces old@JacksonXmlRootElement@JsonProperty("...", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")— replaces old@JacksonXmlProperty@JacksonXmlElementWrapper(useWrapping = false)for collections — fromtools.jackson.dataformat.xml.annotation
See dto/ListBucketResult.kt for a representative example. XML names must match the AWS S3 API exactly — see INVARIANTS.md.
Storage
Filesystem layout and metadata schemas (BucketMetadata, S3ObjectMetadata fields): see server/AGENTS.md § Storage Schema.
Configuration
Environment variables:
COM_ADOBE_TESTING_S3MOCK_STORE_ROOT- storage directoryCOM_ADOBE_TESTING_S3MOCK_STORE_RETAIN_FILES_ON_EXIT- keep files after shutdown (default: false)COM_ADOBE_TESTING_S3MOCK_STORE_REGION- AWS region (default: us-east-1)COM_ADOBE_TESTING_S3MOCK_STORE_INITIAL_BUCKETS- comma-separated bucket namesCOM_ADOBE_TESTING_S3MOCK_STORE_VALID_KMS_KEYS- valid KMS ARNsCOM_ADOBE_TESTING_S3MOCK_CONTROLLER_CONTEXT_PATH- base context path for all endpoints (default: "")
Spring profiles (activate via SPRING_PROFILES_ACTIVE):
debug- debug logging + activatesactuatorprofiletrace- trace logging + activatesactuatorprofileactuator- enables JMX and all Spring Boot Actuator endpoints
Actuator endpoints are disabled by default (management.endpoints.access.default=none).
Enable via SPRING_PROFILES_ACTIVE=actuator (or debug/trace) or by setting
MANAGEMENT_ENDPOINTS_ACCESS_DEFAULT=unrestricted directly.
Health check endpoints:
/favicon.ico— always available, returns200 OK(used by Testcontainers and integration tests)/actuator/health— only available whenactuatorprofile is active
Error Handling
Services throw S3Exception constants (NO_SUCH_BUCKET, NO_SUCH_KEY, INVALID_BUCKET_NAME, etc.).
Spring exception handlers convert them to XML ErrorResponse with the correct HTTP status.
See docs/SPRING.md for exception handling patterns and server/AGENTS.md for the concrete handler classes.
Testing
See docs/TESTING.md for the full testing strategy, base classes, patterns, and commands.
Build
Always use make targets. Never invoke ./mvnw directly.
Run make (or make help) to see all available targets with descriptions.
Use the lint skill to fix formatting and verify style gates (ktlint + Checkstyle) pass.
CI/CD Pipeline
All PRs and pushes are validated by the maven-ci-and-prb.yml GitHub Actions workflow.
Required gates (all must pass before merge):
- Compilation and build (
make verify) - Unit tests (
*Test.ktin each module) - Integration tests (
*IT.ktagainst Docker container) - ktlint (Kotlin code style)
- Checkstyle (Java/XML code style, config in
etc/checkstyle.xml) - OCI image build via Spring Boot Buildpacks in
server/(local architecture only; unless-DskipDocker)
Additional workflows: CodeQL (security scanning), SBOM (dependency tracking), OpenSSF Scorecard, Dependabot (automated dependency updates), Stale issue management.
Dependency Management
- All versions are declared in the root
pom.xml<properties>section - Sub-modules inherit versions — never declare versions in sub-module POMs (see INVARIANTS.md)
- BOMs are preferred for multi-artifact dependencies (Kotlin BOM, Spring Boot BOM, AWS SDK BOM)
- Prefer Kotlin stdlib / JDK APIs over adding new third-party libraries
- Dependabot manages automated version updates for Maven, Docker, and GitHub Actions
PR & Commit Conventions
- PRs should target
main(active development) or version maintenance branches - Reference related GitHub issues in PR description
- Update
CHANGELOG.mdunder the current version section for user-facing changes - Ensure all CI gates pass before requesting review
- See PR template and Contributing Guide
Version & Branch Strategy
main— active development for the current major version (5.x)- Version branches (
s3mock-v4) — maintenance for previous major version;s3mock-v2ands3mock-v3are EOL - Tags follow semver:
5.0.0,4.11.0, etc. - 6.x is planned after Spring Boot 5.x — will remove JUnit/TestNG modules and target JDK 25 LTS bytecode
Trending
More talk lately.about the whole repository
Who's talking about adobe/S3Mock
- shishirsharma/MyS3Browser“Feature Request: Allow Option of Endpoint-URL ”GitHub · May 28, 2020 · 2 reactions
- Stack Overflow“how to make local machine to assume IAM role”Stack Overflow · Apr 13, 2019 · 2 votes
- gardener/etcd-backup-restore“Find alternative to LocalStack for S3 emulation in e2e tests”GitHub · Mar 25, 2026 · 1 reactions
- swisstopo/swissgeol-assets-suite“Minio ist deprecated”GitHub · Feb 17, 2026 · 1 reactions
- aws/aws-sdk-kotlin“S3Client error java.lang.NoClassDefFoundError: kotlin/coroutines/jvm/internal/SpillingKt with 1.5.0+”GitHub · Jul 25, 2025 · 1 reactions
The biggest 5 of 50 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 50
Talked about on GitHub, Stack Overflow and Hacker News (50 times).
On GitHub · 46
- May 28, 2020Feature Request: Allow Option of Endpoint-URL — shishirsharma/MyS3Browser2 reactions · 3 comments
- Mar 25, 2026Find alternative to LocalStack for S3 emulation in e2e tests — gardener/etcd-backup-restore1 reaction · 2 comments
- Feb 17, 2026Minio ist deprecated — swisstopo/swissgeol-assets-suite1 reaction
- Jul 25, 2025S3Client error java.lang.NoClassDefFoundError: kotlin/coroutines/jvm/internal/SpillingKt with 1.5.0+ — aws/aws-sdk-kotlin1 reaction · 8 comments
- Mar 27, 2024use Adobe s3mock library — togglz/togglz1 reaction · 4 comments
41 more on GitHub
- Feb 14, 2024Migration d'Azure vers S3 — SocialGouv/cdtn-admin1 reaction · 1 comment
- Dec 5, 2022S3 Endpoint > Not able to use custom endpoint — aws/aws-sdk-php1 reaction · 9 comments
- Jun 3, 2022Use buildx, set tag to current version fails if it contains `-SNAPSHOT` — fabric8io/docker-maven-plugin1 reaction · 2 comments
- Jun 29, 2020Removed pinned version of adobe/s3mock docker image — overleaf/track-changes1 reaction · 1 comment
- Oct 9, 2026chore(storage): qualifier un backend S3 maintenu pour local/CI après archivage MinIO — NeooeN45/Quintessences0 reactions · 6 comments
- Sep 12, 2026docs: 확장 가능한 파일 저장 설계 및 구현 로드맵 추가 — dev-inho/backend-init0 reactions
- Aug 27, 2026Pin test container images, floating tags break the build when upstream changes — geosolutions-it/imageio-ext0 reactions
- Apr 26, 2026Add s3mock container — testcontainers/testcontainers-rs-modules-community0 reactions · 2 comments
- Apr 15, 2026[BUGFIX] Corriger l'initialisation des buckets S3 dans l'image docker — 1024pix/pix0 reactions · 2 comments
- Apr 8, 2026Update to latest S3Mock, which uses the updated `testcontainers` for Docker v29+ — guardian/etag-caching0 reactions
- Feb 20, 2026Update `testcontainers` to a version that works with Docker v29 — guardian/etag-caching0 reactions
- Jan 29, 2026Read-only image configuration for production-like testing — CMSgov/bluebutton-web-serversays it tested it0 reactions · 1 comment
- Jan 13, 2026Support for S3 data — fractal-analytics-platform/fractal-server0 reactions · 12 comments
- Dec 5, 2025Allow Specifying working directory on a per-invocation basis — woodpecker-ci/woodpecker0 reactions · 5 comments
- Oct 30, 2025Add S3Mock to implementation matrix — nikeee/lean-s30 reactions
- Jul 27, 2025Setup S3Mock in the compose setup — tchoutri/masna30 reactions
- Oct 8, 2024Upgrade Adobe s3mock to version 3.11.0 — apache/polaris0 reactions
- Aug 24, 2024DBZ-8169 Upgrade Adobe s3mock to 3.10.0 — debezium/debezium0 reactions · 1 comment
- Apr 18, 2024Publish large message payloads to S3 — sedaprotocol/seda-chain0 reactions · 1 comment
- Apr 7, 2024Document how to use the Amazon S3 Media module with a local storage emulator, implement support for it if necessary — OrchardCMS/OrchardCore0 reactions · 1 comment
- Mar 7, 2024Enhance local dev env — stackernews/stacker.news0 reactions · 6 comments
- Mar 2, 2024s3mock 3.6.0 — apache/pinot0 reactions · 3 comments
- Jan 17, 2024Add a dockerized S3 instance, for testing — duolicious/duolicioussays it tested it0 reactions
- Nov 25, 2023Retrieve, store and display asset metadata — royllo/explorer0 reactions
- Aug 31, 2023[Epic] Provide local filesystem-backed mock S3 service — cryostatio/cryostat0 reactions · 5 comments
- Jul 19, 2023Change suggested to add Dependabot config for a subfolder even though that exists already — step-security/secure-repo0 reactions · 1 comment
- Jul 13, 2023Mock S3 for testcase server — skkuding/codedang0 reactions
- May 16, 2023Add integration tests with an S3 API mock — jgroups-extras/jgroups-aws0 reactions · 1 comment
- Aug 10, 2022Multi-platform buildx: goal "push" fails with "Cannot extract archive" — fabric8io/docker-maven-plugin0 reactions · 4 comments
- Jun 1, 2022S3 storage ITs — artipie/asto0 reactions
- Mar 3, 2022File creation year is inaccurate by default — mathieucarbou/license-maven-plugin0 reactions · 1 comment
- Mar 10, 2021CommonPrefixes not parsed correctly if it contains multiple Prefix tags — boto/botocore0 reactions · 6 comments
- Feb 3, 2021Try switching s3 mocks — OCFL/ocfl-java0 reactions · 1 comment
- Feb 3, 2021Configure publication to Maven Central using Github actions — moditect/layrry0 reactions · 5 comments
- Jun 24, 2020Add Integration tests for AWS as part of the CI pipeline. — aslotte/MLOps.NET0 reactions
- Feb 25, 2020MultiPartUpload response content type — gaul/s3proxy0 reactions · 5 comments
- Mar 8, 2019Create tests for testing the S3.go file — smithoss/gonymizersays it tested it0 reactions
- Jan 9, 2019[CI/Python] Have automatized tests for S3 — apache/arrow0 reactions · 3 comments
- Jan 6, 2019Investigate using mock services for tests — scottwernervt/cloudstorage0 reactions
- Nov 22, 2018[research] Investigate using Adobe's S3 mock — franklinchou/csv-2-cassandra0 reactions
- Jul 11, 2018track adobe/s3mock update, since it is not using the latest version of github repo — apache/pulsar0 reactions · 1 comment
On Stack Overflow · 3
- Apr 13, 2019how to make local machine to assume IAM role2 votes
- Apr 12, 2024how to mock s3 using pytest? Unittest script calls actual function instead of mocking it?0 votes
- Oct 10, 2024Unable to replace python function definition with mock and unitest-1 votes
On Hacker News · 1
- Sep 10, 2020Javac could leak higher JDK bytecode1 point
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 28,693 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository10 other files it gives its agents.
- integration-tests/AGENTS.mdAGENTS.md
- server/AGENTS.mdAGENTS.md
- testsupport/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- documentSkill
- implementSkill
- lintSkill
- refactorSkill
- reviewSkill
- testSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

