/*
* Copyright 2010-2015 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.
* You may obtain a copy of the License at:
*
* http://aws.amazon.com/apache2.0
*
* 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.util;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import java.net.URI;
/** Unit tests for the utility methods that parse information from AWS URLs. */
public class AwsHostNameUtilsTest {
private static final URI IAM_ENDPOINT = URI.create("https://iam.amazonaws.com");
private static final URI IAM_REGION_ENDPOINT = URI
.create("https://iam.us-west-2.amazonaws.com");
private static final URI EC2_REGION_ENDPOINT = URI
.create("https://ec2.us-west-2.amazonaws.com");
private static final URI S3_ENDPOINT = URI.create("https://s3.amazonaws.com");
private static final URI S3_BUCKET_ENDPOINT = URI
.create("https://bucket.name.with.periods.s3.amazonaws.com");
private static final URI S3_REGION_ENDPOINT = URI.create("https://s3-eu-west-1.amazonaws.com");
private static final URI S3_BUCKET_REGION_ENDPOINT = URI
.create("https://bucket.name.with.periods.s3-eu-west-1.amazonaws.com");
@Test
public void testParseServiceName() {
// Verify that parseServiceName keeps working the way it used to.
assertEquals("iam", AwsHostNameUtils.parseServiceName(IAM_ENDPOINT));
assertEquals("iam", AwsHostNameUtils.parseServiceName(IAM_REGION_ENDPOINT));
assertEquals("ec2", AwsHostNameUtils.parseServiceName(EC2_REGION_ENDPOINT));
assertEquals("s3", AwsHostNameUtils.parseServiceName(S3_ENDPOINT));
assertEquals("s3", AwsHostNameUtils.parseServiceName(S3_BUCKET_ENDPOINT));
assertEquals("s3", AwsHostNameUtils.parseServiceName(S3_REGION_ENDPOINT));
assertEquals("s3", AwsHostNameUtils.parseServiceName(S3_BUCKET_REGION_ENDPOINT));
}
@Test
public void testStandardNoHint() {
// Verify that standard endpoints parse correctly without a service hint
assertEquals("us-east-1", AwsHostNameUtils.parseRegionName("iam.amazonaws.com", null));
assertEquals("us-west-2",
AwsHostNameUtils.parseRegionName("iam.us-west-2.amazonaws.com", null));
assertEquals("us-west-2",
AwsHostNameUtils.parseRegionName("ec2.us-west-2.amazonaws.com", null));
assertEquals("us-east-1", AwsHostNameUtils.parseRegionName("s3.amazonaws.com", null));
assertEquals("us-east-1",
AwsHostNameUtils.parseRegionName("bucket.name.s3.amazonaws.com", null));
assertEquals("eu-west-1",
AwsHostNameUtils.parseRegionName("s3-eu-west-1.amazonaws.com", null));
assertEquals("eu-west-1",
AwsHostNameUtils.parseRegionName("s3.eu-west-1.amazonaws.com", null));
assertEquals("eu-west-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3-eu-west-1.amazonaws.com", null));
assertEquals("eu-west-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3.eu-west-1.amazonaws.com", null));
}
@Test
public void testStandard() {
// Verify that standard endpoints parse correctly with a service hint
assertEquals("us-east-1", AwsHostNameUtils.parseRegionName("iam.amazonaws.com", "iam"));
assertEquals("us-west-2",
AwsHostNameUtils.parseRegionName("iam.us-west-2.amazonaws.com", "iam"));
assertEquals("us-west-2",
AwsHostNameUtils.parseRegionName("ec2.us-west-2.amazonaws.com", "ec2"));
assertEquals("us-east-1", AwsHostNameUtils.parseRegionName("s3.amazonaws.com", "s3"));
assertEquals("us-east-1",
AwsHostNameUtils.parseRegionName("bucket.name.s3.amazonaws.com", "s3"));
assertEquals("eu-west-1",
AwsHostNameUtils.parseRegionName("s3-eu-west-1.amazonaws.com", "s3"));
assertEquals("eu-west-1",
AwsHostNameUtils.parseRegionName("s3.eu-west-1.amazonaws.com", "s3"));
assertEquals("eu-west-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3-eu-west-1.amazonaws.com", "s3"));
assertEquals("eu-west-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3.eu-west-1.amazonaws.com", "s3"));
}
@Test
public void testBJS() {
// Verify that BJS endpoints parse correctly even though they're
// non-standard.
assertEquals("cn-north-1",
AwsHostNameUtils.parseRegionName("iam.cn-north-1.amazonaws.com.cn", "iam"));
assertEquals("cn-north-1",
AwsHostNameUtils.parseRegionName("ec2.cn-north-1.amazonaws.com.cn", "ec2"));
assertEquals("cn-north-1",
AwsHostNameUtils.parseRegionName("s3.cn-north-1.amazonaws.com.cn", "s3"));
assertEquals("cn-north-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3.cn-north-1.amazonaws.com.cn", "s3"));
}
@Test
public void testS3SpecialRegions() {
assertEquals("us-east-1",
AwsHostNameUtils.parseRegionName("s3-external-1.amazonaws.com", null));
assertEquals("us-east-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3-external-1.amazonaws.com", null));
assertEquals("us-gov-west-1",
AwsHostNameUtils.parseRegionName("s3-fips-us-gov-west-1.amazonaws.com", null));
assertEquals("us-gov-west-1", AwsHostNameUtils.parseRegionName(
"bucket.name.with.periods.s3-fips-us-gov-west-1.amazonaws.com", null));
}
}