@@ -596,6 +596,37 @@ internal class ObjectControllerTest : BaseControllerTest() {
596596 assertThat(response.statusCode).isEqualTo(HttpStatus .OK )
597597 }
598598
599+ @Test
600+ @Throws(Exception ::class )
601+ fun testGetObject_Range_Ok () {
602+ givenBucket()
603+ val key = " sampleFile.txt"
604+ val testFile = File (UPLOAD_FILE_NAME )
605+ val digest = DigestUtil .hexDigest(Files .newInputStream(testFile.toPath()))
606+
607+ whenever(objectService.verifyObjectExists(" test-bucket" , key, null ))
608+ .thenReturn(s3ObjectMetadata(key, digest))
609+
610+ val headers = HttpHeaders ().apply {
611+ this .accept = listOf (MediaType .ALL )
612+ this .set(" Range" , " bytes=1-2" )
613+ }
614+
615+ val response = restTemplate.exchange(
616+ " /test-bucket/$key " ,
617+ HttpMethod .GET ,
618+ HttpEntity <Any >(headers),
619+ ByteArray ::class .java
620+ )
621+
622+ assertThat(response.statusCode).isEqualTo(HttpStatus .PARTIAL_CONTENT )
623+ val total = testFile.length()
624+ assertThat(response.headers.getFirst(HttpHeaders .CONTENT_RANGE )).isEqualTo(" bytes 1-2/$total " )
625+ assertThat(response.headers.getFirst(HttpHeaders .ACCEPT_RANGES )).isEqualTo(" bytes" )
626+ assertThat(response.headers.contentLength).isEqualTo(2 )
627+ assertThat(response.headers.eTag).isEqualTo(" \" $digest \" " )
628+ }
629+
599630 private fun givenBucket () {
600631 whenever(bucketService.getBucket(TEST_BUCKET_NAME )).thenReturn(TEST_BUCKET )
601632 whenever(bucketService.doesBucketExist(TEST_BUCKET_NAME )).thenReturn(true )
0 commit comments