123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- package testing
- import (
- "fmt"
- "net/http"
- "testing"
- "devel.mephi.ru/iacherepanov/openstack-gophercloud"
- "devel.mephi.ru/iacherepanov/openstack-gophercloud/openstack"
- th "devel.mephi.ru/iacherepanov/openstack-gophercloud/testhelper"
- )
- const ID = "0123456789"
- func TestAuthenticatedClientV3(t *testing.T) {
- th.SetupHTTP()
- defer th.TeardownHTTP()
- th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
- {
- "versions": {
- "values": [
- {
- "status": "stable",
- "id": "v3.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- },
- {
- "status": "stable",
- "id": "v2.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- }
- ]
- }
- }
- `, th.Endpoint()+"v3/", th.Endpoint()+"v2.0/")
- })
- th.Mux.HandleFunc("/v3/auth/tokens", func(w http.ResponseWriter, r *http.Request) {
- w.Header().Add("X-Subject-Token", ID)
- w.WriteHeader(http.StatusCreated)
- fmt.Fprintf(w, `{ "token": { "expires_at": "2013-02-02T18:30:59.000000Z" } }`)
- })
- options := gophercloud.AuthOptions{
- Username: "me",
- Password: "secret",
- DomainName: "default",
- TenantName: "project",
- IdentityEndpoint: th.Endpoint(),
- }
- client, err := openstack.AuthenticatedClient(options)
- th.AssertNoErr(t, err)
- th.CheckEquals(t, ID, client.TokenID)
- }
- func TestAuthenticatedClientV2(t *testing.T) {
- th.SetupHTTP()
- defer th.TeardownHTTP()
- th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
- {
- "versions": {
- "values": [
- {
- "status": "experimental",
- "id": "v3.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- },
- {
- "status": "stable",
- "id": "v2.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- }
- ]
- }
- }
- `, th.Endpoint()+"v3/", th.Endpoint()+"v2.0/")
- })
- th.Mux.HandleFunc("/v2.0/tokens", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
- {
- "access": {
- "token": {
- "id": "01234567890",
- "expires": "2014-10-01T10:00:00.000000Z"
- },
- "serviceCatalog": [
- {
- "name": "Cloud Servers",
- "type": "compute",
- "endpoints": [
- {
- "tenantId": "t1000",
- "publicURL": "https://compute.north.host.com/v1/t1000",
- "internalURL": "https://compute.north.internal/v1/t1000",
- "region": "North",
- "versionId": "1",
- "versionInfo": "https://compute.north.host.com/v1/",
- "versionList": "https://compute.north.host.com/"
- },
- {
- "tenantId": "t1000",
- "publicURL": "https://compute.north.host.com/v1.1/t1000",
- "internalURL": "https://compute.north.internal/v1.1/t1000",
- "region": "North",
- "versionId": "1.1",
- "versionInfo": "https://compute.north.host.com/v1.1/",
- "versionList": "https://compute.north.host.com/"
- }
- ],
- "endpoints_links": []
- },
- {
- "name": "Cloud Files",
- "type": "object-store",
- "endpoints": [
- {
- "tenantId": "t1000",
- "publicURL": "https://storage.north.host.com/v1/t1000",
- "internalURL": "https://storage.north.internal/v1/t1000",
- "region": "North",
- "versionId": "1",
- "versionInfo": "https://storage.north.host.com/v1/",
- "versionList": "https://storage.north.host.com/"
- },
- {
- "tenantId": "t1000",
- "publicURL": "https://storage.south.host.com/v1/t1000",
- "internalURL": "https://storage.south.internal/v1/t1000",
- "region": "South",
- "versionId": "1",
- "versionInfo": "https://storage.south.host.com/v1/",
- "versionList": "https://storage.south.host.com/"
- }
- ]
- }
- ]
- }
- }
- `)
- })
- options := gophercloud.AuthOptions{
- Username: "me",
- Password: "secret",
- IdentityEndpoint: th.Endpoint(),
- }
- client, err := openstack.AuthenticatedClient(options)
- th.AssertNoErr(t, err)
- th.CheckEquals(t, "01234567890", client.TokenID)
- }
- func TestIdentityAdminV3Client(t *testing.T) {
- th.SetupHTTP()
- defer th.TeardownHTTP()
- th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, `
- {
- "versions": {
- "values": [
- {
- "status": "stable",
- "id": "v3.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- },
- {
- "status": "stable",
- "id": "v2.0",
- "links": [
- { "href": "%s", "rel": "self" }
- ]
- }
- ]
- }
- }
- `, th.Endpoint()+"v3/", th.Endpoint()+"v2.0/")
- })
- th.Mux.HandleFunc("/v3/auth/tokens", func(w http.ResponseWriter, r *http.Request) {
- w.Header().Add("X-Subject-Token", ID)
- w.WriteHeader(http.StatusCreated)
- fmt.Fprintf(w, `
- {
- "token": {
- "audit_ids": ["VcxU2JYqT8OzfUVvrjEITQ", "qNUTIJntTzO1-XUk5STybw"],
- "catalog": [
- {
- "endpoints": [
- {
- "id": "39dc322ce86c4111b4f06c2eeae0841b",
- "interface": "public",
- "region": "RegionOne",
- "url": "http://localhost:5000"
- },
- {
- "id": "ec642f27474842e78bf059f6c48f4e99",
- "interface": "internal",
- "region": "RegionOne",
- "url": "http://localhost:5000"
- },
- {
- "id": "c609fc430175452290b62a4242e8a7e8",
- "interface": "admin",
- "region": "RegionOne",
- "url": "http://localhost:35357"
- }
- ],
- "id": "4363ae44bdf34a3981fde3b823cb9aa2",
- "type": "identity",
- "name": "keystone"
- }
- ],
- "expires_at": "2013-02-27T18:30:59.999999Z",
- "is_domain": false,
- "issued_at": "2013-02-27T16:30:59.999999Z",
- "methods": [
- "password"
- ],
- "project": {
- "domain": {
- "id": "1789d1",
- "name": "example.com"
- },
- "id": "263fd9",
- "name": "project-x"
- },
- "roles": [
- {
- "id": "76e72a",
- "name": "admin"
- },
- {
- "id": "f4f392",
- "name": "member"
- }
- ],
- "service_providers": [
- {
- "auth_url":"https://example.com:5000/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
- "id": "sp1",
- "sp_url": "https://example.com:5000/Shibboleth.sso/SAML2/ECP"
- },
- {
- "auth_url":"https://other.example.com:5000/v3/OS-FEDERATION/identity_providers/acme/protocols/saml2/auth",
- "id": "sp2",
- "sp_url": "https://other.example.com:5000/Shibboleth.sso/SAML2/ECP"
- }
- ],
- "user": {
- "domain": {
- "id": "1789d1",
- "name": "example.com"
- },
- "id": "0ca8f6",
- "name": "Joe",
- "password_expires_at": "2016-11-06T15:32:17.000000"
- }
- }
- }
- `)
- })
- options := gophercloud.AuthOptions{
- Username: "me",
- Password: "secret",
- DomainID: "12345",
- IdentityEndpoint: th.Endpoint(),
- }
- pc, err := openstack.AuthenticatedClient(options)
- th.AssertNoErr(t, err)
- sc, err := openstack.NewIdentityV3(pc, gophercloud.EndpointOpts{
- Availability: gophercloud.AvailabilityAdmin,
- })
- th.AssertNoErr(t, err)
- th.CheckEquals(t, "http://localhost:35357/v3/", sc.Endpoint)
- }
- func testAuthenticatedClientFails(t *testing.T, endpoint string) {
- options := gophercloud.AuthOptions{
- Username: "me",
- Password: "secret",
- DomainName: "default",
- TenantName: "project",
- IdentityEndpoint: endpoint,
- }
- _, err := openstack.AuthenticatedClient(options)
- if err == nil {
- t.Fatal("expected error but call succeeded")
- }
- }
- func TestAuthenticatedClientV3Fails(t *testing.T) {
- testAuthenticatedClientFails(t, "http://bad-address.example.com/v3")
- }
- func TestAuthenticatedClientV2Fails(t *testing.T) {
- testAuthenticatedClientFails(t, "http://bad-address.example.com/v2.0")
- }
|