Skip to content

Commit 5e2dd22

Browse files
committed
Cleanup: close streams, use constants, Kotlinification
1 parent 02cbeb3 commit 5e2dd22

File tree

13 files changed

+190
-435
lines changed

13 files changed

+190
-435
lines changed

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

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ import software.amazon.awssdk.checksums.DefaultChecksumAlgorithm
2424
import software.amazon.awssdk.core.sync.RequestBody
2525
import software.amazon.awssdk.services.s3.model.ChecksumAlgorithm
2626
import software.amazon.awssdk.services.s3.model.ChecksumMode
27-
import java.io.File
28-
import java.io.FileInputStream
29-
import java.io.InputStream
3027

3128
/**
3229
* Chunked encoding with signing is only active in AWS SDK v2 when endpoint is http
@@ -47,18 +44,18 @@ internal class AwsChunkedEncodingIT : S3TestBase() {
4744
)
4845
fun `put object with checksum returns correct checksum, get object returns checksum`(testInfo: TestInfo) {
4946
val bucket = givenBucket(testInfo)
50-
val uploadFile = File(UPLOAD_FILE_NAME)
51-
val uploadFileIs: InputStream = FileInputStream(uploadFile)
52-
val expectedEtag = "\"${DigestUtil.hexDigest(uploadFileIs)}\""
53-
val expectedChecksum = DigestUtil.checksumFor(uploadFile.toPath(), DefaultChecksumAlgorithm.SHA256)
47+
val expectedEtag = UPLOAD_FILE.inputStream().use {
48+
"\"${DigestUtil.hexDigest(it)}\""
49+
}
50+
val expectedChecksum = DigestUtil.checksumFor(UPLOAD_FILE_PATH, DefaultChecksumAlgorithm.SHA256)
5451

5552
val putObjectResponse = s3Client.putObject(
5653
{
5754
it.bucket(bucket)
5855
it.key(UPLOAD_FILE_NAME)
5956
it.checksumAlgorithm(ChecksumAlgorithm.SHA256)
6057
},
61-
RequestBody.fromFile(uploadFile)
58+
RequestBody.fromFile(UPLOAD_FILE)
6259
)
6360

6461
putObjectResponse.checksumSHA256().also {
@@ -70,9 +67,9 @@ internal class AwsChunkedEncodingIT : S3TestBase() {
7067
it.bucket(bucket)
7168
it.checksumMode(ChecksumMode.ENABLED)
7269
it.key(UPLOAD_FILE_NAME)
73-
}.also {
70+
}.use {
7471
assertThat(it.response().eTag()).isEqualTo(expectedEtag)
75-
assertThat(it.response().contentLength()).isEqualTo(uploadFile.length())
72+
assertThat(it.response().contentLength()).isEqualTo(UPLOAD_FILE_LENGTH)
7673
assertThat(it.response().contentEncoding()).isNotEqualTo("aws-chunked")
7774
it.response().checksumSHA256().also {
7875
assertThat(it).isNotBlank
@@ -93,24 +90,24 @@ internal class AwsChunkedEncodingIT : S3TestBase() {
9390
)
9491
fun `put object creates correct etag, get object returns etag`(testInfo: TestInfo) {
9592
val bucket = givenBucket(testInfo)
96-
val uploadFile = File(UPLOAD_FILE_NAME)
97-
val uploadFileIs: InputStream = FileInputStream(uploadFile)
98-
val expectedEtag = "\"${DigestUtil.hexDigest(uploadFileIs)}\""
93+
val expectedEtag = UPLOAD_FILE.inputStream().use {
94+
"\"${DigestUtil.hexDigest(it)}\""
95+
}
9996

10097
s3Client.putObject(
10198
{
10299
it.bucket(bucket)
103100
it.key(UPLOAD_FILE_NAME)
104101
},
105-
RequestBody.fromFile(uploadFile)
102+
RequestBody.fromFile(UPLOAD_FILE)
106103
)
107104

108105
s3Client.getObject {
109106
it.bucket(bucket)
110107
it.key(UPLOAD_FILE_NAME)
111-
}.also {
108+
}.use {
112109
assertThat(it.response().eTag()).isEqualTo(expectedEtag)
113-
assertThat(it.response().contentLength()).isEqualTo(uploadFile.length())
110+
assertThat(it.response().contentLength()).isEqualTo(UPLOAD_FILE_LENGTH)
114111
assertThat(it.response().contentEncoding()).isNotEqualTo("aws-chunked")
115112
}
116113
}
@@ -122,8 +119,6 @@ internal class AwsChunkedEncodingIT : S3TestBase() {
122119
)
123120
fun `put object creates correct content-encoding, get object returns content-encoding`(testInfo: TestInfo) {
124121
val bucket = givenBucket(testInfo)
125-
val uploadFile = File(UPLOAD_FILE_NAME)
126-
127122
val customEncoding = "my-custom-encoding"
128123

129124
s3Client.putObject(
@@ -132,13 +127,13 @@ internal class AwsChunkedEncodingIT : S3TestBase() {
132127
it.key(UPLOAD_FILE_NAME)
133128
it.contentEncoding(customEncoding)
134129
},
135-
RequestBody.fromFile(uploadFile)
130+
RequestBody.fromFile(UPLOAD_FILE)
136131
)
137132

138133
s3Client.getObject {
139134
it.bucket(bucket)
140135
it.key(UPLOAD_FILE_NAME)
141-
}.also {
136+
}.use {
142137
assertThat(it.response().contentEncoding()).isEqualTo(customEncoding)
143138
}
144139
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ internal class ConcurrencyIT : S3TestBase() {
7272
s3Client.getObject {
7373
it.bucket(bucketName)
7474
it.key(key)
75-
}.also {
75+
}.use {
7676
assertThat(it.response().eTag()).isNotBlank
7777
}
7878

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

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,14 @@ internal class CopyObjectIT : S3TestBase() {
7676
fun `copy object with key needing escaping succeeds and object can be retrieved`(testInfo: TestInfo) {
7777
val sourceKey = charsSpecialKey()
7878
val bucketName = givenBucket(testInfo)
79-
val uploadFile = File(UPLOAD_FILE_NAME)
8079
val destinationBucketName = givenBucket()
8180
val destinationKey = "copyOf/$sourceKey"
8281

8382
val putObjectResult = s3Client.putObject(
8483
{
8584
it.bucket(bucketName)
8685
it.key(sourceKey)
87-
}, RequestBody.fromFile(uploadFile)
86+
}, RequestBody.fromFile(UPLOAD_FILE)
8887
)
8988

9089
s3Client.copyObject {
@@ -138,7 +137,7 @@ internal class CopyObjectIT : S3TestBase() {
138137
@S3VerifiedSuccess(year = 2025)
139138
fun `copy object with if-match=true and if-unmodified-since=false succeeds and object can be retrieved`(testInfo: TestInfo) {
140139
val sourceKey = UPLOAD_FILE_NAME
141-
val now = Instant.now().minus(60, SECONDS)
140+
val now = Instant.now().minusSeconds(60)
142141
val (bucketName, putObjectResult) = givenBucketAndObject(testInfo, sourceKey)
143142
val destinationBucketName = givenBucket()
144143
val destinationKey = "copyOf/$sourceKey"
@@ -169,8 +168,7 @@ internal class CopyObjectIT : S3TestBase() {
169168
@S3VerifiedSuccess(year = 2025)
170169
fun `copy object with if-modified-since=true succeeds and object can be retrieved`(testInfo: TestInfo) {
171170
val sourceKey = UPLOAD_FILE_NAME
172-
val now = Instant.now()
173-
TimeUnit.SECONDS.sleep(5)
171+
val now = Instant.now().minusSeconds(60)
174172
val (bucketName, putObjectResult) = givenBucketAndObject(testInfo, sourceKey)
175173
val destinationBucketName = givenBucket()
176174
val destinationKey = "copyOf/$sourceKey"
@@ -200,8 +198,7 @@ internal class CopyObjectIT : S3TestBase() {
200198
@S3VerifiedSuccess(year = 2025)
201199
fun `copy object with if-modified-since=true and if-none-match=false fails`(testInfo: TestInfo) {
202200
val sourceKey = UPLOAD_FILE_NAME
203-
val now = Instant.now()
204-
TimeUnit.SECONDS.sleep(5)
201+
val now = Instant.now().minusSeconds(60)
205202
val (bucketName, putObjectResult) = givenBucketAndObject(testInfo, sourceKey)
206203
val destinationBucketName = givenBucket()
207204
val destinationKey = "copyOf/$sourceKey"
@@ -229,7 +226,7 @@ internal class CopyObjectIT : S3TestBase() {
229226
val sourceKey = UPLOAD_FILE_NAME
230227
val (bucketName, putObjectResult) = givenBucketAndObject(testInfo, sourceKey)
231228
TimeUnit.SECONDS.sleep(5)
232-
val now = Instant.now()
229+
val now = Instant.now().plusSeconds(60)
233230
val destinationBucketName = givenBucket()
234231
val destinationKey = "copyOf/$sourceKey"
235232

@@ -332,15 +329,14 @@ internal class CopyObjectIT : S3TestBase() {
332329
@S3VerifiedSuccess(year = 2025)
333330
fun `copy object succeeds with same bucket and key with REPLACE and changing metadata`(testInfo: TestInfo) {
334331
val bucketName = givenBucket(testInfo)
335-
val uploadFile = File(UPLOAD_FILE_NAME)
336332
val sourceKey = UPLOAD_FILE_NAME
337333
val putObjectResult = s3Client.putObject(
338334
{
339335
it.bucket(bucketName)
340336
it.key(sourceKey)
341337
it.metadata(mapOf("test-key" to "test-value"))
342338
},
343-
RequestBody.fromFile(uploadFile)
339+
RequestBody.fromFile(UPLOAD_FILE)
344340
)
345341
val sourceLastModified = s3Client.headObject {
346342
it.bucket(bucketName)
@@ -370,7 +366,7 @@ internal class CopyObjectIT : S3TestBase() {
370366
assertThat(copiedObjectMetadata["test-key"]).isNull()
371367

372368
val length = response.contentLength()
373-
assertThat(length).isEqualTo(uploadFile.length())
369+
assertThat(length).isEqualTo(UPLOAD_FILE_LENGTH)
374370

375371
val copiedDigest = DigestUtil.hexDigest(it)
376372
assertThat("\"$copiedDigest\"").isEqualTo(putObjectResult.eTag())
@@ -385,7 +381,6 @@ internal class CopyObjectIT : S3TestBase() {
385381
@S3VerifiedSuccess(year = 2025)
386382
fun `copy object fails with same bucket and key without changing metadata`(testInfo: TestInfo) {
387383
val bucketName = givenBucket(testInfo)
388-
val uploadFile = File(UPLOAD_FILE_NAME)
389384
val sourceKey = UPLOAD_FILE_NAME
390385

391386
s3Client.putObject(
@@ -394,7 +389,7 @@ internal class CopyObjectIT : S3TestBase() {
394389
it.key(sourceKey)
395390
it.metadata(mapOf("test-key" to "test-value"))
396391
},
397-
RequestBody.fromFile(uploadFile)
392+
RequestBody.fromFile(UPLOAD_FILE)
398393
)
399394

400395
val sourceLastModified = s3Client.headObject {
@@ -421,9 +416,7 @@ internal class CopyObjectIT : S3TestBase() {
421416
@Test
422417
@S3VerifiedSuccess(year = 2025)
423418
fun `copy object succeeds with source metadata`(testInfo: TestInfo) {
424-
425419
val bucketName = givenBucket(testInfo)
426-
val uploadFile = File(UPLOAD_FILE_NAME)
427420
val sourceKey = UPLOAD_FILE_NAME
428421
val destinationBucketName = givenBucket()
429422
val destinationKey = "copyOf/$sourceKey/withSourceUserMetadata"
@@ -436,7 +429,7 @@ internal class CopyObjectIT : S3TestBase() {
436429
it.key(sourceKey)
437430
it.metadata(metadata)
438431
},
439-
RequestBody.fromFile(uploadFile)
432+
RequestBody.fromFile(UPLOAD_FILE)
440433
)
441434

442435
s3Client.copyObject {
@@ -489,7 +482,6 @@ internal class CopyObjectIT : S3TestBase() {
489482
@S3VerifiedSuccess(year = 2025)
490483
fun `copy object succeeds with new storageclass`(testInfo: TestInfo) {
491484
val sourceKey = UPLOAD_FILE_NAME
492-
val uploadFile = File(UPLOAD_FILE_NAME)
493485
val bucketName = givenBucket(testInfo)
494486

495487
s3Client.putObject(
@@ -498,7 +490,7 @@ internal class CopyObjectIT : S3TestBase() {
498490
it.key(sourceKey)
499491
it.storageClass(StorageClass.REDUCED_REDUNDANCY)
500492
},
501-
RequestBody.fromFile(uploadFile)
493+
RequestBody.fromFile(UPLOAD_FILE)
502494
)
503495

504496
val destinationBucketName = givenBucket()
@@ -525,7 +517,6 @@ internal class CopyObjectIT : S3TestBase() {
525517
@S3VerifiedSuccess(year = 2025)
526518
fun `copy object succeeds with overwriting stored headers`(testInfo: TestInfo) {
527519
val sourceKey = UPLOAD_FILE_NAME
528-
val uploadFile = File(UPLOAD_FILE_NAME)
529520
val bucketName = givenBucket(testInfo)
530521

531522
s3Client.putObject(
@@ -534,7 +525,7 @@ internal class CopyObjectIT : S3TestBase() {
534525
it.key(sourceKey)
535526
it.contentDisposition("")
536527
},
537-
RequestBody.fromFile(uploadFile)
528+
RequestBody.fromFile(UPLOAD_FILE)
538529
)
539530

540531
val destinationBucketName = givenBucket()

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

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,6 @@ import software.amazon.awssdk.services.s3.S3AsyncClient
2828
import software.amazon.awssdk.transfer.s3.S3TransferManager
2929
import software.amazon.awssdk.transfer.s3.model.DownloadRequest
3030
import java.io.ByteArrayInputStream
31-
import java.io.File
32-
import java.io.FileInputStream
33-
import java.io.InputStream
3431
import java.nio.charset.StandardCharsets
3532

3633
internal class CrtAsyncIT : S3TestBase() {
@@ -41,9 +38,9 @@ internal class CrtAsyncIT : S3TestBase() {
4138
@Test
4239
@S3VerifiedSuccess(year = 2025)
4340
fun testPutObject_etagCreation(testInfo: TestInfo) {
44-
val uploadFile = File(UPLOAD_FILE_NAME)
45-
val uploadFileIs: InputStream = FileInputStream(uploadFile)
46-
val expectedEtag = "\"${DigestUtil.hexDigest(uploadFileIs)}\""
41+
val expectedEtag = UPLOAD_FILE.inputStream().use {
42+
"\"${DigestUtil.hexDigest(it)}\""
43+
}
4744

4845
val bucketName = randomName
4946
autoS3CrtAsyncClient
@@ -56,7 +53,7 @@ internal class CrtAsyncIT : S3TestBase() {
5653
it.bucket(bucketName)
5754
it.key(UPLOAD_FILE_NAME)
5855
},
59-
AsyncRequestBody.fromFile(uploadFile)
56+
AsyncRequestBody.fromFile(UPLOAD_FILE)
6057
).join()
6158

6259
putObjectResponse.eTag().also {
@@ -68,7 +65,6 @@ internal class CrtAsyncIT : S3TestBase() {
6865
@Test
6966
@S3VerifiedSuccess(year = 2025)
7067
fun testPutGetObject_successWithMatchingEtag(testInfo: TestInfo) {
71-
val uploadFile = File(UPLOAD_FILE_NAME)
7268
val bucketName = randomName
7369
autoS3CrtAsyncClient
7470
.createBucket {
@@ -80,7 +76,7 @@ internal class CrtAsyncIT : S3TestBase() {
8076
it.bucket(bucketName)
8177
it.key(UPLOAD_FILE_NAME)
8278
},
83-
AsyncRequestBody.fromFile(uploadFile)
79+
AsyncRequestBody.fromFile(UPLOAD_FILE)
8480
).join().eTag()
8581

8682
autoS3CrtAsyncClient.getObject(
@@ -91,15 +87,14 @@ internal class CrtAsyncIT : S3TestBase() {
9187
AsyncResponseTransformer.toBytes()
9288
).join().also {
9389
assertThat(it.response().eTag()).isEqualTo(eTag)
94-
assertThat(it.response().contentLength()).isEqualTo(uploadFile.length())
90+
assertThat(it.response().contentLength()).isEqualTo(UPLOAD_FILE_LENGTH)
9591
}
9692
}
9793

9894
@Test
9995
@S3VerifiedSuccess(year = 2025)
10096
fun testMultipartUpload(testInfo: TestInfo) {
10197
val bucketName = givenBucket(testInfo)
102-
val uploadFile = File(UPLOAD_FILE_NAME)
10398
val objectMetadata = mapOf(Pair("key", "value"))
10499
val createMultipartUploadResponseCompletableFuture = autoS3CrtAsyncClient
105100
.createMultipartUpload {
@@ -119,10 +114,10 @@ internal class CrtAsyncIT : S3TestBase() {
119114
it.key(initiateMultipartUploadResult.key())
120115
it.uploadId(uploadId)
121116
it.partNumber(2)
122-
it.contentLength(uploadFile.length())
117+
it.contentLength(UPLOAD_FILE_LENGTH)
123118
//it.lastPart(true)
124119
},
125-
AsyncRequestBody.fromFile(uploadFile),
120+
AsyncRequestBody.fromFile(UPLOAD_FILE),
126121
).join()
127122

128123
val completeMultipartUploadResponse = autoS3CrtAsyncClient.completeMultipartUpload {
@@ -148,7 +143,7 @@ internal class CrtAsyncIT : S3TestBase() {
148143
it.key(UPLOAD_FILE_NAME)
149144
}, AsyncResponseTransformer.toBytes()).join()
150145

151-
val uploadFileBytes = readStreamIntoByteArray(uploadFile.inputStream())
146+
val uploadFileBytes = readStreamIntoByteArray(UPLOAD_FILE.inputStream())
152147
(DigestUtils.md5(randomBytes) + DigestUtils.md5(uploadFileBytes)).also {
153148
// verify special etag
154149
assertThat(completeMultipartUploadResponse.eTag()).isEqualTo("\"${DigestUtils.md5Hex(it)}-2\"")

0 commit comments

Comments
 (0)