File: //proc/self/root/opt/go/pkg/mod/github.com/aws/
[email protected]/aws/endpoints/decode_test.go
//go:build go1.9
// +build go1.9
package endpoints
import (
"strings"
"testing"
)
func TestDecodeEndpoints_V3(t *testing.T) {
const v3Doc = `{
"partitions": [
{
"defaults": {
"hostname": "{service}.{region}.{dnsSuffix}",
"protocols": [
"https"
],
"signatureVersions": [
"v4"
],
"variants": [
{
"hostname": "{service}-fips.{region}.{dnsSuffix}",
"tags": [
"fips"
]
},
{
"dnsSuffix": "api.aws",
"hostname": "{service}.{region}.{dnsSuffix}",
"tags": [
"dualstack"
]
},
{
"dnsSuffix": "api.aws",
"hostname": "{service}-fips.{region}.{dnsSuffix}",
"tags": [
"dualstack",
"fips"
]
}
]
},
"dnsSuffix": "amazonaws.com",
"partition": "aws",
"regionRegex": "^(us|eu|ap|sa|ca|me|af)\\-\\w+\\-\\d+$",
"regions": {
"us-east-1": {
"description": "US East (N. Virginia)"
},
"us-west-2": {
"description": "US West (Oregon)"
}
},
"services": {
"dynamodb": {
"defaults": {
"protocols": [
"http",
"https"
]
},
"endpoints": {
"us-west-2": {
"variants": [
{
"tags": [
"fips"
]
},
{
"hostname": "fips.dynamodb.us-west-2.api.aws",
"tags": [
"fips",
"dualstack"
]
},
{
"hostname": "dynamodb.us-west-2.api.aws",
"tags": [
"dualstack"
]
}
]
},
"us-west-2-fips": {
"hostname": "dynamodb-fips.us-west-2.amazonaws.com",
"credentialScope": {
"region": "us-west-2"
},
"deprecated": true
}
}
},
"ec2": {
"defaults": {
"hostname": "api.ec2.{region}.{dnsSuffix}",
"protocols": [
"http",
"https"
],
"variants": [
{
"dnsSuffix": "amazonaws.com",
"hostname": "api.ec2-fips.{region}.{dnsSuffix}",
"tags": [
"fips"
]
},
{
"dnsSuffix": "api.aws",
"hostname": "api.ec2.{region}.{dnsSuffix}",
"tags": [
"dualstack"
]
}
]
},
"endpoints": {
"us-west-2": {
"credentialScope": {
"region": "us-west-2"
},
"hostname": "ec2.us-west-2.amazonaws.com",
"variants": [
{
"hostname": "ec2-fips.us-west-2.amazonaws.com",
"tags": [
"fips"
]
},
{
"hostname": "ec2.us-west-2.api.aws",
"tags": [
"dualstack"
]
}
]
},
"fips-us-west-2": {
"hostname": "ec2-fips.us-west-2.amazonaws.com",
"credentialScope": {
"region": "us-west-2"
},
"deprecated": true
}
}
},
"route53": {
"endpoints": {
"aws-global": {
"credentialScope": {
"region": "us-east-1"
},
"hostname": "route53.amazonaws.com",
"variants": [
{
"hostname": "route53-fips.amazonaws.com",
"tags": [
"fips"
]
},
{
"hostname": "route53.global.api.aws",
"tags": [
"dualstack"
]
}
]
}
},
"isRegionalized": false,
"partitionEndpoint": "aws-global"
},
"s3": {
"defaults": {
"protocols": [
"http",
"https"
],
"signatureVersions": [
"s3v4"
],
"variants": [
{
"dnsSuffix": "amazonaws.com",
"hostname": "s3-fips.{region}.{dnsSuffix}",
"tags": [
"fips"
]
},
{
"dnsSuffix": "amazonaws.com",
"hostname": "s3.dualstack.{region}.{dnsSuffix}",
"tags": ["dualstack"]
}
]
},
"endpoints": {
"us-west-2": {
"hostname": "s3.api.us-west-2.amazonaws.com",
"signatureVersions": [
"s3",
"s3v4"
],
"variants": [
{
"hostname": "s3-fips.api.us-west-2.amazonaws.com",
"tags": [
"fips"
]
},
{
"hostname": "s3.api.dualstack.us-west-2.amazonaws.com",
"tags": ["dualstack"]
}
]
}
}
}
}
},
{
"defaults": {
"hostname": "{service}.{region}.{dnsSuffix}",
"protocols": [
"https"
],
"signatureVersions": [
"v4"
]
},
"dnsSuffix": "c2s.ic.gov",
"partition": "aws-iso",
"regionRegex": "^us\\-iso\\-\\w+\\-\\d+$",
"regions": {
"us-iso-east-1": {
"description": "US ISO East"
}
},
"services": {
"ec2": {
"endpoints": {
"us-iso-east-1": {}
}
}
}
}
],
"version": 3
}`
resolver, err := DecodeModel(strings.NewReader(v3Doc))
if err != nil {
t.Fatalf("expected no error, got %v", err)
}
endpoint, err := resolver.EndpointFor("ec2", "us-west-2")
if err != nil {
t.Fatalf("failed to resolve endpoint, %v", err)
}
if a, e := endpoint.URL, "https://ec2.us-west-2.amazonaws.com"; a != e {
t.Errorf("expected %q URL got %q", e, a)
}
p := resolver.(partitions)[0]
resolved, err := p.EndpointFor("s3", "us-west-2", func(options *Options) {
options.UseDualStackEndpoint = DualStackEndpointStateEnabled
})
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
assertEndpoint(t, resolved, "https://s3.api.dualstack.us-west-2.amazonaws.com", "s3", "us-west-2")
}
func assertEndpoint(t *testing.T, endpoint ResolvedEndpoint, expectedURL, expectedSigningName, expectedSigningRegion string) {
t.Helper()
if e, a := expectedURL, endpoint.URL; e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectedSigningName, endpoint.SigningName; e != a {
t.Errorf("expect %v, got %v", e, a)
}
if e, a := expectedSigningRegion, endpoint.SigningRegion; e != a {
t.Errorf("expect %v, got %v", e, a)
}
}
func TestDecodeEndpoints_NoPartitions(t *testing.T) {
const doc = `{ "version": 3 }`
resolver, err := DecodeModel(strings.NewReader(doc))
if err == nil {
t.Fatalf("expected error")
}
if resolver != nil {
t.Errorf("expect resolver to be nil")
}
}
func TestDecodeEndpoints_UnsupportedVersion(t *testing.T) {
const doc = `{ "version": 2 }`
resolver, err := DecodeModel(strings.NewReader(doc))
if err == nil {
t.Fatalf("expected error decoding model")
}
if resolver != nil {
t.Errorf("expect resolver to be nil")
}
}
func TestDecodeModelOptionsSet(t *testing.T) {
var actual DecodeModelOptions
actual.Set(func(o *DecodeModelOptions) {
o.SkipCustomizations = true
})
expect := DecodeModelOptions{
SkipCustomizations: true,
}
if actual != expect {
t.Errorf("expect %v options got %v", expect, actual)
}
}
func TestCustFixAppAutoscalingChina(t *testing.T) {
const doc = `
{
"version": 3,
"partitions": [{
"defaults" : {
"hostname" : "{service}.{region}.{dnsSuffix}",
"protocols" : [ "https" ],
"signatureVersions" : [ "v4" ]
},
"dnsSuffix" : "amazonaws.com.cn",
"partition" : "aws-cn",
"partitionName" : "AWS China",
"regionRegex" : "^cn\\-\\w+\\-\\d+$",
"regions" : {
"cn-north-1" : {
"description" : "China (Beijing)"
},
"cn-northwest-1" : {
"description" : "China (Ningxia)"
}
},
"services" : {
"application-autoscaling" : {
"defaults" : {
"credentialScope" : {
"service" : "application-autoscaling"
},
"hostname" : "autoscaling.{region}.amazonaws.com",
"protocols" : [ "http", "https" ]
},
"endpoints" : {
"cn-north-1" : { },
"cn-northwest-1" : { }
}
}
}
}]
}`
resolver, err := DecodeModel(strings.NewReader(doc))
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
endpoint, err := resolver.EndpointFor(
"application-autoscaling", "cn-northwest-1",
)
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
if e, a := `https://autoscaling.cn-northwest-1.amazonaws.com.cn`, endpoint.URL; e != a {
t.Errorf("expect %v, got %v", e, a)
}
}
func TestCustFixAppAutoscalingUsGov(t *testing.T) {
const doc = `
{
"version": 3,
"partitions": [{
"defaults" : {
"hostname" : "{service}.{region}.{dnsSuffix}",
"protocols" : [ "https" ],
"signatureVersions" : [ "v4" ]
},
"dnsSuffix" : "amazonaws.com",
"partition" : "aws-us-gov",
"partitionName" : "AWS GovCloud (US)",
"regionRegex" : "^us\\-gov\\-\\w+\\-\\d+$",
"regions" : {
"us-gov-east-1" : {
"description" : "AWS GovCloud (US-East)"
},
"us-gov-west-1" : {
"description" : "AWS GovCloud (US)"
}
},
"services" : {
"application-autoscaling" : {
"endpoints" : {
"us-gov-east-1" : { },
"us-gov-west-1" : { }
}
}
}
}]
}`
resolver, err := DecodeModel(strings.NewReader(doc))
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
endpoint, err := resolver.EndpointFor(
"application-autoscaling", "us-gov-west-1",
)
if err != nil {
t.Fatalf("expect no error, got %v", err)
}
if e, a := `https://autoscaling.us-gov-west-1.amazonaws.com`, endpoint.URL; e != a {
t.Errorf("expect %v, got %v", e, a)
}
}