Skip to content

Commit 9c1c50d

Browse files
author
Anirav Kareddy
committed
testing whether v2 does or doesn't translate additional parameters for MPU + instructionFile
1 parent 288ee65 commit 9c1c50d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

src/test/java/software/amazon/encryption/s3/S3EncryptionClientCompatibilityTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,15 @@
1515
import com.amazonaws.services.s3.model.EncryptedPutObjectRequest;
1616
import com.amazonaws.services.s3.model.EncryptionMaterials;
1717
import com.amazonaws.services.s3.model.EncryptionMaterialsProvider;
18+
import com.amazonaws.services.s3.model.GetObjectMetadataRequest;
19+
import com.amazonaws.services.s3.model.InitiateMultipartUploadRequest;
20+
import com.amazonaws.services.s3.model.InitiateMultipartUploadResult;
1821
import com.amazonaws.services.s3.model.KMSEncryptionMaterials;
1922
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
23+
import com.amazonaws.services.s3.model.ObjectMetadata;
2024
import com.amazonaws.services.s3.model.StaticEncryptionMaterialsProvider;
25+
import com.amazonaws.services.s3.model.StorageClass;
26+
import com.amazonaws.services.s3.model.UploadObjectRequest;
2127
import org.junit.jupiter.api.BeforeAll;
2228
import org.junit.jupiter.api.Test;
2329
import software.amazon.awssdk.core.ResponseBytes;
@@ -28,20 +34,25 @@
2834
import software.amazon.awssdk.services.s3.model.MetadataDirective;
2935
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
3036
import software.amazon.encryption.s3.internal.InstructionFileConfig;
37+
import software.amazon.encryption.s3.utils.BoundedInputStream;
3138

3239
import javax.crypto.KeyGenerator;
3340
import javax.crypto.SecretKey;
3441
import java.io.ByteArrayInputStream;
3542
import java.io.IOException;
43+
import java.io.InputStream;
3644
import java.nio.charset.StandardCharsets;
3745
import java.security.KeyPair;
3846
import java.security.KeyPairGenerator;
3947
import java.security.NoSuchAlgorithmException;
4048
import java.util.HashMap;
4149
import java.util.Map;
50+
import java.util.concurrent.ExecutionException;
4251

4352
import static org.junit.jupiter.api.Assertions.assertEquals;
53+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
4454
import static org.junit.jupiter.api.Assertions.assertThrows;
55+
import static software.amazon.encryption.s3.S3EncryptionClient.builder;
4556
import static software.amazon.encryption.s3.S3EncryptionClient.withAdditionalConfiguration;
4657
import static software.amazon.encryption.s3.utils.S3EncryptionClientTestResources.BUCKET;
4758
import static software.amazon.encryption.s3.utils.S3EncryptionClientTestResources.KMS_KEY_ID;
@@ -127,6 +138,7 @@ public void AesWrapV1toV3() {
127138

128139
// Asserts
129140
final String input = "AesGcmV1toV3";
141+
System.out.println(System.getenv("AWS_S3EC_TEST_BUCKET"));
130142
v1Client.putObject(BUCKET, objectKey, input);
131143

132144
ResponseBytes<GetObjectResponse> objectResponse = v3Client.getObjectAsBytes(builder -> builder
@@ -210,6 +222,39 @@ public void AesGcmV2toV3WithInstructionFile() {
210222
deleteObject(BUCKET, objectKey, v3Client);
211223
v3Client.close();
212224
}
225+
@Test
226+
public void multipartPutObjectWithOptionsAndInstructionFileV2() throws IOException, InterruptedException, ExecutionException {
227+
final String objectKey = appendTestSuffix("multipart-put-object-with-options-and-instruction-file-v2");
228+
final long fileSizeLimit = 1024 * 1024 * 10; //sets file size limit to 10 MB
229+
final InputStream inputStream = new BoundedInputStream(fileSizeLimit);
230+
231+
//Now, we will create encryption client (v2) with instruction file config enabled and multipart upload enabled
232+
EncryptionMaterialsProvider materialsProvider =
233+
new StaticEncryptionMaterialsProvider(new EncryptionMaterials(AES_KEY));
234+
CryptoConfigurationV2 cryptoConfig =
235+
new CryptoConfigurationV2(CryptoMode.StrictAuthenticatedEncryption)
236+
.withStorageMode(CryptoStorageMode.InstructionFile);
237+
AmazonS3EncryptionV2 v2Client = AmazonS3EncryptionClientV2.encryptionBuilder()
238+
.withCryptoConfiguration(cryptoConfig)
239+
.withEncryptionMaterialsProvider(materialsProvider)
240+
.build();
241+
UploadObjectRequest uploadObjectRequest = new UploadObjectRequest("s3ec-github-test-bucket-597133212884", objectKey, inputStream, new ObjectMetadata())
242+
.withPartSize(1024 * 1024 * 5)
243+
.withStorageClass(StorageClass.Glacier);
244+
v2Client.uploadObject(uploadObjectRequest);
245+
246+
//Assert that the storage class on main object matches "GLACIER"
247+
GetObjectMetadataRequest mainObjectRequest = new GetObjectMetadataRequest("s3ec-github-test-bucket-597133212884", objectKey);
248+
ObjectMetadata mainObjectMetadata = v2Client.getObjectMetadata(mainObjectRequest);
249+
assertEquals("GLACIER", mainObjectMetadata.getStorageClass());
250+
251+
//Assert that the instruction file does not contain storage class (V2)
252+
GetObjectMetadataRequest instructionObjectRequest = new GetObjectMetadataRequest("s3ec-github-test-bucket-597133212884", objectKey + ".instruction");
253+
ObjectMetadata instructionFileMetadata = v2Client.getObjectMetadata(instructionObjectRequest);
254+
255+
assertNotEquals("GLACIER", instructionFileMetadata.getStorageClass());
256+
257+
}
213258

214259
@Test
215260
public void AesGcmV3toV1() {

0 commit comments

Comments
 (0)