Merge lp:~allenap/gwacl/storage-send-thing into lp:gwacl

Proposed by Gavin Panella
Status: Merged
Approved by: Gavin Panella
Approved revision: 40
Merged at revision: 37
Proposed branch: lp:~allenap/gwacl/storage-send-thing
Merge into: lp:gwacl
Diff against target: 159 lines (+29/-23)
2 files modified
storage.go (+20/-14)
storage_test.go (+9/-9)
To merge this branch: bzr merge lp:~allenap/gwacl/storage-send-thing
Reviewer Review Type Date Requested Status
Gavin Panella Approve
Review via email: mp+154566@code.launchpad.net

Commit message

Some tweaks to StorageContext's fields and methods.

To post a comment you must log in.
Revision history for this message
Gavin Panella (allenap) :
review: Approve
lp:~allenap/gwacl/storage-send-thing updated
40. By Gavin Panella

Allow any 2xx status code in StorageContext.send().

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'storage.go'
2--- storage.go 2013-03-20 07:53:57 +0000
3+++ storage.go 2013-03-21 01:21:24 +0000
4@@ -190,16 +190,16 @@
5 type StorageContext struct {
6 Account string
7 Key string
8- Client *http.Client
9+ client *http.Client
10 }
11
12 // getClient is used when sending a request. If called with an existing client
13 // it will replace the once in the context structure which is useful for tests.
14 func (context *StorageContext) getClient() *http.Client {
15- if context.Client == nil {
16+ if context.client == nil {
17 return http.DefaultClient
18 }
19- return context.Client
20+ return context.client
21 }
22
23 // Any object that deserializes XML must meet this interface.
24@@ -210,28 +210,32 @@
25 // Send a request to the storage service and process the response.
26 // The "res" parameter is typically an XML struct that will deserialize the
27 // raw XML into the struct data.
28-func (context *StorageContext) Send(req *http.Request, res Deserializer) error {
29+func (context *StorageContext) send(req *http.Request, res Deserializer) (*http.Response, error) {
30 client := context.getClient()
31 resp, err := client.Do(req)
32 if err != nil {
33- return fmt.Errorf("request failed: %s", err)
34- }
35-
36- if resp.StatusCode != http.StatusOK {
37- return fmt.Errorf("request failed with status %d", resp.StatusCode)
38+ return resp, fmt.Errorf("request failed: %s", err)
39+ }
40+
41+ if resp.StatusCode < 200 || resp.StatusCode > 299 {
42+ return resp, fmt.Errorf("request failed with status %d", resp.StatusCode)
43+ }
44+
45+ if res == nil {
46+ return resp, nil
47 }
48
49 data, err := ioutil.ReadAll(resp.Body)
50 if err != nil {
51- return fmt.Errorf("Failed to read response data: %s", err)
52+ return resp, fmt.Errorf("Failed to read response data: %s", err)
53 }
54
55 err = res.Deserialize(data)
56 if err != nil {
57- return fmt.Errorf("Failed to deserialize data: %s", err)
58+ return resp, fmt.Errorf("Failed to deserialize data: %s", err)
59 }
60
61- return nil
62+ return resp, nil
63 }
64
65 // Send a request to the storage service to list the containers in the
66@@ -245,7 +249,8 @@
67 }
68 addStandardHeaders(req, context.Account, context.Key, "2012-02-12")
69 containers := &ContainerEnumerationResults{}
70- return containers, context.Send(req, containers)
71+ _, err = context.send(req, containers)
72+ return containers, err
73 }
74
75 // Send a request to the storage service to list the blobs in a container.
76@@ -259,5 +264,6 @@
77 }
78 addStandardHeaders(req, context.Account, context.Key, "2012-02-12")
79 blob := &BlobEnumerationResults{}
80- return blob, context.Send(req, blob)
81+ _, err = context.send(req, blob)
82+ return blob, err
83 }
84
85=== modified file 'storage_test.go'
86--- storage_test.go 2013-03-21 00:17:55 +0000
87+++ storage_test.go 2013-03-21 01:21:24 +0000
88@@ -228,14 +228,14 @@
89 var _ = Suite(&TestStorageContext{})
90
91 func (suite *TestStorageContext) TestGetClientReturnsDefaultClient(c *C) {
92- context := &StorageContext{Client: nil}
93+ context := &StorageContext{client: nil}
94 c.Assert(context.getClient(), Equals, http.DefaultClient)
95 }
96
97 func (suite *TestStorageContext) TestGetClientReturnsSpecifiedClient(c *C) {
98- context := &StorageContext{Client: &http.Client{}}
99+ context := &StorageContext{client: &http.Client{}}
100 c.Assert(context.getClient(), Not(Equals), http.DefaultClient)
101- c.Assert(context.getClient(), Equals, context.Client)
102+ c.Assert(context.getClient(), Equals, context.client)
103 }
104
105 // TestTransport is used as an http.Client.Transport for testing. The only
106@@ -298,7 +298,7 @@
107 Body: ioutil.NopCloser(strings.NewReader(response_body)),
108 }
109 transport := &TestTransport{Response: response}
110- context.Client = &http.Client{Transport: transport}
111+ context.client = &http.Client{Transport: transport}
112 results, err := context.ListContainers()
113 c.Assert(err, IsNil)
114 c.Check(transport.Request.URL.String(), Equals, fmt.Sprintf(
115@@ -313,7 +313,7 @@
116 error := fmt.Errorf("canned-error")
117 transport := &TestTransport{Error: error}
118 context := makeStorageContext()
119- context.Client = &http.Client{Transport: transport}
120+ context.client = &http.Client{Transport: transport}
121 _, err := context.ListContainers()
122 c.Assert(err, Not(IsNil))
123 }
124@@ -326,7 +326,7 @@
125 }
126 transport := &TestTransport{Response: response}
127 context := makeStorageContext()
128- context.Client = &http.Client{Transport: transport}
129+ context.client = &http.Client{Transport: transport}
130 _, err := context.ListContainers()
131 c.Assert(err, Not(IsNil))
132 }
133@@ -389,7 +389,7 @@
134 Body: ioutil.NopCloser(strings.NewReader(response_body)),
135 }
136 transport := &TestTransport{Response: response}
137- context.Client = &http.Client{Transport: transport}
138+ context.client = &http.Client{Transport: transport}
139 results, err := context.ListBlobs("container")
140 c.Assert(err, IsNil)
141 c.Check(transport.Request.URL.String(), Equals, fmt.Sprintf(
142@@ -404,7 +404,7 @@
143 error := fmt.Errorf("canned-error")
144 transport := &TestTransport{Error: error}
145 context := makeStorageContext()
146- context.Client = &http.Client{Transport: transport}
147+ context.client = &http.Client{Transport: transport}
148 _, err := context.ListBlobs("container")
149 c.Assert(err, Not(IsNil))
150 }
151@@ -417,7 +417,7 @@
152 }
153 transport := &TestTransport{Response: response}
154 context := makeStorageContext()
155- context.Client = &http.Client{Transport: transport}
156+ context.client = &http.Client{Transport: transport}
157 _, err := context.ListBlobs("container")
158 c.Assert(err, Not(IsNil))
159 }

Subscribers

People subscribed via source and target branches

to all changes: