blob: 37e63c1b420695dd2c828d243572b883c0800ad3 [file] [log] [blame]
jrperritt3d966162016-06-06 14:08:54 -05001package testing
Ash Wilson6425a412014-08-29 12:30:35 -04002
3import (
Ash Wilson4dee1b82014-08-29 14:56:45 -04004 "fmt"
5 "net/http"
Ash Wilson6425a412014-08-29 12:30:35 -04006 "testing"
7
Jon Perritt27249f42016-02-18 10:35:59 -06008 "github.com/gophercloud/gophercloud"
jrperritt3d966162016-06-06 14:08:54 -05009 "github.com/gophercloud/gophercloud/openstack"
Jon Perritt27249f42016-02-18 10:35:59 -060010 th "github.com/gophercloud/gophercloud/testhelper"
Ash Wilson6425a412014-08-29 12:30:35 -040011)
12
Ash Wilson986854a2014-09-08 15:51:08 -040013func TestAuthenticatedClientV3(t *testing.T) {
Ash Wilsondb84d5d2014-10-03 14:07:33 -040014 th.SetupHTTP()
15 defer th.TeardownHTTP()
Ash Wilson4dee1b82014-08-29 14:56:45 -040016
17 const ID = "0123456789"
18
Ash Wilsondb84d5d2014-10-03 14:07:33 -040019 th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
Ash Wilson4dee1b82014-08-29 14:56:45 -040020 fmt.Fprintf(w, `
21 {
22 "versions": {
23 "values": [
24 {
25 "status": "stable",
26 "id": "v3.0",
27 "links": [
28 { "href": "%s", "rel": "self" }
29 ]
30 },
31 {
32 "status": "stable",
33 "id": "v2.0",
34 "links": [
35 { "href": "%s", "rel": "self" }
36 ]
37 }
38 ]
39 }
40 }
Ash Wilsondb84d5d2014-10-03 14:07:33 -040041 `, th.Endpoint()+"v3/", th.Endpoint()+"v2.0/")
Ash Wilson4dee1b82014-08-29 14:56:45 -040042 })
43
Ash Wilsondb84d5d2014-10-03 14:07:33 -040044 th.Mux.HandleFunc("/v3/auth/tokens", func(w http.ResponseWriter, r *http.Request) {
Ash Wilson4dee1b82014-08-29 14:56:45 -040045 w.Header().Add("X-Subject-Token", ID)
46
47 w.WriteHeader(http.StatusCreated)
48 fmt.Fprintf(w, `{ "token": { "expires_at": "2013-02-02T18:30:59.000000Z" } }`)
49 })
50
51 options := gophercloud.AuthOptions{
52 UserID: "me",
53 Password: "secret",
Ash Wilsondb84d5d2014-10-03 14:07:33 -040054 IdentityEndpoint: th.Endpoint(),
Ash Wilson4dee1b82014-08-29 14:56:45 -040055 }
jrperritt3d966162016-06-06 14:08:54 -050056 client, err := openstack.AuthenticatedClient(options)
Ash Wilson3431e562014-10-03 14:18:17 -040057 th.AssertNoErr(t, err)
58 th.CheckEquals(t, ID, client.TokenID)
Ash Wilson6425a412014-08-29 12:30:35 -040059}
Ash Wilson986854a2014-09-08 15:51:08 -040060
61func TestAuthenticatedClientV2(t *testing.T) {
Ash Wilsondb84d5d2014-10-03 14:07:33 -040062 th.SetupHTTP()
63 defer th.TeardownHTTP()
Ash Wilson986854a2014-09-08 15:51:08 -040064
Ash Wilsondb84d5d2014-10-03 14:07:33 -040065 th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
Ash Wilson986854a2014-09-08 15:51:08 -040066 fmt.Fprintf(w, `
67 {
68 "versions": {
69 "values": [
70 {
71 "status": "experimental",
72 "id": "v3.0",
73 "links": [
74 { "href": "%s", "rel": "self" }
75 ]
76 },
77 {
78 "status": "stable",
79 "id": "v2.0",
80 "links": [
81 { "href": "%s", "rel": "self" }
82 ]
83 }
84 ]
85 }
86 }
Ash Wilsondb84d5d2014-10-03 14:07:33 -040087 `, th.Endpoint()+"v3/", th.Endpoint()+"v2.0/")
Ash Wilson986854a2014-09-08 15:51:08 -040088 })
89
Ash Wilsondb84d5d2014-10-03 14:07:33 -040090 th.Mux.HandleFunc("/v2.0/tokens", func(w http.ResponseWriter, r *http.Request) {
Ash Wilson986854a2014-09-08 15:51:08 -040091 fmt.Fprintf(w, `
92 {
93 "access": {
94 "token": {
Ash Wilson6cc00702014-10-03 14:00:26 -040095 "id": "01234567890",
96 "expires": "2014-10-01T10:00:00.000000Z"
Ash Wilson986854a2014-09-08 15:51:08 -040097 },
98 "serviceCatalog": [
99 {
100 "name": "Cloud Servers",
101 "type": "compute",
102 "endpoints": [
103 {
104 "tenantId": "t1000",
105 "publicURL": "https://compute.north.host.com/v1/t1000",
106 "internalURL": "https://compute.north.internal/v1/t1000",
107 "region": "North",
108 "versionId": "1",
109 "versionInfo": "https://compute.north.host.com/v1/",
110 "versionList": "https://compute.north.host.com/"
111 },
112 {
113 "tenantId": "t1000",
114 "publicURL": "https://compute.north.host.com/v1.1/t1000",
115 "internalURL": "https://compute.north.internal/v1.1/t1000",
116 "region": "North",
117 "versionId": "1.1",
118 "versionInfo": "https://compute.north.host.com/v1.1/",
119 "versionList": "https://compute.north.host.com/"
120 }
121 ],
122 "endpoints_links": []
123 },
124 {
125 "name": "Cloud Files",
126 "type": "object-store",
127 "endpoints": [
128 {
129 "tenantId": "t1000",
130 "publicURL": "https://storage.north.host.com/v1/t1000",
131 "internalURL": "https://storage.north.internal/v1/t1000",
132 "region": "North",
133 "versionId": "1",
134 "versionInfo": "https://storage.north.host.com/v1/",
135 "versionList": "https://storage.north.host.com/"
136 },
137 {
138 "tenantId": "t1000",
139 "publicURL": "https://storage.south.host.com/v1/t1000",
140 "internalURL": "https://storage.south.internal/v1/t1000",
141 "region": "South",
142 "versionId": "1",
143 "versionInfo": "https://storage.south.host.com/v1/",
144 "versionList": "https://storage.south.host.com/"
145 }
146 ]
147 }
148 ]
149 }
150 }
151 `)
152 })
153
154 options := gophercloud.AuthOptions{
Ash Wilson11c98282014-09-08 16:05:10 -0400155 Username: "me",
Ash Wilson986854a2014-09-08 15:51:08 -0400156 Password: "secret",
Ash Wilsondb84d5d2014-10-03 14:07:33 -0400157 IdentityEndpoint: th.Endpoint(),
Ash Wilson986854a2014-09-08 15:51:08 -0400158 }
jrperritt3d966162016-06-06 14:08:54 -0500159 client, err := openstack.AuthenticatedClient(options)
Ash Wilson3431e562014-10-03 14:18:17 -0400160 th.AssertNoErr(t, err)
161 th.CheckEquals(t, "01234567890", client.TokenID)
Ash Wilson986854a2014-09-08 15:51:08 -0400162}