blob: 27386edeaa8df509ea79bc5fb45b4c707453854f [file] [log] [blame]
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -08001package openstack
2
3import (
4 "testing"
5 "fmt"
6 "github.com/rackspace/gophercloud/openstack/compute/servers"
7 "github.com/rackspace/gophercloud/openstack/compute/images"
8 "github.com/rackspace/gophercloud/openstack/identity"
9 "github.com/rackspace/gophercloud/openstack/utils"
10 "os"
11 "text/tabwriter"
12)
13
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080014type testState struct {
15 o identity.AuthOptions
16 a identity.AuthResults
17 sc *identity.ServiceCatalog
18 eps []identity.Endpoint
19 w *tabwriter.Writer
20}
21
22func prepForTest() (*testState, error) {
23 var err error
24
25 ts := new(testState)
26
27 ts.o, err = utils.AuthOptions()
28 if err != nil {
29 return ts, err
30 }
31
32 ts.a, err = identity.Authenticate(ts.o)
33 if err != nil {
34 return ts, err
35 }
36
37 ts.sc, err = identity.GetServiceCatalog(ts.a)
38 if err != nil {
39 return ts, err
40 }
41
42 ts.eps, err = findAllComputeEndpoints(ts.sc)
43 if err != nil {
44 return ts, err
45 }
46
47 ts.w = new(tabwriter.Writer)
48 ts.w.Init(os.Stdout, 2, 8, 2, ' ', 0)
49
50 return ts, nil
51}
52
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080053func TestListServers(t *testing.T) {
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080054 ts, err := prepForTest()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080055 if err != nil {
56 t.Error(err)
57 return
58 }
59
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080060 fmt.Fprintln(ts.w, "ID\tRegion\tName\tIPv4\tIPv6\t")
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080061
62 region := os.Getenv("OS_REGION_NAME")
63 n := 0
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080064 for _, ep := range ts.eps {
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080065 if (region != "") && (region != ep.Region) {
66 continue
67 }
68
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080069 client := servers.NewClient(ep.PublicURL, ts.a, ts.o)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080070
71 listResults, err := servers.List(client)
72 if err != nil {
73 t.Error(err)
74 return
75 }
76
77 svrs, err := servers.GetServers(listResults)
78 if err != nil {
79 t.Error(err)
80 return
81 }
82
83 n = n + len(svrs)
84
85 for _, s := range svrs {
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080086 fmt.Fprintf(ts.w, "%s\t%s\t%s\t%s\t%s\t\n", s.Id, s.Name, ep.Region, s.AccessIPv4, s.AccessIPv6)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080087 }
88 }
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080089 ts.w.Flush()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080090 fmt.Printf("--------\n%d servers listed.\n", n)
91}
92
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080093func TestListImages(t *testing.T) {
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -080094 ts, err := prepForTest()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -080095 if err != nil {
96 t.Error(err)
97 return
98 }
99
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800100 fmt.Fprintln(ts.w, "ID\tRegion\tName\tStatus\tCreated\t")
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -0800101
102 region := os.Getenv("OS_REGION_NAME")
103 n := 0
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800104 for _, ep := range ts.eps {
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -0800105 if (region != "") && (region != ep.Region) {
106 continue
107 }
108
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800109 client := images.NewClient(ep.PublicURL, ts.a, ts.o)
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -0800110
111 listResults, err := images.List(client)
112 if err != nil {
113 t.Error(err)
114 return
115 }
116
117 imgs, err := images.GetImages(listResults)
118 if err != nil {
119 t.Error(err)
120 return
121 }
122
123 n = n + len(imgs)
124
125 for _, i := range imgs {
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800126 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 -0800127 }
128 }
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800129 ts.w.Flush()
Samuel A. Falvo IIf370dc72014-02-13 15:05:34 -0800130 fmt.Printf("--------\n%d images listed.\n", n)
131}
132
Samuel A. Falvo IIdb020882014-02-13 15:37:57 -0800133func TestListFlavors(t *testing.T) {
134 ts, err := prepForTest()
135 if err != nil {
136 t.Error(err)
137 return
138 }
139
140 fmt.Fprintln(ts.w, "ID\tRegion\tName\tStatus\tCreated\t")
141
142 region := os.Getenv("OS_REGION_NAME")
143 n := 0
144 for _, ep := range ts.eps {
145 if (region != "") && (region != ep.Region) {
146 continue
147 }
148
149 client := flavors.NewClient(ep.PublicURL, ts.a, ts.o)
150
151 listResults, err := flavors.List(client)
152 if err != nil {
153 t.Error(err)
154 return
155 }
156
157 flavs, err := flavors.GetFlavors(listResults)
158 if err != nil {
159 t.Error(err)
160 return
161 }
162
163 n = n + len(flavs)
164
165 for _, f := range flavs {
166 fmt.Fprintf(ts.w, "%s\t%s\t%s\t%s\t%s\t\n", f.Id, ep.Region, f.Name, f.Status, f.Created)
167 }
168 }
169 ts.w.Flush()
170 fmt.Printf("--------\n%d images listed.\n", n)
171}
172
173func findAllComputeEndpoints(sc *identity.ServiceCatalog) ([]identity.Endpoint, error) {
174 ces, err := sc.CatalogEntries()
175 if err != nil {
176 return nil, err
177 }
178
179 for _, ce := range ces {
180 if ce.Type == "compute" {
181 return ce.Endpoints, nil
182 }
183 }
184
185 return nil, fmt.Errorf("Compute endpoint not found.")
186}
187