blob: d58ebeb77ec0e47623fc1d5daa92d1a3fc793f80 [file] [log] [blame]
Jon Perritt50da9b42014-09-14 15:06:59 -05001package containers
2
3import (
Jon Perritt8c93a302014-09-28 22:35:57 -05004 "fmt"
Jon Perritt50da9b42014-09-14 15:06:59 -05005 "net/http"
6 "testing"
7
8 "github.com/rackspace/gophercloud"
Jon Perritt8c93a302014-09-28 22:35:57 -05009 "github.com/rackspace/gophercloud/pagination"
Jon Perritt50da9b42014-09-14 15:06:59 -050010 "github.com/rackspace/gophercloud/testhelper"
11)
12
Jon Perritt8c93a302014-09-28 22:35:57 -050013const (
Jon Perritt50da9b42014-09-14 15:06:59 -050014 tokenId = "abcabcabcabc"
15)
16
17var metadata = map[string]string{"gophercloud-test": "containers"}
18
19func serviceClient() *gophercloud.ServiceClient {
20 return &gophercloud.ServiceClient{
21 Provider: &gophercloud.ProviderClient{TokenID: tokenId},
22 Endpoint: testhelper.Endpoint(),
23 }
24}
25
26func TestListContainerInfo(t *testing.T) {
27 testhelper.SetupHTTP()
28 defer testhelper.TeardownHTTP()
29
30 testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
31 testhelper.TestMethod(t, r, "GET")
32 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
33 testhelper.TestHeader(t, r, "Accept", "application/json")
Jon Perritt8c93a302014-09-28 22:35:57 -050034
35 w.Header().Add("Content-Type", "application/json")
Jon Perritt8aa40262014-09-29 15:41:32 -050036 r.ParseForm()
37 marker := r.Form.Get("marker")
38 switch marker {
39 case "":
40 fmt.Fprintf(w, `[
41 {
42 "count": 0,
43 "bytes": 0,
44 "name": "janeausten"
45 },
46 {
47 "count": 1,
48 "bytes": 14,
49 "name": "marktwain"
50 }
51 ]`)
Jon Perrittfdac6e52014-09-29 19:43:45 -050052 case "marktwain":
53 fmt.Fprintf(w, `[]`)
Jon Perritt8aa40262014-09-29 15:41:32 -050054 default:
55 t.Fatalf("Unexpected marker: [%s]", marker)
56 }
Jon Perritt50da9b42014-09-14 15:06:59 -050057 })
58
59 client := serviceClient()
Jon Perrittde47eac2014-09-30 15:34:17 -050060 count := 0
61 List(client, &ListOpts{Full: true}).EachPage(func(page pagination.Page) (bool, error) {
62 count++
Jon Perritt8c93a302014-09-28 22:35:57 -050063 actual, err := ExtractInfo(page)
64 if err != nil {
65 t.Errorf("Failed to extract container info: %v", err)
66 return false, err
67 }
68
69 expected := []Container{
70 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050071 Count: 0,
72 Bytes: 0,
73 Name: "janeausten",
Jon Perritt8c93a302014-09-28 22:35:57 -050074 },
75 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050076 Count: 1,
77 Bytes: 14,
78 Name: "marktwain",
Jon Perritt8c93a302014-09-28 22:35:57 -050079 },
80 }
81
Jon Perrittde47eac2014-09-30 15:34:17 -050082 t.Logf("actual: %+v/n", actual)
83
Jon Perritt8c93a302014-09-28 22:35:57 -050084 testhelper.CheckDeepEquals(t, expected, actual)
85
86 return true, nil
87 })
Jon Perrittde47eac2014-09-30 15:34:17 -050088
89 if count != 1 {
90 t.Errorf("Expected 1 page, got %d", count)
91 }
Jon Perritt50da9b42014-09-14 15:06:59 -050092}
93
94func TestListContainerNames(t *testing.T) {
95 testhelper.SetupHTTP()
96 defer testhelper.TeardownHTTP()
97
98 testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
99 testhelper.TestMethod(t, r, "GET")
100 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
101 testhelper.TestHeader(t, r, "Accept", "text/plain")
Jon Perritt8c93a302014-09-28 22:35:57 -0500102
103 w.Header().Set("Content-Type", "text/plain")
Jon Perrittfdac6e52014-09-29 19:43:45 -0500104 r.ParseForm()
105 marker := r.Form.Get("marker")
106 switch marker {
107 case "":
108 fmt.Fprintf(w, "janeausten\nmarktwain\n")
109 case "marktwain":
110 fmt.Fprintf(w, ``)
111 default:
112 t.Fatalf("Unexpected marker: [%s]", marker)
113 }
Jon Perritt50da9b42014-09-14 15:06:59 -0500114 })
115
116 client := serviceClient()
Jon Perrittde47eac2014-09-30 15:34:17 -0500117 count := 0
118 List(client, &ListOpts{Full: false}).EachPage(func(page pagination.Page) (bool, error) {
119 count++
Jon Perritt8c93a302014-09-28 22:35:57 -0500120 actual, err := ExtractNames(page)
121 if err != nil {
122 t.Errorf("Failed to extract container names: %v", err)
123 return false, err
124 }
125
Jon Perrittfdac6e52014-09-29 19:43:45 -0500126 expected := []string{"janeausten", "marktwain"}
Jon Perritt8c93a302014-09-28 22:35:57 -0500127
128 testhelper.CheckDeepEquals(t, expected, actual)
129
130 return true, nil
131 })
Jon Perrittde47eac2014-09-30 15:34:17 -0500132
133 if count != 1 {
134 t.Errorf("Expected 1 page, got %d", count)
135 }
Jon Perritt50da9b42014-09-14 15:06:59 -0500136}
137
138func TestCreateContainer(t *testing.T) {
139 testhelper.SetupHTTP()
140 defer testhelper.TeardownHTTP()
141
142 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
143 testhelper.TestMethod(t, r, "PUT")
144 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
145 testhelper.TestHeader(t, r, "Accept", "application/json")
146 w.WriteHeader(http.StatusNoContent)
147 })
148
149 client := serviceClient()
Jon Perrittde47eac2014-09-30 15:34:17 -0500150 _, err := Create(client, "testContainer", nil)
Jon Perritt50da9b42014-09-14 15:06:59 -0500151 if err != nil {
152 t.Fatalf("Unexpected error creating container: %v", err)
153 }
154}
155
156func TestDeleteContainer(t *testing.T) {
157 testhelper.SetupHTTP()
158 defer testhelper.TeardownHTTP()
159
160 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
161 testhelper.TestMethod(t, r, "DELETE")
162 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
163 testhelper.TestHeader(t, r, "Accept", "application/json")
164 w.WriteHeader(http.StatusNoContent)
165 })
166
167 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500168 err := Delete(client, "testContainer")
Jon Perritt50da9b42014-09-14 15:06:59 -0500169 if err != nil {
170 t.Fatalf("Unexpected error deleting container: %v", err)
171 }
172}
173
174func TestUpateContainer(t *testing.T) {
175 testhelper.SetupHTTP()
176 defer testhelper.TeardownHTTP()
177
178 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
179 testhelper.TestMethod(t, r, "POST")
180 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
181 testhelper.TestHeader(t, r, "Accept", "application/json")
182 w.WriteHeader(http.StatusNoContent)
183 })
184
185 client := serviceClient()
Jon Perrittde47eac2014-09-30 15:34:17 -0500186 err := Update(client, "testContainer", nil)
Jon Perritt50da9b42014-09-14 15:06:59 -0500187 if err != nil {
188 t.Fatalf("Unexpected error updating container metadata: %v", err)
189 }
190}
191
192func TestGetContainer(t *testing.T) {
193 testhelper.SetupHTTP()
194 defer testhelper.TeardownHTTP()
195
196 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
197 testhelper.TestMethod(t, r, "HEAD")
198 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
199 testhelper.TestHeader(t, r, "Accept", "application/json")
200 w.WriteHeader(http.StatusNoContent)
201 })
202
203 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500204 _, err := Get(client, "testContainer").ExtractMetadata()
Jon Perritt50da9b42014-09-14 15:06:59 -0500205 if err != nil {
206 t.Fatalf("Unexpected error getting container metadata: %v", err)
207 }
208}