test: fix GetObjectAttributes to check multipart upload#1691
Conversation
balamurugana
left a comment
There was a problem hiding this comment.
According to https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectAttributes.html#AmazonS3-GetObjectAttributes-response-ObjectParts, ObjectParts is returned. Is it MinIO specific change?
For the object which is putted by <?xml version="1.0" encoding="UTF-8"?>
<GetObjectAttributesResponse
xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<ETag>0df68495b5ef53a8ce2a9d4076cc6252</ETag>
<Checksum>
<ChecksumCRC64NVME>Mt/sLbVfRxo=</ChecksumCRC64NVME>
<ChecksumType>FULL_OBJECT</ChecksumType>
</Checksum>
<StorageClass>STANDARD</StorageClass>
<ObjectSize>6291456</ObjectSize>
</GetObjectAttributesResponse>If object that is putted by multiObject, would return the parts when do GetObjectAttr with Checksum. |
@balamurugana AWS S3 doesn't behave as documented. |
|
ObjectParts is just optional not mandatory |
change putobject to multi upload
8af1fac to
33efc8c
Compare
balamurugana
left a comment
There was a problem hiding this comment.
The fix is
diff --git a/functional/TestMinioClient.java b/functional/TestMinioClient.java
index 7196f305..70af81cd 100644
--- a/functional/TestMinioClient.java
+++ b/functional/TestMinioClient.java
@@ -3191,7 +3191,7 @@ public class TestMinioClient extends TestArgs {
try {
client.putObject(
PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
- new ContentInputStream(1 * KB), 1L * KB, null)
+ new ContentInputStream(6 * MB), 6L * MB, null)
.build());
GetObjectAttributesResponse response =
client.getObjectAttributes(
@@ -3204,18 +3204,41 @@ public class TestMinioClient extends TestArgs {
})
.build());
Assertions.assertTrue(
- response.result().objectSize() == (1 * KB),
- "objectSize: expected: " + (1 * KB) + ", got: " + response.result().objectSize());
+ response.result().objectSize() == (6 * MB),
+ "objectSize: expected: " + (6 * MB) + ", got: " + response.result().objectSize());
Assertions.assertTrue(
- response.result().objectParts().parts().get(0).partNumber() == 1,
- "partNumber: expected: 1, got: "
- + response.result().objectParts().parts().get(0).partNumber());
+ response.result().objectParts().partsCount() == 2,
+ "partsCount: expected: "
+ + 2
+ + ", got: "
+ + response.result().objectParts().partsCount());
Assertions.assertTrue(
- response.result().objectParts().parts().get(0).partSize() == (1 * KB),
- "partSize: expected: "
- + (1 * KB)
+ response.result().objectParts().parts().size() == 2,
+ "partsSize: expected: "
+ + 2
+ ", got: "
- + response.result().objectParts().parts().get(0).partSize());
+ + response.result().objectParts().parts().size());
+
+ long partNumber = (long) response.result().objectParts().parts().get(0).partNumber();
+ long partSize = response.result().objectParts().parts().get(0).partSize();
+ long[][] parts =
+ (partNumber == 1)
+ ? new long[][] {{1, 6 * MB}, {2, 1 * MB}}
+ : new long[][] {{2, 1 * MB}, {1, 6 * MB}};
+ Assertions.assertTrue(
+ partNumber == parts[0][0],
+ "partEntry 0: partNumber: expected: " + parts[0][0] + ", got: " + partNumber);
+ Assertions.assertTrue(
+ partSize == parts[0][1],
+ "partEntry 0: partSize: expected: " + parts[0][1] + ", got: " + partSize);
+ partNumber = (long) response.result().objectParts().parts().get(1).partNumber();
+ partSize = response.result().objectParts().parts().get(1).partSize();
+ Assertions.assertTrue(
+ partNumber == parts[1][0],
+ "partEntry 1: partNumber: expected: " + parts[1][0] + ", got: " + partNumber);
+ Assertions.assertTrue(
+ partSize == parts[1][1],
+ "partEntry 1: partSize: expected: " + parts[1][1] + ", got: " + partSize);
mintSuccessLog(methodName, null, startTime);
} finally {
client.removeObject(
test: GetObjectAttributes wouldn't return parts when its putObject
CICD failed in https://github.com/miniohq/eos/pull/3330
That fix will return follow xml which is the same as AWS S3:
No parts anymore