Skip to content

Commit 159cbe1

Browse files
committed
Let Spring convert StorageClass in postObject
Also add tests.
1 parent e26a9ec commit 159cbe1

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

integration-tests/src/test/kotlin/com/adobe/testing/s3mock/its/PresignedUrlIT.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.adobe.testing.s3mock.its
1717

1818
import com.adobe.testing.s3mock.dto.InitiateMultipartUploadResult
19+
import com.adobe.testing.s3mock.util.AwsHttpHeaders.X_AMZ_STORAGE_CLASS
1920
import com.adobe.testing.s3mock.util.DigestUtil
2021
import org.apache.http.HttpHeaders
2122
import org.apache.http.HttpHeaders.CONTENT_TYPE
@@ -36,6 +37,7 @@ import org.junit.jupiter.api.TestInfo
3637
import software.amazon.awssdk.core.sync.RequestBody
3738
import software.amazon.awssdk.services.s3.S3Client
3839
import software.amazon.awssdk.services.s3.model.CompletedPart
40+
import software.amazon.awssdk.services.s3.model.StorageClass
3941
import software.amazon.awssdk.services.s3.presigner.S3Presigner
4042
import tel.schich.awss3postobjectpresigner.S3PostObjectPresigner
4143
import tel.schich.awss3postobjectpresigner.S3PostObjectRequest
@@ -79,7 +81,7 @@ internal class PresignedUrlIT : S3TestBase() {
7981
.create()
8082
.addTextBody("key", key)
8183
.addTextBody(CONTENT_TYPE, "application/octet-stream")
82-
// .addTextBody(X_AMZ_STORAGE_CLASS, "INTELLIGENT_TIERING")
84+
.addTextBody(X_AMZ_STORAGE_CLASS, "INTELLIGENT_TIERING")
8385
.addTextBody("tagging", "<Tagging><TagSet><Tag><Key>Tag Name</Key><Value>Tag Value</Value></Tag></TagSet></Tagging>")
8486
.addBinaryBody("file", randomMBytes.inputStream(), ContentType.APPLICATION_OCTET_STREAM, key)
8587
.build()
@@ -101,6 +103,7 @@ internal class PresignedUrlIT : S3TestBase() {
101103
}.use {
102104
val actualEtag = "\"${DigestUtil.hexDigest(it)}\""
103105
assertThat(actualEtag).isEqualTo(expectedEtag)
106+
assertThat(it.response().storageClass()).isEqualTo(StorageClass.INTELLIGENT_TIERING)
104107
}
105108
s3Client
106109
.getObjectTagging {

server/src/main/java/com/adobe/testing/s3mock/ObjectController.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -199,12 +199,9 @@ public ResponseEntity<Void> postObject(
199199
@RequestParam(value = TAGGING, required = false) @Nullable List<Tag> tags,
200200
@RequestParam(value = CONTENT_TYPE, required = false) String contentType,
201201
@RequestParam(value = CONTENT_MD5, required = false) String contentMd5,
202-
@RequestParam(value = X_AMZ_STORAGE_CLASS, required = false) @Nullable String rawStorageClass,
202+
@RequestParam(value = X_AMZ_STORAGE_CLASS, required = false,
203+
defaultValue = "STANDARD") StorageClass storageClass,
203204
@RequestPart(FILE) MultipartFile file) throws IOException {
204-
StorageClass storageClass = null;
205-
if (rawStorageClass != null) {
206-
storageClass = StorageClass.valueOf(rawStorageClass);
207-
}
208205

209206
String checksum = null;
210207
ChecksumAlgorithm checksumAlgorithm = null;
@@ -228,7 +225,8 @@ public ResponseEntity<Void> postObject(
228225
checksumAlgorithm,
229226
checksum,
230227
owner,
231-
storageClass);
228+
storageClass
229+
);
232230

233231
FileUtils.deleteQuietly(tempFile.toFile());
234232

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.adobe.testing.s3mock.service.MultipartService
3939
import com.adobe.testing.s3mock.service.ObjectService
4040
import com.adobe.testing.s3mock.store.KmsKeyStore
4141
import com.adobe.testing.s3mock.util.AwsHttpHeaders
42+
import com.adobe.testing.s3mock.util.AwsHttpHeaders.X_AMZ_STORAGE_CLASS
4243
import com.adobe.testing.s3mock.util.AwsHttpParameters
4344
import com.adobe.testing.s3mock.util.DigestUtil
4445
import com.fasterxml.jackson.core.JsonProcessingException
@@ -844,7 +845,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
844845
val returned = s3ObjectMetadata(key, DigestUtil.hexDigest(Files.newInputStream(testFile.toPath())))
845846
whenever(
846847
objectService.putS3Object(
847-
eq(bucket), eq(key), any(), anyMap(), any(Path::class.java), anyMap(), anyMap(), isNull(), isNull(), isNull(), eq(Owner.DEFAULT_OWNER), isNull()
848+
eq(bucket), eq(key), any(), anyMap(), any(Path::class.java), anyMap(), anyMap(), isNull(), isNull(), isNull(), eq(Owner.DEFAULT_OWNER), eq(StorageClass.DEEP_ARCHIVE)
848849
)
849850
).thenReturn(returned)
850851

@@ -853,6 +854,7 @@ internal class ObjectControllerTest : BaseControllerTest() {
853854
multipart("/$bucket")
854855
.file(MockMultipartFile("file", key, MediaType.APPLICATION_OCTET_STREAM_VALUE, testFile.readBytes()))
855856
.param("key", key)
857+
.param(X_AMZ_STORAGE_CLASS, StorageClass.DEEP_ARCHIVE.toString())
856858
.accept(MediaType.APPLICATION_XML)
857859
)
858860
.andExpect(status().isOk)

0 commit comments

Comments
 (0)