blob: 1c9ee11bee492c6af20884cb958fa1c98f6b87bd [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()
Jon Perrittfdac6e52014-09-29 19:43:45 -050037 fmt.Printf("r: %+v\n", r)
Jon Perritt8aa40262014-09-29 15:41:32 -050038 marker := r.Form.Get("marker")
39 switch marker {
40 case "":
41 fmt.Fprintf(w, `[
42 {
43 "count": 0,
44 "bytes": 0,
45 "name": "janeausten"
46 },
47 {
48 "count": 1,
49 "bytes": 14,
50 "name": "marktwain"
51 }
52 ]`)
Jon Perrittfdac6e52014-09-29 19:43:45 -050053 case "marktwain":
54 fmt.Fprintf(w, `[]`)
Jon Perritt8aa40262014-09-29 15:41:32 -050055 default:
56 t.Fatalf("Unexpected marker: [%s]", marker)
57 }
Jon Perritt50da9b42014-09-14 15:06:59 -050058 })
59
60 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -050061 List(client, ListOpts{Full: true}).EachPage(func(page pagination.Page) (bool, error) {
Jon Perritt8c93a302014-09-28 22:35:57 -050062 actual, err := ExtractInfo(page)
63 if err != nil {
64 t.Errorf("Failed to extract container info: %v", err)
65 return false, err
66 }
67
68 expected := []Container{
69 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050070 Count: 0,
71 Bytes: 0,
72 Name: "janeausten",
Jon Perritt8c93a302014-09-28 22:35:57 -050073 },
74 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050075 Count: 1,
76 Bytes: 14,
77 Name: "marktwain",
Jon Perritt8c93a302014-09-28 22:35:57 -050078 },
79 }
80
81 testhelper.CheckDeepEquals(t, expected, actual)
82
83 return true, nil
84 })
Jon Perritt50da9b42014-09-14 15:06:59 -050085}
86
87func TestListContainerNames(t *testing.T) {
88 testhelper.SetupHTTP()
89 defer testhelper.TeardownHTTP()
90
91 testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
92 testhelper.TestMethod(t, r, "GET")
93 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
94 testhelper.TestHeader(t, r, "Accept", "text/plain")
Jon Perritt8c93a302014-09-28 22:35:57 -050095
96 w.Header().Set("Content-Type", "text/plain")
Jon Perrittfdac6e52014-09-29 19:43:45 -050097 r.ParseForm()
98 marker := r.Form.Get("marker")
99 switch marker {
100 case "":
101 fmt.Fprintf(w, "janeausten\nmarktwain\n")
102 case "marktwain":
103 fmt.Fprintf(w, ``)
104 default:
105 t.Fatalf("Unexpected marker: [%s]", marker)
106 }
Jon Perritt50da9b42014-09-14 15:06:59 -0500107 })
108
109 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500110 List(client, ListOpts{Full: false}).EachPage(func(page pagination.Page) (bool, error) {
Jon Perritt8c93a302014-09-28 22:35:57 -0500111 actual, err := ExtractNames(page)
112 if err != nil {
113 t.Errorf("Failed to extract container names: %v", err)
114 return false, err
115 }
116
Jon Perrittfdac6e52014-09-29 19:43:45 -0500117 expected := []string{"janeausten", "marktwain"}
Jon Perritt8c93a302014-09-28 22:35:57 -0500118
119 testhelper.CheckDeepEquals(t, expected, actual)
120
121 return true, nil
122 })
Jon Perritt50da9b42014-09-14 15:06:59 -0500123}
124
125func TestCreateContainer(t *testing.T) {
126 testhelper.SetupHTTP()
127 defer testhelper.TeardownHTTP()
128
129 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
130 testhelper.TestMethod(t, r, "PUT")
131 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
132 testhelper.TestHeader(t, r, "Accept", "application/json")
133 w.WriteHeader(http.StatusNoContent)
134 })
135
136 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500137 _, err := Create(client, "testContainer", CreateOpts{})
Jon Perritt50da9b42014-09-14 15:06:59 -0500138 if err != nil {
139 t.Fatalf("Unexpected error creating container: %v", err)
140 }
141}
142
143func TestDeleteContainer(t *testing.T) {
144 testhelper.SetupHTTP()
145 defer testhelper.TeardownHTTP()
146
147 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
148 testhelper.TestMethod(t, r, "DELETE")
149 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
150 testhelper.TestHeader(t, r, "Accept", "application/json")
151 w.WriteHeader(http.StatusNoContent)
152 })
153
154 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500155 err := Delete(client, "testContainer")
Jon Perritt50da9b42014-09-14 15:06:59 -0500156 if err != nil {
157 t.Fatalf("Unexpected error deleting container: %v", err)
158 }
159}
160
161func TestUpateContainer(t *testing.T) {
162 testhelper.SetupHTTP()
163 defer testhelper.TeardownHTTP()
164
165 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
166 testhelper.TestMethod(t, r, "POST")
167 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
168 testhelper.TestHeader(t, r, "Accept", "application/json")
169 w.WriteHeader(http.StatusNoContent)
170 })
171
172 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500173 err := Update(client, "testContainer", UpdateOpts{})
Jon Perritt50da9b42014-09-14 15:06:59 -0500174 if err != nil {
175 t.Fatalf("Unexpected error updating container metadata: %v", err)
176 }
177}
178
179func TestGetContainer(t *testing.T) {
180 testhelper.SetupHTTP()
181 defer testhelper.TeardownHTTP()
182
183 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
184 testhelper.TestMethod(t, r, "HEAD")
185 testhelper.TestHeader(t, r, "X-Auth-Token", tokenId)
186 testhelper.TestHeader(t, r, "Accept", "application/json")
187 w.WriteHeader(http.StatusNoContent)
Jon Perritt8c93a302014-09-28 22:35:57 -0500188 fmt.Fprintf(w, `
189
190 `)
Jon Perritt50da9b42014-09-14 15:06:59 -0500191 })
192
193 client := serviceClient()
Jon Perritt8c93a302014-09-28 22:35:57 -0500194 _, err := Get(client, "testContainer").ExtractMetadata()
Jon Perritt50da9b42014-09-14 15:06:59 -0500195 if err != nil {
196 t.Fatalf("Unexpected error getting container metadata: %v", err)
197 }
198}