|  | package openstack | 
|  |  | 
|  | import ( | 
|  | "fmt" | 
|  | "net/http" | 
|  | "testing" | 
|  |  | 
|  | "github.com/rackspace/gophercloud" | 
|  | th "github.com/rackspace/gophercloud/testhelper" | 
|  | ) | 
|  |  | 
|  | func TestAuthenticatedClientV3(t *testing.T) { | 
|  | th.SetupHTTP() | 
|  | defer th.TeardownHTTP() | 
|  |  | 
|  | const ID = "0123456789" | 
|  |  | 
|  | 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{ | 
|  | UserID:           "me", | 
|  | Password:         "secret", | 
|  | IdentityEndpoint: th.Endpoint(), | 
|  | } | 
|  | client, err := 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 := AuthenticatedClient(options) | 
|  | th.AssertNoErr(t, err) | 
|  | th.CheckEquals(t, "01234567890", client.TokenID) | 
|  | } |