@@ -17,7 +17,75 @@ This document contains a list of potential improvements for the S3Mock project.
1717
1818## Code Quality Improvements
1919
20- 11 . [ ] Increase unit test coverage for service and store layers
20+ 11 . [ ] Increase unit test coverage for controller, service and store layers
21+
22+ ### Task 11 – Test Coverage Plan (Components and Actions)
23+
24+ Scope and components to cover:
25+ - Controllers (HTTP): BucketController, ObjectController, MultipartController
26+ - Services (business logic): BucketService, ObjectService, MultipartService, Kms* services
27+ - Stores (persistence): BucketStore, ObjectStore, MultipartStore, KmsKeyStore
28+ - XML/DTOs and mappers: request/response XML models, serialization utils
29+ - Utilities: digest, ETag, headers, Range requests, SSE
30+ - Configuration: StoreConfiguration, controller advice/error mapping
31+
32+ Priorities (short-to-long horizon):
33+ 1 ) High-value happy-path and error-path coverage for controllers with mocked services (fast feedback).
34+ 2 ) Store layer correctness with Spring Boot WebEnvironment.NONE tests (file IO, metadata persistence, edge cases).
35+ 3 ) Service layer behavior with mocked stores (parameter validation, branching, SSE/KMS interactions).
36+ 4 ) XML serialization/deserialization fidelity for commonly used operations.
37+ 5 ) Regression tests for known corner cases (range requests, conditional headers, multipart completion ordering, KMS key validation).
38+
39+ Concrete test additions (incremental):
40+ - Controllers
41+ - BucketController
42+ - listBuckets returns empty and non-empty results; XML schema shape
43+ - createBucket duplicate name -> proper S3 error code
44+ - deleteBucket non-empty -> proper error
45+ - ObjectController
46+ - putObject with/without Content-MD5; mismatched MD5 -> error
47+ - getObject with Range header (single range) -> 206 + Content-Range
48+ - getObject nonexistent -> 404 S3-style error
49+ - headObject verifies metadata and headers (ETag, Content-Length)
50+ - MultipartController
51+ - initiateMultipartUpload returns uploadId
52+ - uploadPart with invalid partNumber -> error mapping
53+ - completeMultipartUpload out-of-order parts -> consistent ETag behavior
54+ - Services
55+ - ObjectService.storeObject validates metadata, handles SSE headers routing to KMS
56+ - BucketService.deleteBucket checks emptiness guard
57+ - Stores
58+ - ObjectStore
59+ - storeS3ObjectMetadata and getS3ObjectMetadata roundtrip
60+ - list with prefix/delimiter, max-keys, continuation
61+ - delete removes metadata and data file
62+ - BucketStore
63+ - create, list, delete, exist checks
64+ - MultipartStore
65+ - init, addPart, complete, abort state transitions
66+ - XML/DTOs
67+ - Serialize/deserialize ListAllMyBucketsResult, CompleteMultipartUploadResult
68+
69+ Suggested file locations (server module):
70+ - Controllers: server/src/test/kotlin/com/adobe/testing/s3mock/itlike/controller/* Test.kt (extending BaseControllerTest)
71+ - Services: server/src/test/kotlin/com/adobe/testing/s3mock/service/* Test.kt
72+ - Stores: server/src/test/kotlin/com/adobe/testing/s3mock/store/* Test.kt (extend StoreTestBase)
73+ - DTOs: server/src/test/kotlin/com/adobe/testing/s3mock/xml/* Test.kt
74+
75+ Execution (fast path per repo guidelines):
76+ - One test class: ./mvnw -pl server test -Dtest=ObjectStoreTest
77+ - One method: ./mvnw -pl server test -Dtest=ObjectStoreTest#testStoreAndGetObject
78+ - Or via tool: run_test server/src/test/kotlin/com/adobe/testing/s3mock/store/ObjectStoreTest.kt
79+
80+ Acceptance targets for Task 11 completion:
81+ - +10–15% line coverage increase in server module, focusing on controllers and stores
82+ - At least one new test per component category listed above
83+ - Error-path assertions include correct HTTP status and S3 error codes/messages
84+
85+ Notes:
86+ - Avoid ITs unless Docker available; prefer WebEnvironment.RANDOM_PORT controller tests with mocked services.
87+ - Use provided test bases: BaseControllerTest, StoreTestBase, ServiceTestBase.
88+ - Reuse existing sample files: server/src/test/resources/sampleFile.txt, sampleFile_large.txt, sampleKMSFile.txt.
218912 . [ ] Refactor synchronization mechanisms in store classes to improve concurrency handling
229013 . [ ] Implement more comprehensive input validation for S3 API parameters
239114 . [ ] Add more detailed logging throughout the application for better debugging
0 commit comments