Skip to content

Commit 7826dbf

Browse files
committed
Add more unit tests
These were written by Junie, but needed tweaking and refactoring.
1 parent 30d175f commit 7826dbf

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

server/src/test/kotlin/com/adobe/testing/s3mock/service/MultipartServiceTest.kt

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,78 @@ internal class MultipartServiceTest : ServiceTestBase() {
211211
val bucketName = "bucketName"
212212
iut.verifyMultipartUploadExists(bucketName, uploadId)
213213
}
214+
215+
@Test
216+
fun testVerifyPartNumberLimits_boundaryMax_success() {
217+
val partNumber = "10000"
218+
iut.verifyPartNumberLimits(partNumber)
219+
}
220+
221+
@Test
222+
fun testVerifyPartNumberLimits_negativeNumberFailure() {
223+
val partNumber = "-1"
224+
assertThatThrownBy { iut.verifyPartNumberLimits(partNumber) }
225+
.isEqualTo(S3Exception.INVALID_PART_NUMBER)
226+
}
227+
228+
@Test
229+
fun testVerifyMultipartParts_withRequestedParts_keyNotFoundFailure() {
230+
val bucketName = "bucketName"
231+
val key = "missingKey"
232+
val uploadId = UUID.randomUUID()
233+
// create bucket but do not add the key to metadata so getID(key) returns null
234+
givenBucket(bucketName)
235+
236+
val requestedParts = emptyList<CompletedPart>()
237+
238+
assertThatThrownBy { iut.verifyMultipartParts(bucketName, key, uploadId, requestedParts) }
239+
.isEqualTo(S3Exception.INVALID_PART)
240+
}
241+
242+
@Test
243+
fun testVerifyMultipartParts_withRequestedParts_missingUploadedPartFailure() {
244+
val bucketName = "bucketName"
245+
val key = "key"
246+
val uploadId = UUID.randomUUID()
247+
val bucketMetadata = givenBucket(bucketName)
248+
val id = bucketMetadata.addKey(key)
249+
// Only part 1 was uploaded
250+
val uploadedParts = givenParts(1, MultipartService.MINIMUM_PART_SIZE)
251+
whenever(multipartStore.getMultipartUploadParts(bucketMetadata, id, uploadId)).thenReturn(uploadedParts)
252+
253+
// But request contains part 2 which does not exist in uploaded parts
254+
val requestedParts = listOf(
255+
CompletedPart(
256+
null,
257+
null,
258+
null,
259+
null,
260+
null,
261+
"\"nonexistent-etag\"",
262+
2
263+
)
264+
)
265+
266+
assertThatThrownBy { iut.verifyMultipartParts(bucketName, key, uploadId, requestedParts) }
267+
.isEqualTo(S3Exception.INVALID_PART)
268+
}
269+
270+
@Test
271+
fun testVerifyMultipartParts_idPath_noSuchUploadFailure() {
272+
val bucketName = "bucketName"
273+
val id = UUID.randomUUID()
274+
val uploadId = UUID.randomUUID()
275+
val bucketMetadata = givenBucket(bucketName)
276+
277+
// Simulate missing upload -> MultipartService should translate to NO_SUCH_UPLOAD_MULTIPART
278+
whenever(
279+
multipartStore.getMultipartUpload(
280+
ArgumentMatchers.eq(bucketMetadata),
281+
ArgumentMatchers.eq(uploadId)
282+
)
283+
).thenThrow(IllegalArgumentException())
284+
285+
assertThatThrownBy { iut.verifyMultipartParts(bucketName, id, uploadId) }
286+
.isEqualTo(S3Exception.NO_SUCH_UPLOAD_MULTIPART)
287+
}
214288
}

0 commit comments

Comments
 (0)