Merge lp:~allenap/gwacl/storage-get-blob into lp:gwacl

Proposed by Gavin Panella
Status: Merged
Approved by: Gavin Panella
Approved revision: 56
Merged at revision: 56
Proposed branch: lp:~allenap/gwacl/storage-get-blob
Merge into: lp:gwacl
Diff against target: 91 lines (+76/-0)
2 files modified
storage.go (+20/-0)
storage_test.go (+56/-0)
To merge this branch: bzr merge lp:~allenap/gwacl/storage-get-blob
Reviewer Review Type Date Requested Status
Julian Edwards (community) Approve
Review via email: mp+154867@code.launchpad.net

Commit message

New Storage API operation to get a blob.

To post a comment you must log in.
Revision history for this message
Julian Edwards (julian-edwards) :
review: Approve
lp:~allenap/gwacl/storage-get-blob updated
56. By Gavin Panella

Assert instead of Check that the reader is not nil.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'storage.go'
--- storage.go 2013-03-22 06:34:24 +0000
+++ storage.go 2013-03-22 06:54:19 +0000
@@ -421,3 +421,23 @@
421 }421 }
422 return nil422 return nil
423}423}
424
425// Get the specified blob from the given container.
426func (context *StorageContext) GetBlob(container, filename string) (io.ReadCloser, error) {
427 uri := fmt.Sprintf(
428 "http://%s.blob.core.windows.net/%s/%s",
429 context.Account, container, filename)
430 req, err := http.NewRequest("GET", uri, nil)
431 if err != nil {
432 return nil, err
433 }
434 addStandardHeaders(req, context.Account, context.Key, "2012-02-12")
435 resp, err := context.send(req, nil)
436 if err != nil {
437 return nil, err
438 }
439 if resp.StatusCode != http.StatusOK {
440 return nil, fmt.Errorf("failed to get blob: %s", resp.Status)
441 }
442 return resp.Body, nil
443}
424444
=== modified file 'storage_test.go'
--- storage_test.go 2013-03-22 06:34:24 +0000
+++ storage_test.go 2013-03-22 06:54:19 +0000
@@ -768,3 +768,59 @@
768 err := context.DeleteBlob("container", "blobname")768 err := context.DeleteBlob("container", "blobname")
769 c.Assert(err.Error(), Equals, "failed to delete blob: 246 Frotzed")769 c.Assert(err.Error(), Equals, "failed to delete blob: 246 Frotzed")
770}770}
771
772type TestGetBlob struct{}
773
774var _ = Suite(&TestGetBlob{})
775
776func (suite *TestGetBlob) Test(c *C) {
777 context := makeStorageContext()
778 response_body := "blob-in-a-can"
779 response := &http.Response{
780 Status: fmt.Sprintf("%d", http.StatusOK),
781 StatusCode: http.StatusOK,
782 Body: ioutil.NopCloser(strings.NewReader(response_body)),
783 }
784 transport := &TestTransport{Response: response}
785 context.client = &http.Client{Transport: transport}
786 reader, err := context.GetBlob("container", "blobname")
787 c.Assert(reader, NotNil)
788 defer reader.Close()
789 c.Assert(err, IsNil)
790
791 c.Check(transport.Request.Method, Equals, "GET")
792 c.Check(transport.Request.URL.String(), Equals, fmt.Sprintf(
793 "http://%s.blob.core.windows.net/container/blobname",
794 context.Account))
795 c.Check(transport.Request.Header.Get("Authorization"), Not(Equals), "")
796
797 data, err := ioutil.ReadAll(reader)
798 c.Assert(err, IsNil)
799 c.Check(string(data), Equals, response_body)
800}
801
802// Client-side errors from the HTTP client are propagated back to the caller.
803func (suite *TestGetBlob) TestError(c *C) {
804 error := fmt.Errorf("canned-error")
805 transport := &TestTransport{Error: error}
806 context := makeStorageContext()
807 context.client = &http.Client{Transport: transport}
808 reader, err := context.GetBlob("container", "blobname")
809 c.Check(reader, IsNil)
810 c.Assert(err, NotNil)
811}
812
813// Server-side errors are propagated back to the caller.
814func (suite *TestGetBlob) TestErrorResponse(c *C) {
815 response := &http.Response{
816 Status: "246 Frotzed",
817 StatusCode: 246,
818 }
819 transport := &TestTransport{Response: response}
820 context := makeStorageContext()
821 context.client = &http.Client{Transport: transport}
822 reader, err := context.GetBlob("container", "blobname")
823 c.Check(reader, IsNil)
824 c.Assert(err, NotNil)
825 c.Assert(err.Error(), Equals, "failed to get blob: 246 Frotzed")
826}

Subscribers

People subscribed via source and target branches

to all changes: