From 2c1455af1bb90035b69a7d8d0f9763040056bf1e Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Wed, 22 Apr 2015 16:28:23 -0700 Subject: [PATCH] Implement x-amz-acl tests --- pkg/api/api_test.go | 17 +++++++++++++++++ pkg/api/contenttype.go | 22 +++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/pkg/api/api_test.go b/pkg/api/api_test.go index 3afe326d2..7413c027f 100644 --- a/pkg/api/api_test.go +++ b/pkg/api/api_test.go @@ -453,6 +453,7 @@ func (s *MySuite) TestPutBucket(c *C) { typedDriver.On("CreateBucket", "bucket").Return(nil).Once() request, err := http.NewRequest("PUT", testServer.URL+"/bucket", bytes.NewBufferString("")) c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "private") client := http.Client{} response, err := client.Do(request) @@ -499,6 +500,7 @@ func (s *MySuite) TestPutObject(c *C) { typedDriver.On("CreateBucket", "bucket").Return(nil).Once() request, err := http.NewRequest("PUT", testServer.URL+"/bucket", bytes.NewBufferString("")) c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "private") client := http.Client{} response, err := client.Do(request) @@ -970,6 +972,8 @@ func (s *MySuite) TestPutBucketErrors(c *C) { typedDriver.On("CreateBucket", "foo").Return(drivers.BucketNameInvalid{}).Once() request, err := http.NewRequest("PUT", testServer.URL+"/foo", bytes.NewBufferString("")) c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "private") + response, err := client.Do(request) c.Assert(err, IsNil) verifyError(c, response, "InvalidBucketName", "The specified bucket is not valid.", http.StatusBadRequest) @@ -977,6 +981,8 @@ func (s *MySuite) TestPutBucketErrors(c *C) { typedDriver.On("CreateBucket", "foo").Return(drivers.BucketExists{}).Once() request, err = http.NewRequest("PUT", testServer.URL+"/foo", bytes.NewBufferString("")) c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "private") + response, err = client.Do(request) c.Assert(err, IsNil) verifyError(c, response, "BucketAlreadyExists", "The requested bucket name is not available.", http.StatusConflict) @@ -984,9 +990,20 @@ func (s *MySuite) TestPutBucketErrors(c *C) { typedDriver.On("CreateBucket", "foo").Return(drivers.BackendCorrupted{}).Once() request, err = http.NewRequest("PUT", testServer.URL+"/foo", bytes.NewBufferString("")) c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "private") + response, err = client.Do(request) c.Assert(err, IsNil) verifyError(c, response, "InternalError", "We encountered an internal error, please try again.", http.StatusInternalServerError) + + typedDriver.On("CreateBucket", "foo").Return(nil).Once() + request, err = http.NewRequest("PUT", testServer.URL+"/foo", bytes.NewBufferString("")) + c.Assert(err, IsNil) + request.Header.Add("x-amz-acl", "unknown") + + response, err = client.Do(request) + c.Assert(err, IsNil) + verifyError(c, response, "NotImplemented", "A header you provided implies functionality that is not implemented.", http.StatusNotImplemented) } func (s *MySuite) TestGetObjectErrors(c *C) { diff --git a/pkg/api/contenttype.go b/pkg/api/contenttype.go index 8cd164d40..75afd7e64 100644 --- a/pkg/api/contenttype.go +++ b/pkg/api/contenttype.go @@ -16,10 +16,7 @@ package api -import ( - "net/http" - "strings" -) +import "net/http" type contentType int @@ -32,14 +29,17 @@ const ( // Get content type requested from 'Accept' header func getContentType(req *http.Request) contentType { acceptHeader := req.Header.Get("Accept") - switch { - case strings.HasPrefix(acceptHeader, "application/json"): - return jsonContentType - case strings.HasPrefix(acceptHeader, "application/xml"): - return xmlContentType - default: - return unknownContentType + if acceptHeader != "" { + switch { + case acceptHeader == "application/json": + return jsonContentType + case acceptHeader == "application/xml": + return xmlContentType + default: + return unknownContentType + } } + return xmlContentType } // Content type to human readable string