254 lines
5.2 KiB
Go
254 lines
5.2 KiB
Go
package ecr
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestParseECREndpoint(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
url string
|
|
want *Registry
|
|
wantError bool
|
|
}{
|
|
// Standard AWS Commercial - Account-prefixed FIPS
|
|
{
|
|
name: "account-prefixed FIPS us-east-1",
|
|
url: "123456789012.dkr.ecr-fips.us-east-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-east-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "account-prefixed FIPS us-west-2",
|
|
url: "123456789012.dkr.ecr-fips.us-west-2.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-west-2",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// Accountless FIPS service endpoints
|
|
{
|
|
name: "accountless FIPS us-west-1",
|
|
url: "ecr-fips.us-west-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless FIPS us-east-2",
|
|
url: "ecr-fips.us-east-2.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-east-2",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// Accountless FIPS API endpoints
|
|
{
|
|
name: "accountless FIPS API us-west-1",
|
|
url: "ecr-fips.us-west-1.api.aws",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless FIPS API us-east-1",
|
|
url: "ecr-fips.us-east-1.api.aws",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-east-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// on.aws domain with hyphen separator
|
|
{
|
|
name: "account-prefixed FIPS hyphen us-west-1",
|
|
url: "123456789012.dkr-ecr-fips.us-west-1.on.aws",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "account-prefixed FIPS hyphen us-east-2",
|
|
url: "123456789012.dkr-ecr-fips.us-east-2.on.aws",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-east-2",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// AWS GovCloud
|
|
{
|
|
name: "account-prefixed FIPS us-gov-east-1",
|
|
url: "123456789012.dkr.ecr-fips.us-gov-east-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-gov-east-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "account-prefixed FIPS us-gov-west-1",
|
|
url: "123456789012.dkr.ecr-fips.us-gov-west-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: true,
|
|
Region: "us-gov-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless FIPS us-gov-west-1",
|
|
url: "ecr-fips.us-gov-west-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-gov-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless FIPS API us-gov-east-1",
|
|
url: "ecr-fips.us-gov-east-1.api.aws",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-gov-east-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// ECR Public
|
|
{
|
|
name: "ecr-public",
|
|
url: "ecr-public.aws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: false,
|
|
Region: "",
|
|
Public: true,
|
|
},
|
|
},
|
|
|
|
// Non-FIPS endpoints (valid ECR but FIPS=false)
|
|
{
|
|
name: "account-prefixed non-FIPS us-east-1",
|
|
url: "123456789012.dkr.ecr.us-east-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "123456789012",
|
|
FIPS: false,
|
|
Region: "us-east-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless non-FIPS us-west-1",
|
|
url: "ecr.us-west-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: false,
|
|
Region: "us-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
{
|
|
name: "accountless non-FIPS API us-east-2",
|
|
url: "ecr.us-east-2.api.aws",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: false,
|
|
Region: "us-east-2",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// URLs with https:// prefix
|
|
{
|
|
name: "with https prefix",
|
|
url: "https://ecr-fips.us-west-1.amazonaws.com",
|
|
want: &Registry{
|
|
ID: "",
|
|
FIPS: true,
|
|
Region: "us-west-1",
|
|
Public: false,
|
|
},
|
|
},
|
|
|
|
// Invalid endpoints
|
|
{
|
|
name: "not an ECR URL",
|
|
url: "not-an-ecr-url.com",
|
|
wantError: true,
|
|
},
|
|
{
|
|
name: "invalid account ID length",
|
|
url: "123.dkr.ecr-fips.us-east-1.amazonaws.com",
|
|
wantError: true,
|
|
},
|
|
{
|
|
name: "empty string",
|
|
url: "",
|
|
wantError: true,
|
|
},
|
|
{
|
|
name: "docker hub",
|
|
url: "docker.io",
|
|
wantError: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got, err := ParseECREndpoint(tt.url)
|
|
|
|
if tt.wantError {
|
|
if err == nil {
|
|
t.Errorf("ParseECREndpoint() expected error but got none")
|
|
}
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
t.Errorf("ParseECREndpoint() unexpected error: %v", err)
|
|
return
|
|
}
|
|
|
|
if got.ID != tt.want.ID {
|
|
t.Errorf("ParseECREndpoint() ID = %v, want %v", got.ID, tt.want.ID)
|
|
}
|
|
if got.FIPS != tt.want.FIPS {
|
|
t.Errorf("ParseECREndpoint() FIPS = %v, want %v", got.FIPS, tt.want.FIPS)
|
|
}
|
|
if got.Region != tt.want.Region {
|
|
t.Errorf("ParseECREndpoint() Region = %v, want %v", got.Region, tt.want.Region)
|
|
}
|
|
if got.Public != tt.want.Public {
|
|
t.Errorf("ParseECREndpoint() Public = %v, want %v", got.Public, tt.want.Public)
|
|
}
|
|
})
|
|
}
|
|
}
|