Skip to content

Commit ea50d00

Browse files
committed
Idiomatic Kotlin part 2
1 parent 917535e commit ea50d00

File tree

4 files changed

+46
-61
lines changed

4 files changed

+46
-61
lines changed

server/src/test/kotlin/com/adobe/testing/s3mock/util/AwsChunkedDecodingChecksumInputStreamTest.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,20 @@
1616
package com.adobe.testing.s3mock.util
1717

1818
import com.adobe.testing.s3mock.ChecksumTestUtil
19-
import com.adobe.testing.s3mock.dto.ChecksumAlgorithm
2019
import com.adobe.testing.s3mock.ChecksumTestUtil.prepareInputStream
20+
import com.adobe.testing.s3mock.dto.ChecksumAlgorithm
2121
import org.assertj.core.api.Assertions.assertThat
2222
import org.junit.jupiter.api.Test
2323
import org.junit.jupiter.api.TestInfo
2424
import org.junit.jupiter.params.ParameterizedTest
2525
import org.junit.jupiter.params.provider.MethodSource
2626
import software.amazon.awssdk.checksums.DefaultChecksumAlgorithm
2727
import java.io.File
28-
import java.io.IOException
29-
import java.nio.file.Files
3028
import java.util.stream.Stream
29+
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm as AwsChecksumAlgorithm
3130

3231
internal class AwsChunkedDecodingChecksumInputStreamTest {
3332
@Test
34-
@Throws(IOException::class)
3533
fun `test decoding aws inputstream with fixed checksum`(testInfo: TestInfo) {
3634
val sampleFile = TestUtil.getFileFromClasspath(testInfo, "sampleFile.txt")
3735
val sampleFileLarge = TestUtil.getFileFromClasspath(testInfo, "sampleFile_large.txt")
@@ -53,9 +51,8 @@ internal class AwsChunkedDecodingChecksumInputStreamTest {
5351

5452
@ParameterizedTest
5553
@MethodSource("algorithms")
56-
@Throws(IOException::class)
5754
fun `test decoding aws inputstream with calculated checksum`(
58-
algorithm: software.amazon.awssdk.checksums.spi.ChecksumAlgorithm,
55+
algorithm: AwsChecksumAlgorithm,
5956
testInfo: TestInfo
6057
) {
6158
val checksumAlgorithm = ChecksumAlgorithm.fromString(algorithm.toString())
@@ -95,7 +92,6 @@ internal class AwsChunkedDecodingChecksumInputStreamTest {
9592
}
9693

9794
@Test
98-
@Throws(IOException::class)
9995
fun `test decoding aws inputstream without checksum`(testInfo: TestInfo) {
10096
val sampleFile = TestUtil.getFileFromClasspath(testInfo, "sampleFile.txt")
10197
val sampleFileLarge = TestUtil.getFileFromClasspath(testInfo, "sampleFile_large.txt")
@@ -107,11 +103,10 @@ internal class AwsChunkedDecodingChecksumInputStreamTest {
107103
doTest(testImage, 17)
108104
}
109105

110-
@Throws(IOException::class)
111106
private fun doTest(
112107
input: File,
113108
chunks: Int = 0,
114-
algorithm: software.amazon.awssdk.checksums.spi.ChecksumAlgorithm? = null,
109+
algorithm: AwsChecksumAlgorithm? = null,
115110
checksum: String? = null,
116111
checksumAlgorithm: ChecksumAlgorithm? = null
117112
) {
@@ -121,7 +116,7 @@ internal class AwsChunkedDecodingChecksumInputStreamTest {
121116
algorithm,
122117
)
123118
val iut = AwsChunkedDecodingChecksumInputStream(chunkedEncodingInputStream, decodedLength)
124-
assertThat(iut).hasSameContentAs(Files.newInputStream(input.toPath()))
119+
assertThat(iut).hasSameContentAs(input.inputStream())
125120
assertThat(iut.getAlgorithm()).isEqualTo(checksumAlgorithm)
126121
assertThat(iut.getChecksum()).isEqualTo(checksum)
127122
assertThat(iut.decodedLength).isEqualTo(decodedLength)
@@ -131,8 +126,6 @@ internal class AwsChunkedDecodingChecksumInputStreamTest {
131126

132127
companion object {
133128
@JvmStatic
134-
fun algorithms(): Stream<software.amazon.awssdk.checksums.spi.ChecksumAlgorithm> {
135-
return ChecksumTestUtil.algorithms()
136-
}
129+
fun algorithms(): Stream<AwsChecksumAlgorithm> = ChecksumTestUtil.algorithms()
137130
}
138131
}

server/src/test/kotlin/com/adobe/testing/s3mock/util/AwsUnsignedChunkedDecodingChecksumInputStreamTest.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,20 @@
1616
package com.adobe.testing.s3mock.util
1717

1818
import com.adobe.testing.s3mock.ChecksumTestUtil
19-
import com.adobe.testing.s3mock.dto.ChecksumAlgorithm
2019
import com.adobe.testing.s3mock.ChecksumTestUtil.prepareInputStream
20+
import com.adobe.testing.s3mock.dto.ChecksumAlgorithm
2121
import org.assertj.core.api.Assertions.assertThat
2222
import org.junit.jupiter.api.Test
2323
import org.junit.jupiter.api.TestInfo
2424
import org.junit.jupiter.params.ParameterizedTest
2525
import org.junit.jupiter.params.provider.MethodSource
2626
import software.amazon.awssdk.checksums.DefaultChecksumAlgorithm
2727
import java.io.File
28-
import java.io.IOException
29-
import java.nio.file.Files
3028
import java.util.stream.Stream
29+
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm as AwsChecksumAlgorithm
3130

3231
internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
3332
@Test
34-
@Throws(IOException::class)
3533
fun `test decoding aws inputstream with fixed checksum`(testInfo: TestInfo) {
3634
val sampleFile = TestUtil.getFileFromClasspath(testInfo, "sampleFile.txt")
3735
val sampleFileLarge = TestUtil.getFileFromClasspath(testInfo, "sampleFile_large.txt")
@@ -53,9 +51,8 @@ internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
5351

5452
@ParameterizedTest
5553
@MethodSource("algorithms")
56-
@Throws(IOException::class)
5754
fun `test decoding aws inputstream with calculated checksum`(
58-
algorithm: software.amazon.awssdk.checksums.spi.ChecksumAlgorithm,
55+
algorithm: AwsChecksumAlgorithm,
5956
testInfo: TestInfo
6057
) {
6158
val checksumAlgorithm = ChecksumAlgorithm.fromString(algorithm.toString())
@@ -95,7 +92,6 @@ internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
9592
}
9693

9794
@Test
98-
@Throws(IOException::class)
9995
fun `test decoding aws inputstream without checksum`(testInfo: TestInfo) {
10096
val sampleFile = TestUtil.getFileFromClasspath(testInfo, "sampleFile.txt")
10197
val sampleFileLarge = TestUtil.getFileFromClasspath(testInfo, "sampleFile_large.txt")
@@ -107,11 +103,10 @@ internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
107103
doTest(testImage, 17)
108104
}
109105

110-
@Throws(IOException::class)
111106
private fun doTest(
112107
input: File,
113108
chunks: Int = 0,
114-
algorithm: software.amazon.awssdk.checksums.spi.ChecksumAlgorithm? = null,
109+
algorithm: AwsChecksumAlgorithm? = null,
115110
checksum: String? = null,
116111
checksumAlgorithm: ChecksumAlgorithm? = null
117112
) {
@@ -121,7 +116,7 @@ internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
121116
algorithm,
122117
)
123118
val iut = AwsUnsignedChunkedDecodingChecksumInputStream(chunkedEncodingInputStream, decodedLength)
124-
assertThat(iut).hasSameContentAs(Files.newInputStream(input.toPath()))
119+
assertThat(iut).hasSameContentAs(input.inputStream())
125120
assertThat(iut.getAlgorithm()).isEqualTo(checksumAlgorithm)
126121
assertThat(iut.getChecksum()).isEqualTo(checksum)
127122
assertThat(iut.decodedLength).isEqualTo(decodedLength)
@@ -131,8 +126,6 @@ internal class AwsUnsignedChunkedDecodingChecksumInputStreamTest {
131126

132127
companion object {
133128
@JvmStatic
134-
fun algorithms(): Stream<software.amazon.awssdk.checksums.spi.ChecksumAlgorithm> {
135-
return ChecksumTestUtil.algorithms()
136-
}
129+
fun algorithms(): Stream<AwsChecksumAlgorithm> = ChecksumTestUtil.algorithms()
137130
}
138131
}

server/src/test/kotlin/com/adobe/testing/s3mock/util/HeaderUtilTest.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,15 @@ import java.util.UUID
3030
internal class HeaderUtilTest {
3131
@Test
3232
fun testGetUserMetadata_canonical() {
33-
val httpHeaders = HttpHeaders()
34-
httpHeaders.add(X_AMZ_CANONICAL_HEADER, TEST_VALUE)
33+
val httpHeaders = HttpHeaders().apply { add(X_AMZ_CANONICAL_HEADER, TEST_VALUE) }
3534

3635
val userMetadata = HeaderUtil.userMetadataFrom(httpHeaders)
3736
assertThat(userMetadata).containsEntry(X_AMZ_CANONICAL_HEADER, TEST_VALUE)
3837
}
3938

4039
@Test
4140
fun testGetUserMetadata_javaSdk() {
42-
val httpHeaders = HttpHeaders()
43-
httpHeaders.add(X_AMZ_LOWERCASE_HEADER, TEST_VALUE)
41+
val httpHeaders = HttpHeaders().apply { add(X_AMZ_LOWERCASE_HEADER, TEST_VALUE) }
4442

4543
val userMetadata = HeaderUtil.userMetadataFrom(httpHeaders)
4644
assertThat(userMetadata).containsEntry(X_AMZ_LOWERCASE_HEADER, TEST_VALUE)
@@ -64,25 +62,25 @@ internal class HeaderUtilTest {
6462
assertThat(userMetadataHeaders).containsEntry(X_AMZ_LOWERCASE_HEADER, TEST_VALUE)
6563
}
6664

67-
private fun s3ObjectMetadata(id: UUID = UUID.randomUUID(), key: String = "key", userMetadata: Map<String, String>? = null): S3ObjectMetadata {
68-
val lastModified = "lastModified"
69-
val etag = "etag"
70-
val size = "size"
71-
val owner = Owner("name", 0L.toString())
72-
return S3ObjectMetadata(
65+
private fun s3ObjectMetadata(
66+
id: UUID = UUID.randomUUID(),
67+
key: String = "key",
68+
userMetadata: Map<String, String>? = null
69+
): S3ObjectMetadata =
70+
S3ObjectMetadata(
7371
id,
7472
key,
75-
size,
76-
lastModified,
77-
"\"$etag\"",
73+
"size",
74+
"lastModified",
75+
"\"etag\"",
7876
null,
7977
Instant.now().toEpochMilli(),
8078
Path.of("test"),
8179
userMetadata,
8280
null,
8381
null,
8482
null,
85-
owner,
83+
Owner("name", 0L.toString()),
8684
null,
8785
null,
8886
ChecksumAlgorithm.SHA256,
@@ -93,7 +91,6 @@ internal class HeaderUtilTest {
9391
false,
9492
ChecksumType.FULL_OBJECT
9593
)
96-
}
9794

9895
companion object {
9996
private const val X_AMZ_CANONICAL_HEADER = "X-Amz-Meta-Some-header"
Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2024 Adobe.
2+
* Copyright 2017-2025 Adobe.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,40 +17,42 @@ package com.adobe.testing.s3mock.util
1717

1818
import org.junit.jupiter.api.TestInfo
1919
import java.io.File
20-
import java.util.Objects
2120

2221
object TestUtil {
2322
fun getTestFile(testInfo: TestInfo, name: String?): File {
24-
val testClass = testInfo.testClass.get()
25-
val packageName = testClass.getPackage().name
26-
val className = testClass.simpleName
27-
val methodName = testInfo.testMethod.get().name
28-
val fileName = "${packageName.replace(".", "/")}/${className}_${methodName}_$name"
23+
val (packagePath, className, methodName) = testMeta(testInfo)
24+
val safeName = name.orEmpty()
25+
val fileName = "$packagePath/${className}_${methodName}_$safeName"
2926
return getFileFromClasspath(testInfo, fileName)
3027
}
3128

3229
fun getPayloadFile(testInfo: TestInfo, name: String?): File {
33-
val testClass = testInfo.testClass.get()
34-
val packageName = testClass.getPackage().name
35-
val className = testClass.simpleName
36-
val fileName = "${packageName.replace(".", "/")}/${className}_payload_$name"
30+
val (packagePath, className) = testMeta(testInfo)
31+
val safeName = name.orEmpty()
32+
val fileName = "$packagePath/${className}_payload_$safeName"
3733
return getFileFromClasspath(testInfo, fileName)
3834
}
3935

4036
fun getFileFromPackage(testInfo: TestInfo, name: String?): File {
41-
val testClass = testInfo.testClass.get()
42-
val packageName = testClass.getPackage().name
43-
val fileName = "${packageName.replace(".", "/")}/$name"
37+
val (packagePath) = testMeta(testInfo)
38+
val fileName = "$packagePath/${name.orEmpty()}"
4439
return getFileFromClasspath(testInfo, fileName)
4540
}
4641

47-
fun getSampleFile(testInfo: TestInfo): File {
48-
return getFileFromClasspath(testInfo, "sampleFile.txt")
49-
}
42+
fun getSampleFile(testInfo: TestInfo): File =
43+
getFileFromClasspath(testInfo, "sampleFile.txt")
5044

5145
fun getFileFromClasspath(testInfo: TestInfo, fileName: String?): File {
52-
val testClass = testInfo.testClass.get()
53-
val classLoader = testClass.classLoader
54-
return File(Objects.requireNonNull(classLoader.getResource(fileName)).file)
46+
val testClass = requireNotNull(testInfo.testClass.orElse(null)) { "Test class is not present in TestInfo" }
47+
val resource = requireNotNull(testClass.classLoader.getResource(fileName)) { "Resource not found on classpath: $fileName" }
48+
return File(resource.toURI())
49+
}
50+
51+
private fun testMeta(testInfo: TestInfo): Triple<String, String, String?> {
52+
val testClass = requireNotNull(testInfo.testClass.orElse(null)) { "Test class is not present in TestInfo" }
53+
val packagePath = testClass.packageName.replace('.', '/')
54+
val className = testClass.simpleName
55+
val methodName = testInfo.testMethod.orElse(null)?.name
56+
return Triple(packagePath, className, methodName)
5557
}
5658
}

0 commit comments

Comments
 (0)