Skip to content

Commit 6a99daf

Browse files
committed
Fix Kotlin refactorings after Java refactorings on main
1 parent 6911c54 commit 6a99daf

File tree

5 files changed

+37
-24
lines changed

5 files changed

+37
-24
lines changed

server/src/main/kotlin/com/adobe/testing/s3mock/controller/BucketController.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,15 +226,15 @@ class BucketController(private val bucketService: BucketService) {
226226
* [API Reference](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html).
227227
*/
228228
@PutMapping(
229-
value = {
229+
value = [
230230
// AWS SDK V2 pattern
231231
"/{bucketName:.+}",
232232
// AWS SDK V1 pattern
233233
"/{bucketName:.+}/"
234-
},
235-
params = {
234+
],
235+
params = [
236236
VERSIONING
237-
}
237+
]
238238
)
239239
@S3Verified(year = 2025)
240240
fun putVersioningConfiguration(

server/src/main/kotlin/com/adobe/testing/s3mock/dto/Delete.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ data class Delete(
2929
@param:JsonProperty("Object", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")
3030
val objectsToDelete: List<S3ObjectIdentifier>,
3131
@param:JsonProperty("Quiet", namespace = "http://s3.amazonaws.com/doc/2006-03-01/")
32-
val quiet: Boolean?
32+
val quiet: Boolean = false
3333
)

server/src/main/kotlin/com/adobe/testing/s3mock/service/ObjectService.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ open class ObjectService(private val bucketStore: BucketStore, private val objec
135135
// ignore result of delete object.
136136
deleteObject(bucketName, toDelete.key, toDelete.versionId)
137137
// add deleted object even if it does not exist S3 does the same.
138-
deleted.add(DeletedS3Object.from(toDelete))
138+
if (!delete.quiet) {
139+
deleted.add(DeletedS3Object.from(toDelete))
140+
}
139141
} catch (e: IllegalStateException) {
140142
errors.add(
141143
Error(
@@ -299,7 +301,13 @@ open class ObjectService(private val bucketStore: BucketStore, private val objec
299301
}
300302

301303
if (!match.isNullOrEmpty()) {
302-
if (match.contains(WILDCARD_ETAG) || match.contains(WILDCARD) || match.contains(etag)) {
304+
val unquotedEtag = etag?.replace("\"", "")
305+
if (
306+
match.contains(WILDCARD_ETAG)
307+
|| match.contains(WILDCARD)
308+
|| match.contains(etag)
309+
|| (unquotedEtag != null && match.contains(unquotedEtag))
310+
) {
303311
// request cares only that the object exists or that the etag matches.
304312
LOG.debug("Object {} exists", s3ObjectMetadata.key)
305313
return
@@ -317,7 +325,13 @@ open class ObjectService(private val bucketStore: BucketStore, private val objec
317325
}
318326

319327
if (!noneMatch.isNullOrEmpty()) {
320-
if (noneMatch.contains(WILDCARD_ETAG) || noneMatch.contains(WILDCARD) || noneMatch.contains(etag)) {
328+
val unquotedEtag = etag?.replace("\"", "")
329+
if (
330+
noneMatch.contains(WILDCARD_ETAG)
331+
|| noneMatch.contains(WILDCARD)
332+
|| noneMatch.contains(etag)
333+
|| (unquotedEtag != null && noneMatch.contains(unquotedEtag))
334+
) {
321335
// request cares only that the object etag does not match.
322336
LOG.debug("Object {} has an ETag {} that matches one of the 'noneMatch' values", s3ObjectMetadata.key, etag)
323337
throw S3Exception.NOT_MODIFIED

server/src/test/kotlin/com/adobe/testing/s3mock/controller/MultipartControllerTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ internal class MultipartControllerTest : BaseControllerTest() {
10221022
val uploadId = UUID.randomUUID()
10231023

10241024
val temp = Files.createTempFile("junie", "part")
1025-
whenever(multipartService.toTempFile(any(), any())).thenReturn(FileChecksum(temp, null))
1025+
whenever(multipartService.toTempFile(any(), any())).thenReturn(Pair(temp, null))
10261026
whenever(
10271027
multipartService.putPart(eq(TEST_BUCKET_NAME), eq("my/key.txt"), eq(uploadId), eq(1), eq(temp), any())
10281028
).thenReturn("etag-123")
@@ -1329,7 +1329,7 @@ internal class MultipartControllerTest : BaseControllerTest() {
13291329
val uploadId = UUID.randomUUID()
13301330

13311331
val temp = Files.createTempFile("junie", "part")
1332-
whenever(multipartService.toTempFile(any(), any())).thenReturn(FileChecksum(temp, null))
1332+
whenever(multipartService.toTempFile(any(), any())).thenReturn(Pair(temp, null))
13331333

13341334
// when checksum headers are present, controller should call verifyChecksum and return header
13351335
val checksum = "abc123checksum"
@@ -1364,7 +1364,7 @@ internal class MultipartControllerTest : BaseControllerTest() {
13641364
fun testUploadPart_InvalidPartNumber_BadRequest() {
13651365
// Arrange: toTempFile is called before validations
13661366
val temp = Files.createTempFile("junie", "part")
1367-
whenever(multipartService.toTempFile(any(), any())).thenReturn(FileChecksum(temp, null))
1367+
whenever(multipartService.toTempFile(any(), any())).thenReturn(Pair(temp, null))
13681368

13691369
val bucketMeta = bucketMetadata()
13701370
whenever(bucketService.verifyBucketExists(TEST_BUCKET_NAME)).thenReturn(bucketMeta)
@@ -1395,7 +1395,7 @@ internal class MultipartControllerTest : BaseControllerTest() {
13951395
fun testUploadPart_NoSuchBucket() {
13961396
// toTempFile happens first
13971397
val temp = Files.createTempFile("junie", "part")
1398-
whenever(multipartService.toTempFile(any(), any())).thenReturn(FileChecksum(temp, null))
1398+
whenever(multipartService.toTempFile(any(), any())).thenReturn(Pair(temp, null))
13991399

14001400
// bucket missing
14011401
doThrow(S3Exception.NO_SUCH_BUCKET)
@@ -1422,7 +1422,7 @@ internal class MultipartControllerTest : BaseControllerTest() {
14221422
@Test
14231423
fun testUploadPart_NoSuchUpload() {
14241424
val temp = Files.createTempFile("junie", "part")
1425-
whenever(multipartService.toTempFile(any(), any())).thenReturn(FileChecksum(temp, null))
1425+
whenever(multipartService.toTempFile(any(), any())).thenReturn(Pair(temp, null))
14261426

14271427
val bucketMeta = bucketMetadata()
14281428
whenever(bucketService.verifyBucketExists(TEST_BUCKET_NAME)).thenReturn(bucketMeta)

server/src/test/kotlin/com/adobe/testing/s3mock/controller/ObjectControllerTest.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import com.adobe.testing.s3mock.dto.TagSet
3636
import com.adobe.testing.s3mock.dto.Tagging
3737
import com.adobe.testing.s3mock.dto.VersioningConfiguration
3838
import com.adobe.testing.s3mock.service.BucketService
39-
import com.adobe.testing.s3mock.service.FileChecksum
4039
import com.adobe.testing.s3mock.service.MultipartService
4140
import com.adobe.testing.s3mock.service.ObjectService
4241
import com.adobe.testing.s3mock.store.KmsKeyStore
@@ -109,7 +108,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
109108
)
110109
)
111110
.thenReturn(
112-
FileChecksum(
111+
Pair(
113112
tempFile,
114113
DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)
115114
)
@@ -161,7 +160,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
161160
)
162161
)
163162
.thenReturn(
164-
FileChecksum(
163+
Pair(
165164
tempFile,
166165
DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)
167166
)
@@ -225,7 +224,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
225224
)
226225
)
227226
.thenReturn(
228-
FileChecksum(
227+
Pair(
229228
tempFile,
230229
DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)
231230
)
@@ -274,7 +273,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
274273
isA<HttpHeaders>()
275274
)
276275
)
277-
.thenReturn(FileChecksum(testFile.toPath(), "checksum"))
276+
.thenReturn(Pair(testFile.toPath(), "checksum"))
278277
doThrow(S3Exception.BAD_REQUEST_MD5)
279278
.whenever(objectService)
280279
.verifyMd5(
@@ -856,8 +855,8 @@ internal class ObjectControllerTest : BaseControllerTest() {
856855
val tempFile = Files.createTempFile("postObject", "").also { testFile.copyTo(it.toFile(), overwrite = true) }
857856

858857
// Single-arg overload used by postObject
859-
whenever(objectService.toTempFile(any(InputStream::class.java)))
860-
.thenReturn(FileChecksum(tempFile, DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)))
858+
whenever(objectService.toTempFile(any<InputStream>()))
859+
.thenReturn(Pair(tempFile, DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)))
861860

862861
val returned = s3ObjectMetadata(key, DigestUtil.hexDigest(testFile.inputStream()))
863862
whenever(
@@ -958,8 +957,8 @@ internal class ObjectControllerTest : BaseControllerTest() {
958957
val testFile = File(UPLOAD_FILE_NAME)
959958
val tempFile = Files.createTempFile("postObjectTags", "").also { testFile.copyTo(it.toFile(), overwrite = true) }
960959

961-
whenever(objectService.toTempFile(any(InputStream::class.java)))
962-
.thenReturn(FileChecksum(tempFile, DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)))
960+
whenever(objectService.toTempFile(any<InputStream>()))
961+
.thenReturn(Pair(tempFile, DigestUtil.checksumFor(testFile.toPath(), DefaultChecksumAlgorithm.CRC32)))
963962

964963
val tagging = Tagging(TagSet(listOf(Tag("k1", "v1"), Tag("k2", "v2"))))
965964
val returned = s3ObjectMetadata(key, DigestUtil.hexDigest(testFile.inputStream()))
@@ -1017,8 +1016,8 @@ internal class ObjectControllerTest : BaseControllerTest() {
10171016
val temp = Files.createTempFile("put-chk", "").also { src.copyTo(it.toFile(), overwrite = true) }
10181017

10191018
// SDK checksum path: controller uses Right value from toTempFile
1020-
whenever(objectService.toTempFile(any(InputStream::class.java), any(HttpHeaders::class.java)))
1021-
.thenReturn(FileChecksum(temp, "crc32Value"))
1019+
whenever(objectService.toTempFile(any<InputStream>(), any<HttpHeaders>()))
1020+
.thenReturn(Pair(temp, "crc32Value"))
10221021

10231022
// Returned metadata should include checksum to be echoed as header
10241023
val s3ObjectMetadata = s3ObjectMetadata(

0 commit comments

Comments
 (0)