mirror of
https://github.com/minio/minio.git
synced 2025-11-07 04:42:56 -05:00
Now MinioAPI handles Content-MD5 set during putObject()
- This change also facilitates proper error response
in case of md5 mismatch or corruption
- TODO a test function needs to be implemented
This commit is contained in:
@@ -61,7 +61,7 @@ func (s *MySuite) TestEmptyObject(c *C) {
|
||||
|
||||
buffer := bytes.NewBufferString("")
|
||||
storage.CreateBucket("bucket")
|
||||
storage.CreateObject("bucket", "object", "", buffer)
|
||||
storage.CreateObject("bucket", "object", "", "", buffer)
|
||||
|
||||
response, err := http.Get(testServer.URL + "/bucket/object")
|
||||
c.Assert(err, IsNil)
|
||||
@@ -86,7 +86,7 @@ func (s *MySuite) TestObject(c *C) {
|
||||
|
||||
buffer := bytes.NewBufferString("hello world")
|
||||
storage.CreateBucket("bucket")
|
||||
storage.CreateObject("bucket", "object", "", buffer)
|
||||
storage.CreateObject("bucket", "object", "", "", buffer)
|
||||
|
||||
response, err := http.Get(testServer.URL + "/bucket/object")
|
||||
c.Assert(err, IsNil)
|
||||
@@ -112,9 +112,9 @@ func (s *MySuite) TestMultipleObjects(c *C) {
|
||||
buffer3 := bytes.NewBufferString("hello three")
|
||||
|
||||
storage.CreateBucket("bucket")
|
||||
storage.CreateObject("bucket", "object1", "", buffer1)
|
||||
storage.CreateObject("bucket", "object2", "", buffer2)
|
||||
storage.CreateObject("bucket", "object3", "", buffer3)
|
||||
storage.CreateObject("bucket", "object1", "", "", buffer1)
|
||||
storage.CreateObject("bucket", "object2", "", "", buffer2)
|
||||
storage.CreateObject("bucket", "object3", "", "", buffer3)
|
||||
|
||||
// test non-existant object
|
||||
response, err := http.Get(testServer.URL + "/bucket/object")
|
||||
@@ -204,7 +204,7 @@ func (s *MySuite) TestHeader(c *C) {
|
||||
|
||||
buffer := bytes.NewBufferString("hello world")
|
||||
storage.CreateBucket("bucket")
|
||||
storage.CreateObject("bucket", "object", "", buffer)
|
||||
storage.CreateObject("bucket", "object", "", "", buffer)
|
||||
|
||||
response, err = http.Get(testServer.URL + "/bucket/object")
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
@@ -165,7 +165,9 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques
|
||||
return
|
||||
}
|
||||
|
||||
err := server.storage.CreateObject(bucket, object, "", req.Body)
|
||||
// get Content-MD5 sent by client
|
||||
md5 := req.Header.Get("Content-MD5")
|
||||
err := server.storage.CreateObject(bucket, object, "", md5, req.Body)
|
||||
switch err := err.(type) {
|
||||
case nil:
|
||||
w.Header().Set("Server", "Minio")
|
||||
@@ -200,6 +202,20 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques
|
||||
w.WriteHeader(error.HTTPStatusCode)
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.BadDigest:
|
||||
{
|
||||
error := errorCodeError(BadDigest)
|
||||
errorResponse := getErrorResponse(error, "/"+bucket+"/"+object)
|
||||
w.WriteHeader(error.HTTPStatusCode)
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.InvalidDigest:
|
||||
{
|
||||
error := errorCodeError(InvalidDigest)
|
||||
errorResponse := getErrorResponse(error, "/"+bucket+"/"+object)
|
||||
w.WriteHeader(error.HTTPStatusCode)
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,6 +66,13 @@ func (server *minioAPI) putBucketPolicyHandler(w http.ResponseWriter, req *http.
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.BackendCorrupted:
|
||||
{
|
||||
log.Println(err)
|
||||
error := errorCodeError(InternalError)
|
||||
errorResponse := getErrorResponse(error, bucket)
|
||||
w.WriteHeader(error.HTTPStatusCode)
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.ImplementationError:
|
||||
{
|
||||
log.Println(err)
|
||||
@@ -123,6 +130,13 @@ func (server *minioAPI) getBucketPolicyHandler(w http.ResponseWriter, req *http.
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.BackendCorrupted:
|
||||
{
|
||||
log.Println(err)
|
||||
error := errorCodeError(InternalError)
|
||||
errorResponse := getErrorResponse(error, bucket)
|
||||
w.WriteHeader(error.HTTPStatusCode)
|
||||
w.Write(writeErrorResponse(w, errorResponse, acceptsContentType))
|
||||
}
|
||||
case mstorage.ImplementationError:
|
||||
{
|
||||
log.Println(err)
|
||||
|
||||
Reference in New Issue
Block a user