/* * Copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.s3; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.amazonaws.Request; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.Signer; import com.amazonaws.http.HttpMethodName; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.internal.AWSS3V4Signer; import com.amazonaws.services.s3.internal.Constants; import com.amazonaws.services.s3.model.DeleteBucketRequest; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.PutObjectRequest; import org.junit.Before; import org.junit.Test; import java.io.File; public class Amazons3ClientTest { private AmazonS3Client s3; private AWSCredentials creds; private S3ClientOptions accelerateOption; @Before public void setup() { creds = new BasicAWSCredentials("accessKey", "secretKey"); s3 = new AmazonS3Client(creds); accelerateOption = S3ClientOptions.builder().setAccelerateModeEnabled(true).build(); } @Test public void testSetEndpoint() { String region = "us-west-2"; s3.setEndpoint(String.format("s3-%s.amazonaws.com", region)); assertEquals(region, s3.clientRegion); s3.setEndpoint(String.format("s3.%s.amazonaws.com", region)); assertEquals(region, s3.clientRegion); } @Test(expected = IllegalStateException.class) public void testSetEndpointAccelerate() { s3.setEndpoint(Constants.S3_ACCELERATE_HOSTNAME); } @Test public void testSetRegion() { Regions region = Regions.US_WEST_2; s3.setRegion(Region.getRegion(region)); assertEquals(region.getName(), s3.clientRegion); } @Test public void testCreateRequest() { String bucketName = "bucket"; String key = "key"; File file = new File(key); HttpMethodName method = HttpMethodName.PUT; PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals(String.format("%s.s3.amazonaws.com", bucketName), request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); } @Test public void testCreateRequestNonDNS() { String bucketName = "bucket.with.dot"; String key = "key"; File file = new File(key); HttpMethodName method = HttpMethodName.PUT; PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals("s3.amazonaws.com", request.getEndpoint().getHost()); assertEquals(String.format("%s/%s", bucketName, key), request.getResourcePath()); assertEquals(method, request.getHttpMethod()); } @Test public void testCreateRequestAccelerate() { s3.setS3ClientOptions(accelerateOption); String bucketName = "bucket"; String key = "key"; File file = new File(key); HttpMethodName method = HttpMethodName.PUT; PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals(String.format("%s.s3-accelerate.amazonaws.com", bucketName), request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); } @Test public void testCreateRequestAccelerateNonDNS() { s3.setS3ClientOptions(accelerateOption); String bucketName = "bucket.with.dot"; String key = "key"; File file = new File(key); HttpMethodName method = HttpMethodName.PUT; PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); // Fall back to standard non accelerate endpoint assertEquals("s3.amazonaws.com", request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); } @Test public void testCreateRequestAccelerateUnsupportedMethod() { s3.setS3ClientOptions(accelerateOption); String bucketName = "bucket"; HttpMethodName method = HttpMethodName.DELETE; DeleteBucketRequest originalRequest = new DeleteBucketRequest(bucketName); Request<?> request = s3.createRequest(bucketName, null, originalRequest, method); assertEquals(String.format("%s.s3.amazonaws.com", bucketName), request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); } @Test public void testCreateSigner() { s3.setS3ClientOptions(accelerateOption); Regions region = Regions.US_WEST_2; s3.setRegion(Region.getRegion(region)); String bucketName = "bucket"; String key = "key"; HttpMethodName method = HttpMethodName.GET; GetObjectRequest originalRequest = new GetObjectRequest(bucketName, key); Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); Signer signer = s3.createSigner(request, bucketName, key); assertTrue(signer instanceof AWSS3V4Signer); signer.sign(request, creds); String authorization = request.getHeaders().get("Authorization"); assertNotNull(authorization); String regionName = authorization.split("/")[2]; assertEquals(region.getName(), regionName); } }