blob: d7c0eba121b4323ed8299cd77afd7f6bbe552948 [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
114 listResults, err := flavors.List(client)
115 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()
133 fmt.Printf("--------\n%d images listed.\n", n)
134}
135
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800136func TestCreateDestroyServer(t *testing.T) {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800137 ts, err := setupForCRUD()
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800138 if err != nil {
139 t.Error(err)
140 return
141 }
142
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800143 err = createServer(ts)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800144 if err != nil {
145 t.Error(err)
146 return
147 }
148
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800149 // 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 -0800150 defer func() {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800151 servers.Delete(ts.client, ts.createdServer.Id)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800152 }()
153
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800154 err = waitForStatus(ts, "ACTIVE")
155 if err != nil {
156 t.Error(err)
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800157 }
158}
159
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800160func TestUpdateServer(t *testing.T) {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800161 ts, err := setupForCRUD()
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800162 if err != nil {
163 t.Error(err)
164 return
165 }
166
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800167 err = createServer(ts)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800168 if err != nil {
169 t.Error(err)
170 return
171 }
172
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800173 defer func() {
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800174 servers.Delete(ts.client, ts.createdServer.Id)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800175 }()
176
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800177 err = waitForStatus(ts, "ACTIVE")
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800178 if err != nil {
179 t.Error(err)
180 return
181 }
182
Samuel A. Falvo II0abdb102014-02-13 23:19:26 -0800183 err = changeServerName(ts)
Samuel A. Falvo II22d3b772014-02-13 19:27:05 -0800184 if err != nil {
185 t.Error(err)
186 return
187 }
Samuel A. Falvo IIce000732014-02-13 18:53:53 -0800188}
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700189
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700190func TestActionChangeAdminPassword(t *testing.T) {
191 t.Parallel()
192
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700193 ts, err := setupForCRUD()
194 if err != nil {
195 t.Fatal(err)
196 }
197
198 err = createServer(ts)
199 if err != nil {
200 t.Fatal(err)
201 }
202
203 defer func(){
204 servers.Delete(ts.client, ts.createdServer.Id)
205 }()
206
207 err = waitForStatus(ts, "ACTIVE")
208 if err != nil {
209 t.Fatal(err)
210 }
211
212 err = changeAdminPassword(ts)
213 if err != nil {
214 t.Fatal(err)
215 }
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700216}
217
218func TestActionReboot(t *testing.T) {
219 t.Parallel()
220
221 ts, err := setupForCRUD()
222 if err != nil {
223 t.Fatal(err)
224 }
225
226 err = createServer(ts)
227 if err != nil {
228 t.Fatal(err)
229 }
230
231 defer func(){
232 servers.Delete(ts.client, ts.createdServer.Id)
233 }()
234
235 err = waitForStatus(ts, "ACTIVE")
236 if err != nil {
237 t.Fatal(err)
238 }
Samuel A. Falvo II41c9f612014-03-11 19:00:10 -0700239
240 err = servers.Reboot(ts.client, ts.createdServer.Id, "aldhjflaskhjf")
241 if err == nil {
242 t.Fatal("Expected the SDK to provide an ArgumentError here")
243 }
244
245 err = rebootServer(ts)
246 if err != nil {
247 t.Fatal(err)
248 }
Samuel A. Falvo IIca5f9a32014-03-11 17:52:58 -0700249}
250
Samuel A. Falvo II808bb632014-03-12 00:07:50 -0700251func TestActionRebuild(t *testing.T) {
252 t.Parallel()
253
254 ts, err := setupForCRUD()
255 if err != nil {
256 t.Fatal(err)
257 }
258
259 err = createServer(ts)
260 if err != nil {
261 t.Fatal(err)
262 }
263
264 defer func(){
265 servers.Delete(ts.client, ts.createdServer.Id)
266 }()
267
268 err = waitForStatus(ts, "ACTIVE")
269 if err != nil {
270 t.Fatal(err)
271 }
272
273 err = rebuildServer(ts)
274 if err != nil {
275 t.Fatal(err)
276 }
277}
278
279func TestActionResizeConfirm(t *testing.T) {
280 t.Parallel()
281
282 ts, err := setupForCRUD()
283 if err != nil {
284 t.Fatal(err)
285 }
286
287 err = createServer(ts)
288 if err != nil {
289 t.Fatal(err)
290 }
291
292 defer func(){
293 servers.Delete(ts.client, ts.createdServer.Id)
294 }()
295
296 err = waitForStatus(ts, "ACTIVE")
297 if err != nil {
298 t.Fatal(err)
299 }
300
301 err = resizeServer(ts)
302 if err != nil {
303 t.Fatal(err)
304 }
305
306 err = confirmResize(ts)
307 if err != nil {
308 t.Fatal(err)
309 }
310}
311
312func TestActionResizeRevert(t *testing.T) {
313 t.Parallel()
314
315 ts, err := setupForCRUD()
316 if err != nil {
317 t.Fatal(err)
318 }
319
320 err = createServer(ts)
321 if err != nil {
322 t.Fatal(err)
323 }
324
325 defer func(){
326 servers.Delete(ts.client, ts.createdServer.Id)
327 }()
328
329 err = waitForStatus(ts, "ACTIVE")
330 if err != nil {
331 t.Fatal(err)
332 }
333
334 err = resizeServer(ts)
335 if err != nil {
336 t.Fatal(err)
337 }
338
339 err = revertResize(ts)
340 if err != nil {
341 t.Fatal(err)
342 }
343}