blob: f03c0f96dbdafc030b8dd4f6325d5ae2c3a1d710 [file] [log] [blame]
Samuel A. Falvo IIb5d93f22014-02-21 15:00:20 -08001// +build acceptance
2
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -08003package openstack
4
5import (
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -08006 "fmt"
Samuel A. Falvo II10decf92014-02-13 17:05:35 -08007 "github.com/rackspace/gophercloud/openstack/compute/flavors"
Samuel A. Falvo IIe246ac02014-02-13 23:20:09 -08008 "github.com/rackspace/gophercloud/openstack/compute/images"
9 "github.com/rackspace/gophercloud/openstack/compute/servers"
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080010 "os"
Samuel A. Falvo IIe246ac02014-02-13 23:20:09 -080011 "testing"
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080012)
13
Jon Perritt816d2a02014-03-11 20:49:46 -050014var service = "compute"
15
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080016func TestListServers(t *testing.T) {
Jon Perritt816d2a02014-03-11 20:49:46 -050017 ts, err := setupForList(service)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080018 if err != nil {
19 t.Error(err)
20 return
21 }
22
Samuel A. Falvo IIce000732014-02-13 18:53:53 -080023 fmt.Fprintln(ts.w, "ID\tRegion\tName\tStatus\tIPv4\tIPv6\t")
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080024
25 region := os.Getenv("OS_REGION_NAME")
26 n := 0
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080027 for _, ep := range ts.eps {
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080028 if (region != "") && (region != ep.Region) {
29 continue
30 }
31
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080032 client := servers.NewClient(ep.PublicURL, ts.a, ts.o)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080033
34 listResults, err := servers.List(client)
35 if err != nil {
36 t.Error(err)
37 return
38 }
39
40 svrs, err := servers.GetServers(listResults)
41 if err != nil {
42 t.Error(err)
43 return
44 }
45
46 n = n + len(svrs)
47
48 for _, s := range svrs {
Samuel A. Falvo IIce000732014-02-13 18:53:53 -080049 fmt.Fprintf(ts.w, "%s\t%s\t%s\t%s\t%s\t%s\t\n", s.Id, s.Name, ep.Region, s.Status, s.AccessIPv4, s.AccessIPv6)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080050 }
51 }
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080052 ts.w.Flush()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080053 fmt.Printf("--------\n%d servers listed.\n", n)
54}
55
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080056func TestListImages(t *testing.T) {
Jon Perritt816d2a02014-03-11 20:49:46 -050057 ts, err := setupForList(service)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080058 if err != nil {
59 t.Error(err)
60 return
61 }
62
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080063 fmt.Fprintln(ts.w, "ID\tRegion\tName\tStatus\tCreated\t")
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080064
65 region := os.Getenv("OS_REGION_NAME")
66 n := 0
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080067 for _, ep := range ts.eps {
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080068 if (region != "") && (region != ep.Region) {
69 continue
70 }
71
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080072 client := images.NewClient(ep.PublicURL, ts.a, ts.o)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080073
74 listResults, err := images.List(client)
75 if err != nil {
76 t.Error(err)
77 return
78 }
79
80 imgs, err := images.GetImages(listResults)
81 if err != nil {
82 t.Error(err)
83 return
84 }
85
86 n = n + len(imgs)
87
88 for _, i := range imgs {
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080089 fmt.Fprintf(ts.w, "%s\t%s\t%s\t%s\t%s\t\n", i.Id, ep.Region, i.Name, i.Status, i.Created)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080090 }
91 }
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080092 ts.w.Flush()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080093 fmt.Printf("--------\n%d images listed.\n", n)
94}
95
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080096func TestListFlavors(t *testing.T) {
Jon Perritt816d2a02014-03-11 20:49:46 -050097 ts, err := setupForList(service)
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080098 if err != nil {
99 t.Error(err)
100 return
101 }
102
Samuel A. Falvo II10decf92014-02-13 17:05:35 -0800103 fmt.Fprintln(ts.w, "ID\tRegion\tName\tRAM\tDisk\tVCPUs\t")
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800104
105 region := os.Getenv("OS_REGION_NAME")
106 n := 0
107 for _, ep := range ts.eps {
108 if (region != "") && (region != ep.Region) {
109 continue
110 }
111
112 client := flavors.NewClient(ep.PublicURL, ts.a, ts.o)
113
Samuel A. Falvo II38c6ad02014-05-06 18:09:46 -0700114 listResults, err := flavors.List(client, flavors.ListFilterOptions{})
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800115 if err != nil {
116 t.Error(err)
117 return
118 }
119
120 flavs, err := flavors.GetFlavors(listResults)
121 if err != nil {
122 t.Error(err)
123 return
124 }
125
126 n = n + len(flavs)
127
128 for _, f := range flavs {
Samuel A. Falvo II10decf92014-02-13 17:05:35 -0800129 fmt.Fprintf(ts.w, "%s\t%s\t%s\t%d\t%d\t%d\t\n", f.Id, ep.Region, f.Name, f.Ram, f.Disk, f.VCpus)
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800130 }
131 }
132 ts.w.Flush()
Samuel A. Falvo II38c6ad02014-05-06 18:09:46 -0700133 fmt.Printf("--------\n%d flavors listed.\n", n)
134}
135
136func TestGetFlavor(t *testing.T) {
137 ts, err := setupForCRUD()
138 if err != nil {
139 t.Fatal(err)
140 }
141
142 region := os.Getenv("OS_REGION_NAME")
143 for _, ep := range ts.eps {
144 if (region != "") && (region != ep.Region) {
145 continue
146 }
147 client := flavors.NewClient(ep.PublicURL, ts.a, ts.o)
148
149 getResults, err := flavors.Get(client, ts.flavorId)
150 if err != nil {
151 t.Fatal(err)
152 }
153 flav, err := flavors.GetFlavor(getResults)
154 if err != nil {
155 t.Fatal(err)
156 }
157 fmt.Printf("%#v\n", flav)
158 }
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800159}
160
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800161func TestCreateDestroyServer(t *testing.T) {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800162 ts, err := setupForCRUD()
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800163 if err != nil {
164 t.Error(err)
165 return
166 }
167
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800168 err = createServer(ts)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800169 if err != nil {
170 t.Error(err)
171 return
172 }
173
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800174 // We put this in a defer so that it gets executed even in the face of errors or panics.
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800175 defer func() {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800176 servers.Delete(ts.client, ts.createdServer.Id)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800177 }()
178
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800179 err = waitForStatus(ts, "ACTIVE")
180 if err != nil {
181 t.Error(err)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800182 }
183}
184
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800185func TestUpdateServer(t *testing.T) {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800186 ts, err := setupForCRUD()
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800187 if err != nil {
188 t.Error(err)
189 return
190 }
191
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800192 err = createServer(ts)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800193 if err != nil {
194 t.Error(err)
195 return
196 }
197
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800198 defer func() {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800199 servers.Delete(ts.client, ts.createdServer.Id)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800200 }()
201
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800202 err = waitForStatus(ts, "ACTIVE")
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800203 if err != nil {
204 t.Error(err)
205 return
206 }
207
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800208 err = changeServerName(ts)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800209 if err != nil {
210 t.Error(err)
211 return
212 }
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800213}
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700214
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700215func TestActionChangeAdminPassword(t *testing.T) {
216 t.Parallel()
217
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700218 ts, err := setupForCRUD()
219 if err != nil {
220 t.Fatal(err)
221 }
222
223 err = createServer(ts)
224 if err != nil {
225 t.Fatal(err)
226 }
227
228 defer func(){
229 servers.Delete(ts.client, ts.createdServer.Id)
230 }()
231
232 err = waitForStatus(ts, "ACTIVE")
233 if err != nil {
234 t.Fatal(err)
235 }
236
237 err = changeAdminPassword(ts)
238 if err != nil {
239 t.Fatal(err)
240 }
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700241}
242
243func TestActionReboot(t *testing.T) {
244 t.Parallel()
245
246 ts, err := setupForCRUD()
247 if err != nil {
248 t.Fatal(err)
249 }
250
251 err = createServer(ts)
252 if err != nil {
253 t.Fatal(err)
254 }
255
256 defer func(){
257 servers.Delete(ts.client, ts.createdServer.Id)
258 }()
259
260 err = waitForStatus(ts, "ACTIVE")
261 if err != nil {
262 t.Fatal(err)
263 }
Samuel A. Falvo II41c9f612014-03-11 19:00:10 -0700264
265 err = servers.Reboot(ts.client, ts.createdServer.Id, "aldhjflaskhjf")
266 if err == nil {
267 t.Fatal("Expected the SDK to provide an ArgumentError here")
268 }
269
270 err = rebootServer(ts)
271 if err != nil {
272 t.Fatal(err)
273 }
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700274}
275
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700276func TestActionRebuild(t *testing.T) {
277 t.Parallel()
278
279 ts, err := setupForCRUD()
280 if err != nil {
281 t.Fatal(err)
282 }
283
284 err = createServer(ts)
285 if err != nil {
286 t.Fatal(err)
287 }
288
289 defer func(){
290 servers.Delete(ts.client, ts.createdServer.Id)
291 }()
292
293 err = waitForStatus(ts, "ACTIVE")
294 if err != nil {
295 t.Fatal(err)
296 }
297
298 err = rebuildServer(ts)
299 if err != nil {
300 t.Fatal(err)
301 }
302}
303
304func TestActionResizeConfirm(t *testing.T) {
305 t.Parallel()
306
307 ts, err := setupForCRUD()
308 if err != nil {
309 t.Fatal(err)
310 }
311
312 err = createServer(ts)
313 if err != nil {
314 t.Fatal(err)
315 }
316
317 defer func(){
318 servers.Delete(ts.client, ts.createdServer.Id)
319 }()
320
321 err = waitForStatus(ts, "ACTIVE")
322 if err != nil {
323 t.Fatal(err)
324 }
325
326 err = resizeServer(ts)
327 if err != nil {
328 t.Fatal(err)
329 }
330
331 err = confirmResize(ts)
332 if err != nil {
333 t.Fatal(err)
334 }
335}
336
337func TestActionResizeRevert(t *testing.T) {
338 t.Parallel()
339
340 ts, err := setupForCRUD()
341 if err != nil {
342 t.Fatal(err)
343 }
344
345 err = createServer(ts)
346 if err != nil {
347 t.Fatal(err)
348 }
349
350 defer func(){
351 servers.Delete(ts.client, ts.createdServer.Id)
352 }()
353
354 err = waitForStatus(ts, "ACTIVE")
355 if err != nil {
356 t.Fatal(err)
357 }
358
359 err = resizeServer(ts)
360 if err != nil {
361 t.Fatal(err)
362 }
363
364 err = revertResize(ts)
365 if err != nil {
366 t.Fatal(err)
367 }
368}