blob: 09930d04a71ab1fd9d38284b4df86c728cbbd539 [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
Jon Perritt8c93a302014-09-28 22:35:57 -05008 "github.com/rackspace/gophercloud/pagination"
Jon Perritt50da9b42014-09-14 15:06:59 -05009 "github.com/rackspace/gophercloud/testhelper"
Jamie Hannaford4ff79962014-10-06 16:28:23 +020010 fake "github.com/rackspace/gophercloud/testhelper/client"
Jon Perritt50da9b42014-09-14 15:06:59 -050011)
12
13var metadata = map[string]string{"gophercloud-test": "containers"}
14
Jon Perritt50da9b42014-09-14 15:06:59 -050015func TestListContainerInfo(t *testing.T) {
16 testhelper.SetupHTTP()
17 defer testhelper.TeardownHTTP()
18
19 testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
20 testhelper.TestMethod(t, r, "GET")
Jamie Hannaford4ff79962014-10-06 16:28:23 +020021 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -050022 testhelper.TestHeader(t, r, "Accept", "application/json")
Jon Perritt8c93a302014-09-28 22:35:57 -050023
Jon Perritt83c116b2014-09-30 16:30:24 -050024 w.Header().Set("Content-Type", "application/json")
Jon Perritt8aa40262014-09-29 15:41:32 -050025 r.ParseForm()
26 marker := r.Form.Get("marker")
27 switch marker {
28 case "":
29 fmt.Fprintf(w, `[
30 {
31 "count": 0,
32 "bytes": 0,
33 "name": "janeausten"
34 },
35 {
36 "count": 1,
37 "bytes": 14,
38 "name": "marktwain"
39 }
40 ]`)
Jon Perrittfdac6e52014-09-29 19:43:45 -050041 case "marktwain":
42 fmt.Fprintf(w, `[]`)
Jon Perritt8aa40262014-09-29 15:41:32 -050043 default:
44 t.Fatalf("Unexpected marker: [%s]", marker)
45 }
Jon Perritt50da9b42014-09-14 15:06:59 -050046 })
47
Jon Perrittde47eac2014-09-30 15:34:17 -050048 count := 0
Jamie Hannaford4ff79962014-10-06 16:28:23 +020049
50 List(fake.ServiceClient(), &ListOpts{Full: true}).EachPage(func(page pagination.Page) (bool, error) {
Jon Perrittde47eac2014-09-30 15:34:17 -050051 count++
Jon Perritt8c93a302014-09-28 22:35:57 -050052 actual, err := ExtractInfo(page)
53 if err != nil {
54 t.Errorf("Failed to extract container info: %v", err)
55 return false, err
56 }
57
58 expected := []Container{
59 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050060 Count: 0,
61 Bytes: 0,
62 Name: "janeausten",
Jon Perritt8c93a302014-09-28 22:35:57 -050063 },
64 Container{
Jon Perritt8aa40262014-09-29 15:41:32 -050065 Count: 1,
66 Bytes: 14,
67 Name: "marktwain",
Jon Perritt8c93a302014-09-28 22:35:57 -050068 },
69 }
70
71 testhelper.CheckDeepEquals(t, expected, actual)
72
73 return true, nil
74 })
Jon Perrittde47eac2014-09-30 15:34:17 -050075
76 if count != 1 {
77 t.Errorf("Expected 1 page, got %d", count)
78 }
Jon Perritt50da9b42014-09-14 15:06:59 -050079}
80
81func TestListContainerNames(t *testing.T) {
82 testhelper.SetupHTTP()
83 defer testhelper.TeardownHTTP()
84
85 testhelper.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
86 testhelper.TestMethod(t, r, "GET")
Jamie Hannaford4ff79962014-10-06 16:28:23 +020087 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -050088 testhelper.TestHeader(t, r, "Accept", "text/plain")
Jon Perritt8c93a302014-09-28 22:35:57 -050089
90 w.Header().Set("Content-Type", "text/plain")
Jon Perrittfdac6e52014-09-29 19:43:45 -050091 r.ParseForm()
92 marker := r.Form.Get("marker")
93 switch marker {
94 case "":
95 fmt.Fprintf(w, "janeausten\nmarktwain\n")
96 case "marktwain":
97 fmt.Fprintf(w, ``)
98 default:
99 t.Fatalf("Unexpected marker: [%s]", marker)
100 }
Jon Perritt50da9b42014-09-14 15:06:59 -0500101 })
102
Jon Perrittde47eac2014-09-30 15:34:17 -0500103 count := 0
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200104
105 List(fake.ServiceClient(), &ListOpts{Full: false}).EachPage(func(page pagination.Page) (bool, error) {
Jon Perrittde47eac2014-09-30 15:34:17 -0500106 count++
Jon Perritt8c93a302014-09-28 22:35:57 -0500107 actual, err := ExtractNames(page)
108 if err != nil {
109 t.Errorf("Failed to extract container names: %v", err)
110 return false, err
111 }
112
Jon Perrittfdac6e52014-09-29 19:43:45 -0500113 expected := []string{"janeausten", "marktwain"}
Jon Perritt8c93a302014-09-28 22:35:57 -0500114
115 testhelper.CheckDeepEquals(t, expected, actual)
116
117 return true, nil
118 })
Jon Perrittde47eac2014-09-30 15:34:17 -0500119
120 if count != 1 {
121 t.Errorf("Expected 1 page, got %d", count)
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")
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200131 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -0500132 testhelper.TestHeader(t, r, "Accept", "application/json")
133 w.WriteHeader(http.StatusNoContent)
134 })
135
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200136 _, err := Create(fake.ServiceClient(), "testContainer", nil).ExtractHeaders()
Jon Perritt50da9b42014-09-14 15:06:59 -0500137 if err != nil {
138 t.Fatalf("Unexpected error creating container: %v", err)
139 }
140}
141
142func TestDeleteContainer(t *testing.T) {
143 testhelper.SetupHTTP()
144 defer testhelper.TeardownHTTP()
145
146 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
147 testhelper.TestMethod(t, r, "DELETE")
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200148 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -0500149 testhelper.TestHeader(t, r, "Accept", "application/json")
150 w.WriteHeader(http.StatusNoContent)
151 })
152
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200153 _, err := Delete(fake.ServiceClient(), "testContainer").ExtractHeaders()
Jon Perritt50da9b42014-09-14 15:06:59 -0500154 if err != nil {
155 t.Fatalf("Unexpected error deleting container: %v", err)
156 }
157}
158
159func TestUpateContainer(t *testing.T) {
160 testhelper.SetupHTTP()
161 defer testhelper.TeardownHTTP()
162
163 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
164 testhelper.TestMethod(t, r, "POST")
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200165 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -0500166 testhelper.TestHeader(t, r, "Accept", "application/json")
167 w.WriteHeader(http.StatusNoContent)
168 })
169
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200170 _, err := Update(fake.ServiceClient(), "testContainer", nil).ExtractHeaders()
Jon Perritt50da9b42014-09-14 15:06:59 -0500171 if err != nil {
172 t.Fatalf("Unexpected error updating container metadata: %v", err)
173 }
174}
175
176func TestGetContainer(t *testing.T) {
177 testhelper.SetupHTTP()
178 defer testhelper.TeardownHTTP()
179
180 testhelper.Mux.HandleFunc("/testContainer", func(w http.ResponseWriter, r *http.Request) {
181 testhelper.TestMethod(t, r, "HEAD")
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200182 testhelper.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
Jon Perritt50da9b42014-09-14 15:06:59 -0500183 testhelper.TestHeader(t, r, "Accept", "application/json")
184 w.WriteHeader(http.StatusNoContent)
185 })
186
Jamie Hannaford4ff79962014-10-06 16:28:23 +0200187 _, err := Get(fake.ServiceClient(), "testContainer").ExtractMetadata()
Jon Perritt50da9b42014-09-14 15:06:59 -0500188 if err != nil {
189 t.Fatalf("Unexpected error getting container metadata: %v", err)
190 }
191}