From 620435cea6490a763f31cd373aea7635b7d7c1ff Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Thu, 5 Feb 2015 14:05:43 -0800 Subject: [PATCH] Content type is now passed from minioapi to storage --- pkg/api/minioapi/minioapi.go | 2 +- pkg/api/minioapi/minioapi_test.go | 59 +++++++++++++++++++++++++++---- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/pkg/api/minioapi/minioapi.go b/pkg/api/minioapi/minioapi.go index 232edaebd..6fb47c2bf 100644 --- a/pkg/api/minioapi/minioapi.go +++ b/pkg/api/minioapi/minioapi.go @@ -225,7 +225,7 @@ func writeObjectHeaders(w http.ResponseWriter, metadata mstorage.ObjectMetadata) w.Header().Set("Server", "Minio") w.Header().Set("Last-Modified", lastModified) w.Header().Set("Content-Length", strconv.FormatInt(metadata.Size, 10)) - w.Header().Set("Content-Type", "text/plain") + w.Header().Set("Content-Type", metadata.ContentType) w.Header().Set("Connection", "close") } diff --git a/pkg/api/minioapi/minioapi_test.go b/pkg/api/minioapi/minioapi_test.go index 89d6c455b..9ef7d88ab 100644 --- a/pkg/api/minioapi/minioapi_test.go +++ b/pkg/api/minioapi/minioapi_test.go @@ -69,7 +69,7 @@ func (s *MySuite) TestEmptyObject(c *C) { metadata, err := storage.GetObjectMetadata("bucket", "object") c.Assert(err, IsNil) - verifyHeaders(c, response.Header, metadata.Created, 0, "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, 0, "application/octet-stream", metadata.ETag) // TODO Test Headers } @@ -94,7 +94,7 @@ func (s *MySuite) TestObject(c *C) { metadata, err := storage.GetObjectMetadata("bucket", "object") c.Assert(err, IsNil) - verifyHeaders(c, response.Header, metadata.Created, len("hello world"), "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, len("hello world"), "application/octet-stream", metadata.ETag) } func (s *MySuite) TestMultipleObjects(c *C) { @@ -130,7 +130,7 @@ func (s *MySuite) TestMultipleObjects(c *C) { c.Assert(response.StatusCode, Equals, http.StatusOK) // verify headers - verifyHeaders(c, response.Header, metadata.Created, len("hello one"), "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, len("hello one"), "application/octet-stream", metadata.ETag) c.Assert(err, IsNil) // verify response data @@ -149,7 +149,7 @@ func (s *MySuite) TestMultipleObjects(c *C) { c.Assert(response.StatusCode, Equals, http.StatusOK) // verify headers - verifyHeaders(c, response.Header, metadata.Created, len("hello two"), "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, len("hello two"), "application/octet-stream", metadata.ETag) c.Assert(err, IsNil) // verify response data @@ -168,7 +168,7 @@ func (s *MySuite) TestMultipleObjects(c *C) { c.Assert(response.StatusCode, Equals, http.StatusOK) // verify headers - verifyHeaders(c, response.Header, metadata.Created, len("hello three"), "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, len("hello three"), "application/octet-stream", metadata.ETag) c.Assert(err, IsNil) // verify object @@ -208,7 +208,7 @@ func (s *MySuite) TestHeader(c *C) { metadata, err := storage.GetObjectMetadata("bucket", "object") c.Assert(err, IsNil) - verifyHeaders(c, response.Header, metadata.Created, len("hello world"), "text/plain", metadata.ETag) + verifyHeaders(c, response.Header, metadata.Created, len("hello world"), "application/octet-stream", metadata.ETag) } func (s *MySuite) TestPutBucket(c *C) { @@ -414,3 +414,50 @@ func (s *MySuite) TestXMLNameNotInObjectListJson(c *C) { c.Assert(err, IsNil) c.Assert(strings.Contains(string(byteResults), "XML"), Equals, false) } + +func (s *MySuite) TestContentTypePersists(c *C) { + _, _, storage := inmemory.Start() + httpHandler := HttpHandler(storage) + testServer := httptest.NewServer(httpHandler) + defer testServer.Close() + + err := storage.StoreBucket("bucket") + c.Assert(err, IsNil) + + client := http.Client{} + request, err := http.NewRequest("PUT", testServer.URL+"/bucket/one", bytes.NewBufferString("hello world")) + delete(request.Header, "Content-Type") + c.Assert(err, IsNil) + response, err := client.Do(request) + c.Assert(err, IsNil) + c.Assert(response.StatusCode, Equals, http.StatusOK) + + // test head + request, err = http.NewRequest("HEAD", testServer.URL+"/bucket/one", bytes.NewBufferString("")) + c.Assert(err, IsNil) + response, err = client.Do(request) + c.Assert(err, IsNil) + c.Assert(response.Header["Content-Type"][0], Equals, "application/octet-stream") + + // test get object + response, err = http.Get(testServer.URL + "/bucket/one") + c.Assert(response.Header["Content-Type"][0], Equals, "application/octet-stream") + + request, err = http.NewRequest("PUT", testServer.URL+"/bucket/two", bytes.NewBufferString("hello world")) + delete(request.Header, "Content-Type") + request.Header.Add("Content-Type", "application/json") + c.Assert(err, IsNil) + response, err = client.Do(request) + c.Assert(err, IsNil) + c.Assert(response.StatusCode, Equals, http.StatusOK) + + request, err = http.NewRequest("HEAD", testServer.URL+"/bucket/two", bytes.NewBufferString("")) + c.Assert(err, IsNil) + response, err = client.Do(request) + c.Assert(err, IsNil) + c.Assert(response.Header["Content-Type"][0], Equals, "application/octet-stream") + + // test get object + response, err = http.Get(testServer.URL + "/bucket/two") + c.Assert(response.Header["Content-Type"][0], Equals, "application/octet-stream") +}