blob: 9f43db3b9da09148f2eed74cde190f961a06b9cd [file] [log] [blame]
Ash Wilsonb73b7f82014-08-29 15:38:06 -04001package services
2
3import (
4 "fmt"
5 "net/http"
Ash Wilson64f44152014-09-05 13:45:03 -04006 "reflect"
Ash Wilsonb73b7f82014-08-29 15:38:06 -04007 "testing"
8
9 "github.com/rackspace/gophercloud"
10 "github.com/rackspace/gophercloud/testhelper"
11)
12
Ash Wilsond1b72132014-09-03 15:26:26 -040013const tokenID = "111111"
14
15func serviceClient() *gophercloud.ServiceClient {
16 return &gophercloud.ServiceClient{
17 Provider: &gophercloud.ProviderClient{
18 TokenID: tokenID,
19 },
20 Endpoint: testhelper.Endpoint(),
21 }
22}
23
Ash Wilsonb73b7f82014-08-29 15:38:06 -040024func TestCreateSuccessful(t *testing.T) {
25 testhelper.SetupHTTP()
26 defer testhelper.TeardownHTTP()
27
28 testhelper.Mux.HandleFunc("/services", func(w http.ResponseWriter, r *http.Request) {
29 testhelper.TestMethod(t, r, "POST")
Ash Wilsond1b72132014-09-03 15:26:26 -040030 testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
Ash Wilsonb73b7f82014-08-29 15:38:06 -040031 testhelper.TestJSONRequest(t, r, `{ "type": "compute" }`)
32
33 w.Header().Add("Content-Type", "application/json")
34 w.WriteHeader(http.StatusCreated)
35 fmt.Fprintf(w, `{
36 "service": {
37 "description": "Here's your service",
38 "id": "1234",
39 "name": "InscrutableOpenStackProjectName",
40 "type": "compute"
41 }
42 }`)
43 })
44
Ash Wilsond1b72132014-09-03 15:26:26 -040045 client := serviceClient()
Ash Wilsonb73b7f82014-08-29 15:38:06 -040046
Ash Wilsond1b72132014-09-03 15:26:26 -040047 result, err := Create(client, "compute")
Ash Wilsonb73b7f82014-08-29 15:38:06 -040048 if err != nil {
49 t.Fatalf("Unexpected error from Create: %v", err)
50 }
51
52 if result.Description == nil || *result.Description != "Here's your service" {
53 t.Errorf("Service description was unexpected [%s]", result.Description)
54 }
55 if result.ID != "1234" {
56 t.Errorf("Service ID was unexpected [%s]", result.ID)
57 }
58 if result.Name != "InscrutableOpenStackProjectName" {
59 t.Errorf("Service name was unexpected [%s]", result.Name)
60 }
61 if result.Type != "compute" {
62 t.Errorf("Service type was unexpected [%s]", result.Type)
63 }
64}
Ash Wilson2f5dd1f2014-09-03 14:01:37 -040065
66func TestListSinglePage(t *testing.T) {
67 testhelper.SetupHTTP()
68 defer testhelper.TeardownHTTP()
69
70 testhelper.Mux.HandleFunc("/services", func(w http.ResponseWriter, r *http.Request) {
71 testhelper.TestMethod(t, r, "GET")
Ash Wilsond1b72132014-09-03 15:26:26 -040072 testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
Ash Wilson2f5dd1f2014-09-03 14:01:37 -040073
74 w.Header().Add("Content-Type", "application/json")
75 fmt.Fprintf(w, `
76 {
77 "links": {
78 "next": null,
79 "previous": null
80 },
81 "services": [
82 {
83 "description": "Service One",
84 "id": "1234",
85 "name": "service-one",
86 "type": "identity"
87 },
88 {
89 "description": "Service Two",
90 "id": "9876",
91 "name": "service-two",
92 "type": "compute"
93 }
94 ]
95 }
96 `)
97 })
98
Ash Wilsond1b72132014-09-03 15:26:26 -040099 client := serviceClient()
Ash Wilson2f5dd1f2014-09-03 14:01:37 -0400100
Ash Wilsond1b72132014-09-03 15:26:26 -0400101 result, err := List(client, ListOpts{})
Ash Wilson2f5dd1f2014-09-03 14:01:37 -0400102 if err != nil {
103 t.Fatalf("Error listing services: %v", err)
104 }
105
Ash Wilson64f44152014-09-05 13:45:03 -0400106 collection, err := gophercloud.AllPages(result)
107 actual := AsServices(collection)
108
109 desc0 := "Service One"
110 desc1 := "Service Two"
111 expected := []Service{
112 Service{
113 Description: &desc0,
114 ID: "1234",
115 Name: "service-one",
116 Type: "identity",
117 },
118 Service{
119 Description: &desc1,
120 ID: "9876",
121 Name: "service-two",
122 Type: "compute",
123 },
Ash Wilson2f5dd1f2014-09-03 14:01:37 -0400124 }
Ash Wilson64f44152014-09-05 13:45:03 -0400125
126 if !reflect.DeepEqual(expected, actual) {
127 t.Errorf("Expected %#v, got %#v", expected, actual)
Ash Wilson2f5dd1f2014-09-03 14:01:37 -0400128 }
129}
Ash Wilsonb1129972014-09-03 14:45:21 -0400130
Ash Wilson5266e492014-09-09 15:44:30 -0400131func TestGetSuccessful(t *testing.T) {
Ash Wilsonb1129972014-09-03 14:45:21 -0400132 testhelper.SetupHTTP()
133 defer testhelper.TeardownHTTP()
134
135 testhelper.Mux.HandleFunc("/services/12345", func(w http.ResponseWriter, r *http.Request) {
136 testhelper.TestMethod(t, r, "GET")
Ash Wilsond1b72132014-09-03 15:26:26 -0400137 testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
Ash Wilsonb1129972014-09-03 14:45:21 -0400138
139 w.Header().Add("Content-Type", "application/json")
140 fmt.Fprintf(w, `
141 {
142 "service": {
143 "description": "Service One",
Ash Wilsond1b72132014-09-03 15:26:26 -0400144 "id": "12345",
Ash Wilsonb1129972014-09-03 14:45:21 -0400145 "name": "service-one",
146 "type": "identity"
147 }
148 }
149 `)
150 })
151
Ash Wilsond1b72132014-09-03 15:26:26 -0400152 client := serviceClient()
Ash Wilsonb1129972014-09-03 14:45:21 -0400153
Ash Wilson5266e492014-09-09 15:44:30 -0400154 result, err := Get(client, "12345")
Ash Wilsonb1129972014-09-03 14:45:21 -0400155 if err != nil {
156 t.Fatalf("Error fetching service information: %v", err)
157 }
158
Ash Wilsond1b72132014-09-03 15:26:26 -0400159 if result.ID != "12345" {
Ash Wilsonb1129972014-09-03 14:45:21 -0400160 t.Errorf("Unexpected service ID: %s", result.ID)
161 }
162 if *result.Description != "Service One" {
163 t.Errorf("Unexpected service description: [%s]", *result.Description)
164 }
165 if result.Name != "service-one" {
166 t.Errorf("Unexpected service name: [%s]", result.Name)
167 }
168 if result.Type != "identity" {
169 t.Errorf("Unexpected service type: [%s]", result.Type)
170 }
171}
Ash Wilsond1b72132014-09-03 15:26:26 -0400172
173func TestUpdateSuccessful(t *testing.T) {
174 testhelper.SetupHTTP()
175 defer testhelper.TeardownHTTP()
176
177 testhelper.Mux.HandleFunc("/services/12345", func(w http.ResponseWriter, r *http.Request) {
178 testhelper.TestMethod(t, r, "PATCH")
179 testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
180 testhelper.TestJSONRequest(t, r, `{ "type": "lasermagic" }`)
181
182 w.Header().Add("Content-Type", "application/json")
183 fmt.Fprintf(w, `
184 {
185 "service": {
186 "id": "12345",
187 "type": "lasermagic"
188 }
189 }
190 `)
191 })
192
193 client := serviceClient()
194
195 result, err := Update(client, "12345", "lasermagic")
196 if err != nil {
Ash Wilsond24786d2014-09-03 15:38:00 -0400197 t.Fatalf("Unable to update service: %v", err)
Ash Wilsond1b72132014-09-03 15:26:26 -0400198 }
199
200 if result.ID != "12345" {
201
202 }
203}
Ash Wilsond24786d2014-09-03 15:38:00 -0400204
205func TestDeleteSuccessful(t *testing.T) {
206 testhelper.SetupHTTP()
207 defer testhelper.TeardownHTTP()
208
209 testhelper.Mux.HandleFunc("/services/12345", func(w http.ResponseWriter, r *http.Request) {
210 testhelper.TestMethod(t, r, "DELETE")
211 testhelper.TestHeader(t, r, "X-Auth-Token", tokenID)
212
213 w.WriteHeader(http.StatusNoContent)
214 })
215
216 client := serviceClient()
217
218 err := Delete(client, "12345")
219 if err != nil {
220 t.Fatalf("Unable to delete service: %v", err)
221 }
222}