Skip to content

Commit ffcfe59

Browse files
DaveCTurnerandreidan
authored andcommitted
Migrate tests away from S3 SDK MD5DigestCalculatingInputStream (elastic#126099)
`S3BlobContainerRetriesTests` uses `MD5DigestCalculatingInputStream` from the AWS v1 SDK to compute a MD5 checksum, but this feature is not available in the v2 SDK. With this commit we remove this dependency and compute the MD5 checksums directly instead.
1 parent 0dbb144 commit ffcfe59

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

modules/repository-s3/src/test/java/org/elasticsearch/repositories/s3/S3BlobContainerRetriesTests.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@
1414
import com.amazonaws.DnsResolver;
1515
import com.amazonaws.SdkClientException;
1616
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
17-
import com.amazonaws.services.s3.internal.MD5DigestCalculatingInputStream;
1817
import com.amazonaws.services.s3.model.AmazonS3Exception;
19-
import com.amazonaws.util.Base16;
2018
import com.sun.net.httpserver.HttpExchange;
2119
import com.sun.net.httpserver.HttpHandler;
2220

@@ -30,7 +28,9 @@
3028
import org.elasticsearch.common.blobstore.BlobPath;
3129
import org.elasticsearch.common.blobstore.OperationPurpose;
3230
import org.elasticsearch.common.blobstore.OptionalBytesReference;
31+
import org.elasticsearch.common.bytes.BytesArray;
3332
import org.elasticsearch.common.bytes.BytesReference;
33+
import org.elasticsearch.common.hash.MessageDigests;
3434
import org.elasticsearch.common.io.Streams;
3535
import org.elasticsearch.common.lucene.store.ByteArrayIndexInput;
3636
import org.elasticsearch.common.lucene.store.InputStreamIndexInput;
@@ -377,13 +377,12 @@ public void testWriteLargeBlob() throws Exception {
377377
}
378378
} else if (s3Request.isUploadPartRequest()) {
379379
// upload part request
380-
MD5DigestCalculatingInputStream md5 = new MD5DigestCalculatingInputStream(exchange.getRequestBody());
381-
BytesReference bytes = Streams.readFully(md5);
380+
BytesReference bytes = Streams.readFully(exchange.getRequestBody());
382381
assertThat((long) bytes.length(), anyOf(equalTo(lastPartSize), equalTo(bufferSize.getBytes())));
383382
assertThat(contentLength, anyOf(equalTo(lastPartSize), equalTo(bufferSize.getBytes())));
384383

385384
if (countDownUploads.decrementAndGet() % 2 == 0) {
386-
exchange.getResponseHeaders().add("ETag", Base16.encodeAsString(md5.getMd5Digest()));
385+
exchange.getResponseHeaders().add("ETag", getBase16MD5Digest(bytes));
387386
exchange.sendResponseHeaders(HttpStatus.SC_OK, -1);
388387
exchange.close();
389388
return;
@@ -475,12 +474,11 @@ public void testWriteLargeBlobStreaming() throws Exception {
475474
}
476475
} else if (s3Request.isUploadPartRequest()) {
477476
// upload part request
478-
MD5DigestCalculatingInputStream md5 = new MD5DigestCalculatingInputStream(exchange.getRequestBody());
479-
BytesReference bytes = Streams.readFully(md5);
477+
BytesReference bytes = Streams.readFully(exchange.getRequestBody());
480478

481479
if (counterUploads.incrementAndGet() % 2 == 0) {
482480
bytesReceived.addAndGet(bytes.length());
483-
exchange.getResponseHeaders().add("ETag", Base16.encodeAsString(md5.getMd5Digest()));
481+
exchange.getResponseHeaders().add("ETag", getBase16MD5Digest(bytes));
484482
exchange.sendResponseHeaders(HttpStatus.SC_OK, -1);
485483
exchange.close();
486484
return;
@@ -1105,6 +1103,21 @@ public void testTrimmedLogAndCappedSuppressedErrorOnMultiObjectDeletionException
11051103
}
11061104
}
11071105

1106+
private static String getBase16MD5Digest(BytesReference bytesReference) {
1107+
return MessageDigests.toHexString(MessageDigests.digest(bytesReference, MessageDigests.md5()));
1108+
}
1109+
1110+
public void testGetBase16MD5Digest() {
1111+
// from Wikipedia, see also org.elasticsearch.common.hash.MessageDigestsTests.testMd5
1112+
assertBase16MD5Digest("", "d41d8cd98f00b204e9800998ecf8427e");
1113+
assertBase16MD5Digest("The quick brown fox jumps over the lazy dog", "9e107d9d372bb6826bd81d3542a419d6");
1114+
assertBase16MD5Digest("The quick brown fox jumps over the lazy dog.", "e4d909c290d0fb1ca068ffaddf22cbd0");
1115+
}
1116+
1117+
private static void assertBase16MD5Digest(String input, String expectedDigestString) {
1118+
assertEquals(expectedDigestString, getBase16MD5Digest(new BytesArray(input)));
1119+
}
1120+
11081121
@Override
11091122
protected Matcher<Integer> getMaxRetriesMatcher(int maxRetries) {
11101123
// some attempts make meaningful progress and do not count towards the max retry limit

0 commit comments

Comments
 (0)