| package gophercloud |
| |
| import ( |
| "os" |
| "testing" |
| ) |
| |
| // TestFFEBCViaEnvVariable exercises only those calls where a region |
| // parameter is required, but is provided by an environment variable. |
| func TestFFEBCViaEnvVariable(t *testing.T) { |
| changeRegion("RGN") |
| |
| endpoint := FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "", ""), |
| ApiCriteria{Name: "test"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("If provided, the Region qualifier must exclude endpoints with missing or mismatching regions.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", ""), |
| ApiCriteria{Name: "test"}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("Regions are case insensitive.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", ""), |
| ApiCriteria{Name: "test", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Missing version ID means no match.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", "3"), |
| ApiCriteria{Name: "test", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Mismatched version ID means no match.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", "2"), |
| ApiCriteria{Name: "test", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("All search criteria met; endpoint expected.") |
| return |
| } |
| } |
| |
| // TestFFEBCViaRegionOption exercises only those calls where a region |
| // parameter is specified explicitly. The region option overrides |
| // any defined OS_REGION_NAME environment setting. |
| func TestFFEBCViaRegionOption(t *testing.T) { |
| changeRegion("Starfleet Command") |
| |
| endpoint := FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "", ""), |
| ApiCriteria{Name: "test", Region: "RGN"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("If provided, the Region qualifier must exclude endpoints with missing or mismatching regions.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", ""), |
| ApiCriteria{Name: "test", Region: "RGN"}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("Regions are case insensitive.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", ""), |
| ApiCriteria{Name: "test", Region: "RGN", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Missing version ID means no match.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", "3"), |
| ApiCriteria{Name: "test", Region: "RGN", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Mismatched version ID means no match.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "rgn", "2"), |
| ApiCriteria{Name: "test", Region: "RGN", VersionId: "2"}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("All search criteria met; endpoint expected.") |
| return |
| } |
| } |
| |
| // TestFFEBCWithoutRegion exercises only those calls where a region |
| // is irrelevant. Just to make sure, though, we enforce Gophercloud |
| // from paying any attention to OS_REGION_NAME if it happens to be set. |
| func TestFindFirstEndpointByCriteria(t *testing.T) { |
| endpoint := FindFirstEndpointByCriteria([]CatalogEntry{}, ApiCriteria{Name: "test", IgnoreEnvVars: true}) |
| if endpoint.PublicURL != "" { |
| t.Error("Not expecting to find anything in an empty service catalog.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| []CatalogEntry{ |
| {Name: "test"}, |
| }, |
| ApiCriteria{Name: "test", IgnoreEnvVars: true}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Even though we have a matching entry, no endpoints exist") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "", ""), |
| ApiCriteria{Name: "test", IgnoreEnvVars: true}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("Looking for an endpoint by name but without region or version ID should match first entry endpoint.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "", ""), |
| ApiCriteria{Type: "compute", IgnoreEnvVars: true}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("Looking for an endpoint by type but without region or version ID should match first entry endpoint.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "", ""), |
| ApiCriteria{Type: "identity", IgnoreEnvVars: true}, |
| ) |
| if endpoint.PublicURL != "" { |
| t.Error("Returned mismatched type.") |
| return |
| } |
| |
| endpoint = FindFirstEndpointByCriteria( |
| catalog("test", "compute", "http://localhost", "ord", "2"), |
| ApiCriteria{Name: "test", VersionId: "2", IgnoreEnvVars: true}, |
| ) |
| if endpoint.PublicURL != "http://localhost" { |
| t.Error("Sometimes, you might not care what region your stuff is in.") |
| return |
| } |
| } |
| |
| func catalog(name, entry_type, url, region, version string) []CatalogEntry { |
| return []CatalogEntry{ |
| { |
| Name: name, |
| Type: entry_type, |
| Endpoints: []EntryEndpoint{ |
| { |
| PublicURL: url, |
| Region: region, |
| VersionId: version, |
| }, |
| }, |
| }, |
| } |
| } |
| |
| func changeRegion(r string) { |
| err := os.Setenv("OS_REGION_NAME", r) |
| if err != nil { |
| panic(err) |
| } |
| } |