blob: b78f01fced9fb8a14252179d6fe82d44c98c5a42 [file] [log] [blame]
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)
}
}