| package testing |
| |
| import ( |
| "strings" |
| "testing" |
| |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git" |
| "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack" |
| tokens2 "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/identity/v2/tokens" |
| tokens3 "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/identity/v3/tokens" |
| th "gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper" |
| ) |
| |
| // Service catalog fixtures take too much vertical space! |
| var catalog2 = tokens2.ServiceCatalog{ |
| Entries: []tokens2.CatalogEntry{ |
| tokens2.CatalogEntry{ |
| Type: "same", |
| Name: "same", |
| Endpoints: []tokens2.Endpoint{ |
| tokens2.Endpoint{ |
| Region: "same", |
| PublicURL: "https://public.correct.com/", |
| InternalURL: "https://internal.correct.com/", |
| AdminURL: "https://admin.correct.com/", |
| }, |
| tokens2.Endpoint{ |
| Region: "different", |
| PublicURL: "https://badregion.com/", |
| }, |
| }, |
| }, |
| tokens2.CatalogEntry{ |
| Type: "same", |
| Name: "different", |
| Endpoints: []tokens2.Endpoint{ |
| tokens2.Endpoint{ |
| Region: "same", |
| PublicURL: "https://badname.com/", |
| }, |
| tokens2.Endpoint{ |
| Region: "different", |
| PublicURL: "https://badname.com/+badregion", |
| }, |
| }, |
| }, |
| tokens2.CatalogEntry{ |
| Type: "different", |
| Name: "different", |
| Endpoints: []tokens2.Endpoint{ |
| tokens2.Endpoint{ |
| Region: "same", |
| PublicURL: "https://badtype.com/+badname", |
| }, |
| tokens2.Endpoint{ |
| Region: "different", |
| PublicURL: "https://badtype.com/+badregion+badname", |
| }, |
| }, |
| }, |
| }, |
| } |
| |
| func TestV2EndpointExact(t *testing.T) { |
| expectedURLs := map[gophercloud.Availability]string{ |
| gophercloud.AvailabilityPublic: "https://public.correct.com/", |
| gophercloud.AvailabilityAdmin: "https://admin.correct.com/", |
| gophercloud.AvailabilityInternal: "https://internal.correct.com/", |
| } |
| |
| for availability, expected := range expectedURLs { |
| actual, err := openstack.V2EndpointURL(&catalog2, gophercloud.EndpointOpts{ |
| Type: "same", |
| Name: "same", |
| Region: "same", |
| Availability: availability, |
| }) |
| th.AssertNoErr(t, err) |
| th.CheckEquals(t, expected, actual) |
| } |
| } |
| |
| func TestV2EndpointNone(t *testing.T) { |
| _, actual := openstack.V2EndpointURL(&catalog2, gophercloud.EndpointOpts{ |
| Type: "nope", |
| Availability: gophercloud.AvailabilityPublic, |
| }) |
| expected := &gophercloud.ErrEndpointNotFound{} |
| th.CheckEquals(t, expected.Error(), actual.Error()) |
| } |
| |
| func TestV2EndpointMultiple(t *testing.T) { |
| _, err := openstack.V2EndpointURL(&catalog2, gophercloud.EndpointOpts{ |
| Type: "same", |
| Region: "same", |
| Availability: gophercloud.AvailabilityPublic, |
| }) |
| if !strings.HasPrefix(err.Error(), "Discovered 2 matching endpoints:") { |
| t.Errorf("Received unexpected error: %v", err) |
| } |
| } |
| |
| func TestV2EndpointBadAvailability(t *testing.T) { |
| _, err := openstack.V2EndpointURL(&catalog2, gophercloud.EndpointOpts{ |
| Type: "same", |
| Name: "same", |
| Region: "same", |
| Availability: "wat", |
| }) |
| th.CheckEquals(t, "Unexpected availability in endpoint query: wat", err.Error()) |
| } |
| |
| var catalog3 = tokens3.ServiceCatalog{ |
| Entries: []tokens3.CatalogEntry{ |
| tokens3.CatalogEntry{ |
| Type: "same", |
| Name: "same", |
| Endpoints: []tokens3.Endpoint{ |
| tokens3.Endpoint{ |
| ID: "1", |
| Region: "same", |
| Interface: "public", |
| URL: "https://public.correct.com/", |
| }, |
| tokens3.Endpoint{ |
| ID: "2", |
| Region: "same", |
| Interface: "admin", |
| URL: "https://admin.correct.com/", |
| }, |
| tokens3.Endpoint{ |
| ID: "3", |
| Region: "same", |
| Interface: "internal", |
| URL: "https://internal.correct.com/", |
| }, |
| tokens3.Endpoint{ |
| ID: "4", |
| Region: "different", |
| Interface: "public", |
| URL: "https://badregion.com/", |
| }, |
| }, |
| }, |
| tokens3.CatalogEntry{ |
| Type: "same", |
| Name: "different", |
| Endpoints: []tokens3.Endpoint{ |
| tokens3.Endpoint{ |
| ID: "5", |
| Region: "same", |
| Interface: "public", |
| URL: "https://badname.com/", |
| }, |
| tokens3.Endpoint{ |
| ID: "6", |
| Region: "different", |
| Interface: "public", |
| URL: "https://badname.com/+badregion", |
| }, |
| }, |
| }, |
| tokens3.CatalogEntry{ |
| Type: "different", |
| Name: "different", |
| Endpoints: []tokens3.Endpoint{ |
| tokens3.Endpoint{ |
| ID: "7", |
| Region: "same", |
| Interface: "public", |
| URL: "https://badtype.com/+badname", |
| }, |
| tokens3.Endpoint{ |
| ID: "8", |
| Region: "different", |
| Interface: "public", |
| URL: "https://badtype.com/+badregion+badname", |
| }, |
| }, |
| }, |
| }, |
| } |
| |
| func TestV3EndpointExact(t *testing.T) { |
| expectedURLs := map[gophercloud.Availability]string{ |
| gophercloud.AvailabilityPublic: "https://public.correct.com/", |
| gophercloud.AvailabilityAdmin: "https://admin.correct.com/", |
| gophercloud.AvailabilityInternal: "https://internal.correct.com/", |
| } |
| |
| for availability, expected := range expectedURLs { |
| actual, err := openstack.V3EndpointURL(&catalog3, gophercloud.EndpointOpts{ |
| Type: "same", |
| Name: "same", |
| Region: "same", |
| Availability: availability, |
| }) |
| th.AssertNoErr(t, err) |
| th.CheckEquals(t, expected, actual) |
| } |
| } |
| |
| func TestV3EndpointNone(t *testing.T) { |
| _, actual := openstack.V3EndpointURL(&catalog3, gophercloud.EndpointOpts{ |
| Type: "nope", |
| Availability: gophercloud.AvailabilityPublic, |
| }) |
| expected := &gophercloud.ErrEndpointNotFound{} |
| th.CheckEquals(t, expected.Error(), actual.Error()) |
| } |
| |
| func TestV3EndpointMultiple(t *testing.T) { |
| _, err := openstack.V3EndpointURL(&catalog3, gophercloud.EndpointOpts{ |
| Type: "same", |
| Region: "same", |
| Availability: gophercloud.AvailabilityPublic, |
| }) |
| if !strings.HasPrefix(err.Error(), "Discovered 2 matching endpoints:") { |
| t.Errorf("Received unexpected error: %v", err) |
| } |
| } |
| |
| func TestV3EndpointBadAvailability(t *testing.T) { |
| _, err := openstack.V3EndpointURL(&catalog3, gophercloud.EndpointOpts{ |
| Type: "same", |
| Name: "same", |
| Region: "same", |
| Availability: "wat", |
| }) |
| th.CheckEquals(t, "Unexpected availability in endpoint query: wat", err.Error()) |
| } |