Merge pull request #287 from harshavardhana/pr_out_restructure_and_use_human_readable_names

master
Harshavardhana 10 years ago
commit 9889796c9c
  1. 14
      pkg/api/minioapi/api_test.go
  2. 6
      pkg/api/minioapi/object_handlers.go
  3. 2
      pkg/api/minioapi/policy_handlers.go
  4. 0
      pkg/api/minioapi/router.go
  5. 12
      pkg/storage/fs/fs_object.go
  6. 4
      pkg/storage/fs/fs_policy.go
  7. 18
      pkg/storage/inmemory/inmemory.go
  8. 19
      pkg/storage/singledisk/singledisk.go
  9. 8
      pkg/storage/storage.go
  10. 42
      pkg/storage/storage_api_suite.go

@ -61,7 +61,7 @@ func (s *MySuite) TestEmptyObject(c *C) {
buffer := bytes.NewBufferString("") buffer := bytes.NewBufferString("")
storage.CreateBucket("bucket") storage.CreateBucket("bucket")
storage.StoreObject("bucket", "object", "", buffer) storage.CreateObject("bucket", "object", "", buffer)
response, err := http.Get(testServer.URL + "/bucket/object") response, err := http.Get(testServer.URL + "/bucket/object")
c.Assert(err, IsNil) c.Assert(err, IsNil)
@ -86,7 +86,7 @@ func (s *MySuite) TestObject(c *C) {
buffer := bytes.NewBufferString("hello world") buffer := bytes.NewBufferString("hello world")
storage.CreateBucket("bucket") storage.CreateBucket("bucket")
storage.StoreObject("bucket", "object", "", buffer) storage.CreateObject("bucket", "object", "", buffer)
response, err := http.Get(testServer.URL + "/bucket/object") response, err := http.Get(testServer.URL + "/bucket/object")
c.Assert(err, IsNil) c.Assert(err, IsNil)
@ -112,9 +112,9 @@ func (s *MySuite) TestMultipleObjects(c *C) {
buffer3 := bytes.NewBufferString("hello three") buffer3 := bytes.NewBufferString("hello three")
storage.CreateBucket("bucket") storage.CreateBucket("bucket")
storage.StoreObject("bucket", "object1", "", buffer1) storage.CreateObject("bucket", "object1", "", buffer1)
storage.StoreObject("bucket", "object2", "", buffer2) storage.CreateObject("bucket", "object2", "", buffer2)
storage.StoreObject("bucket", "object3", "", buffer3) storage.CreateObject("bucket", "object3", "", buffer3)
// test non-existant object // test non-existant object
response, err := http.Get(testServer.URL + "/bucket/object") response, err := http.Get(testServer.URL + "/bucket/object")
@ -204,7 +204,7 @@ func (s *MySuite) TestHeader(c *C) {
buffer := bytes.NewBufferString("hello world") buffer := bytes.NewBufferString("hello world")
storage.CreateBucket("bucket") storage.CreateBucket("bucket")
storage.StoreObject("bucket", "object", "", buffer) storage.CreateObject("bucket", "object", "", buffer)
response, err = http.Get(testServer.URL + "/bucket/object") response, err = http.Get(testServer.URL + "/bucket/object")
c.Assert(err, IsNil) c.Assert(err, IsNil)
@ -285,7 +285,7 @@ func (s *MySuite) TestPutObject(c *C) {
var writer bytes.Buffer var writer bytes.Buffer
storage.CopyObjectToWriter(&writer, "bucket", "two") storage.GetObject(&writer, "bucket", "two")
c.Assert(bytes.Equal(writer.Bytes(), []byte("hello world")), Equals, true) c.Assert(bytes.Equal(writer.Bytes(), []byte("hello world")), Equals, true)

@ -52,7 +52,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques
switch httpRange.start == 0 && httpRange.length == 0 { switch httpRange.start == 0 && httpRange.length == 0 {
case true: case true:
writeObjectHeaders(w, metadata) writeObjectHeaders(w, metadata)
if _, err := server.storage.CopyObjectToWriter(w, bucket, object); err != nil { if _, err := server.storage.GetObject(w, bucket, object); err != nil {
log.Println(err) log.Println(err)
error := errorCodeError(InternalError) error := errorCodeError(InternalError)
errorResponse := getErrorResponse(error, "/"+bucket+"/"+object) errorResponse := getErrorResponse(error, "/"+bucket+"/"+object)
@ -64,7 +64,7 @@ func (server *minioAPI) getObjectHandler(w http.ResponseWriter, req *http.Reques
metadata.Size = httpRange.length metadata.Size = httpRange.length
writeRangeObjectHeaders(w, metadata, httpRange.getContentRange()) writeRangeObjectHeaders(w, metadata, httpRange.getContentRange())
w.WriteHeader(http.StatusPartialContent) w.WriteHeader(http.StatusPartialContent)
_, err := server.storage.CopyObjectToWriterRange(w, bucket, object, httpRange.start, httpRange.length) _, err := server.storage.GetPartialObject(w, bucket, object, httpRange.start, httpRange.length)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
error := errorCodeError(InternalError) error := errorCodeError(InternalError)
@ -165,7 +165,7 @@ func (server *minioAPI) putObjectHandler(w http.ResponseWriter, req *http.Reques
return return
} }
err := server.storage.StoreObject(bucket, object, "", req.Body) err := server.storage.CreateObject(bucket, object, "", req.Body)
switch err := err.(type) { switch err := err.(type) {
case nil: case nil:
w.Header().Set("Server", "Minio") w.Header().Set("Server", "Minio")

@ -43,7 +43,7 @@ func (server *minioAPI) putBucketPolicyHandler(w http.ResponseWriter, req *http.
return return
} }
err := server.storage.StoreBucketPolicy(bucket, policy) err := server.storage.CreateBucketPolicy(bucket, policy)
switch err := err.(type) { switch err := err.(type) {
case nil: case nil:
{ {

@ -31,8 +31,8 @@ import (
/// Object Operations /// Object Operations
// CopyObjectToWriterRange - GET object from range // GetPartialObject - GET object from range
func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object string, start, length int64) (int64, error) { func (storage *Storage) GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error) {
// validate bucket // validate bucket
if mstorage.IsValidBucket(bucket) == false { if mstorage.IsValidBucket(bucket) == false {
return 0, mstorage.BucketNameInvalid{Bucket: bucket} return 0, mstorage.BucketNameInvalid{Bucket: bucket}
@ -79,8 +79,8 @@ func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object stri
return count, nil return count, nil
} }
// CopyObjectToWriter - GET object // GetObject - GET object from key
func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { func (storage *Storage) GetObject(w io.Writer, bucket string, object string) (int64, error) {
// validate bucket // validate bucket
if mstorage.IsValidBucket(bucket) == false { if mstorage.IsValidBucket(bucket) == false {
return 0, mstorage.BucketNameInvalid{Bucket: bucket} return 0, mstorage.BucketNameInvalid{Bucket: bucket}
@ -181,8 +181,8 @@ func (storage *Storage) GetObjectMetadata(bucket, object, prefix string) (mstora
return metadata, nil return metadata, nil
} }
// StoreObject - PUT object // CreateObject - PUT object
func (storage *Storage) StoreObject(bucket, key, contentType string, data io.Reader) error { func (storage *Storage) CreateObject(bucket, key, contentType string, data io.Reader) error {
// TODO Commits should stage then move instead of writing directly // TODO Commits should stage then move instead of writing directly
storage.lock.Lock() storage.lock.Lock()
defer storage.lock.Unlock() defer storage.lock.Unlock()

@ -69,8 +69,8 @@ func (storage *Storage) GetBucketPolicy(bucket string) (mstorage.BucketPolicy, e
} }
// StoreBucketPolicy - PUT bucket policy // CreateBucketPolicy - PUT bucket policy
func (storage *Storage) StoreBucketPolicy(bucket string, p mstorage.BucketPolicy) error { func (storage *Storage) CreateBucketPolicy(bucket string, p mstorage.BucketPolicy) error {
storage.lock.Lock() storage.lock.Lock()
defer storage.lock.Unlock() defer storage.lock.Unlock()

@ -64,8 +64,8 @@ func start(ctrlChannel <-chan string, errorChannel chan<- error) {
close(errorChannel) close(errorChannel)
} }
// CopyObjectToWriter - GET object from memory buffer // GetObject - GET object from memory buffer
func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { func (storage *Storage) GetObject(w io.Writer, bucket string, object string) (int64, error) {
// get object // get object
key := object key := object
if val, ok := storage.objectdata[key]; ok { if val, ok := storage.objectdata[key]; ok {
@ -76,13 +76,13 @@ func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object st
return 0, mstorage.ObjectNotFound{Bucket: bucket, Object: object} return 0, mstorage.ObjectNotFound{Bucket: bucket, Object: object}
} }
// CopyObjectToWriterRange - GET object from memory buffer range // GetPartialObject - GET object from memory buffer range
func (storage *Storage) CopyObjectToWriterRange(w io.Writer, bucket, object string, start, end int64) (int64, error) { func (storage *Storage) GetPartialObject(w io.Writer, bucket, object string, start, end int64) (int64, error) {
return 0, mstorage.APINotImplemented{API: "GetObjectRange"} return 0, mstorage.APINotImplemented{API: "GetPartialObject"}
} }
// StoreBucketPolicy - Not implemented // CreateBucketPolicy - Not implemented
func (storage *Storage) StoreBucketPolicy(bucket string, policy mstorage.BucketPolicy) error { func (storage *Storage) CreateBucketPolicy(bucket string, policy mstorage.BucketPolicy) error {
return mstorage.APINotImplemented{API: "PutBucketPolicy"} return mstorage.APINotImplemented{API: "PutBucketPolicy"}
} }
@ -91,8 +91,8 @@ func (storage *Storage) GetBucketPolicy(bucket string) (mstorage.BucketPolicy, e
return mstorage.BucketPolicy{}, mstorage.APINotImplemented{API: "GetBucketPolicy"} return mstorage.BucketPolicy{}, mstorage.APINotImplemented{API: "GetBucketPolicy"}
} }
// StoreObject - PUT object to memory buffer // CreateObject - PUT object to memory buffer
func (storage *Storage) StoreObject(bucket, key, contentType string, data io.Reader) error { func (storage *Storage) CreateObject(bucket, key, contentType string, data io.Reader) error {
storage.lock.Lock() storage.lock.Lock()
defer storage.lock.Unlock() defer storage.lock.Unlock()

@ -53,8 +53,8 @@ func (diskStorage StorageDriver) CreateBucket(bucket string) error {
return errors.New("Not Implemented") return errors.New("Not Implemented")
} }
// StoreBucketPolicy sets a bucket's access policy // CreateBucketPolicy sets a bucket's access policy
func (diskStorage StorageDriver) StoreBucketPolicy(bucket string, p storage.BucketPolicy) error { func (diskStorage StorageDriver) CreateBucketPolicy(bucket string, p storage.BucketPolicy) error {
return errors.New("Not Implemented") return errors.New("Not Implemented")
} }
@ -63,13 +63,18 @@ func (diskStorage StorageDriver) GetBucketPolicy(bucket string) (storage.BucketP
return storage.BucketPolicy{}, errors.New("Not Implemented") return storage.BucketPolicy{}, errors.New("Not Implemented")
} }
// CopyObjectToWriter retrieves an object and writes it to a writer // GetObject retrieves an object and writes it to a writer
func (diskStorage StorageDriver) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) { func (diskStorage StorageDriver) GetObject(w io.Writer, bucket, object string) (int64, error) {
return 0, errors.New("Not Implemented")
}
// GetPartialObject retrieves an object and writes it to a writer
func (diskStorage StorageDriver) GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error) {
return 0, errors.New("Not Implemented") return 0, errors.New("Not Implemented")
} }
// GetObjectMetadata retrieves an object's metadata // GetObjectMetadata retrieves an object's metadata
func (diskStorage StorageDriver) GetObjectMetadata(bucket string, object string, prefix string) (storage.ObjectMetadata, error) { func (diskStorage StorageDriver) GetObjectMetadata(bucket, object string, prefix string) (storage.ObjectMetadata, error) {
return storage.ObjectMetadata{}, errors.New("Not Implemented") return storage.ObjectMetadata{}, errors.New("Not Implemented")
} }
@ -78,7 +83,7 @@ func (diskStorage StorageDriver) ListObjects(bucket string, resources storage.Bu
return nil, storage.BucketResourcesMetadata{}, errors.New("Not Implemented") return nil, storage.BucketResourcesMetadata{}, errors.New("Not Implemented")
} }
// StoreObject creates a new object // CreateObject creates a new object
func (diskStorage StorageDriver) StoreObject(bucket string, key string, contentType string, data io.Reader) error { func (diskStorage StorageDriver) CreateObject(bucket string, key string, contentType string, data io.Reader) error {
return errors.New("Not Implemented") return errors.New("Not Implemented")
} }

@ -28,15 +28,15 @@ type Storage interface {
// Bucket Operations // Bucket Operations
ListBuckets() ([]BucketMetadata, error) ListBuckets() ([]BucketMetadata, error)
CreateBucket(bucket string) error CreateBucket(bucket string) error
StoreBucketPolicy(bucket string, p BucketPolicy) error CreateBucketPolicy(bucket string, p BucketPolicy) error
GetBucketPolicy(bucket string) (BucketPolicy, error) GetBucketPolicy(bucket string) (BucketPolicy, error)
// Object Operations // Object Operations
CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) GetObject(w io.Writer, bucket, object string) (int64, error)
CopyObjectToWriterRange(w io.Writer, bucket string, object string, start, length int64) (int64, error) GetPartialObject(w io.Writer, bucket, object string, start, length int64) (int64, error)
GetObjectMetadata(bucket string, object string, prefix string) (ObjectMetadata, error) GetObjectMetadata(bucket string, object string, prefix string) (ObjectMetadata, error)
ListObjects(bucket string, resources BucketResourcesMetadata) ([]ObjectMetadata, BucketResourcesMetadata, error) ListObjects(bucket string, resources BucketResourcesMetadata) ([]ObjectMetadata, BucketResourcesMetadata, error)
StoreObject(bucket string, key string, contentType string, data io.Reader) error CreateObject(bucket string, key string, contentType string, data io.Reader) error
} }
// BucketMetadata - name and create date // BucketMetadata - name and create date

@ -58,7 +58,7 @@ func testMultipleObjectCreation(c *check.C, create func() Storage) {
} }
key := "obj" + strconv.Itoa(i) key := "obj" + strconv.Itoa(i)
objects[key] = []byte(randomString) objects[key] = []byte(randomString)
err := storage.StoreObject("bucket", key, "", bytes.NewBufferString(randomString)) err := storage.CreateObject("bucket", key, "", bytes.NewBufferString(randomString))
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
} }
@ -66,7 +66,7 @@ func testMultipleObjectCreation(c *check.C, create func() Storage) {
etags := make(map[string]string) etags := make(map[string]string)
for key, value := range objects { for key, value := range objects {
var byteBuffer bytes.Buffer var byteBuffer bytes.Buffer
storage.CopyObjectToWriter(&byteBuffer, "bucket", key) storage.GetObject(&byteBuffer, "bucket", key)
c.Assert(bytes.Equal(value, byteBuffer.Bytes()), check.Equals, true) c.Assert(bytes.Equal(value, byteBuffer.Bytes()), check.Equals, true)
metadata, err := storage.GetObjectMetadata("bucket", key, "") metadata, err := storage.GetObjectMetadata("bucket", key, "")
@ -90,7 +90,7 @@ func testPaging(c *check.C, create func() Storage) {
// check before paging occurs // check before paging occurs
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
key := "obj" + strconv.Itoa(i) key := "obj" + strconv.Itoa(i)
storage.StoreObject("bucket", key, "", bytes.NewBufferString(key)) storage.CreateObject("bucket", key, "", bytes.NewBufferString(key))
resources.Maxkeys = 5 resources.Maxkeys = 5
objects, resources, err = storage.ListObjects("bucket", resources) objects, resources, err = storage.ListObjects("bucket", resources)
c.Assert(len(objects), check.Equals, i+1) c.Assert(len(objects), check.Equals, i+1)
@ -100,7 +100,7 @@ func testPaging(c *check.C, create func() Storage) {
// check after paging occurs pages work // check after paging occurs pages work
for i := 6; i <= 10; i++ { for i := 6; i <= 10; i++ {
key := "obj" + strconv.Itoa(i) key := "obj" + strconv.Itoa(i)
storage.StoreObject("bucket", key, "", bytes.NewBufferString(key)) storage.CreateObject("bucket", key, "", bytes.NewBufferString(key))
resources.Maxkeys = 5 resources.Maxkeys = 5
objects, resources, err = storage.ListObjects("bucket", resources) objects, resources, err = storage.ListObjects("bucket", resources)
c.Assert(len(objects), check.Equals, 5) c.Assert(len(objects), check.Equals, 5)
@ -109,8 +109,8 @@ func testPaging(c *check.C, create func() Storage) {
} }
// check paging with prefix at end returns less objects // check paging with prefix at end returns less objects
{ {
storage.StoreObject("bucket", "newPrefix", "", bytes.NewBufferString("prefix1")) storage.CreateObject("bucket", "newPrefix", "", bytes.NewBufferString("prefix1"))
storage.StoreObject("bucket", "newPrefix2", "", bytes.NewBufferString("prefix2")) storage.CreateObject("bucket", "newPrefix2", "", bytes.NewBufferString("prefix2"))
resources.Prefix = "new" resources.Prefix = "new"
resources.Maxkeys = 5 resources.Maxkeys = 5
objects, resources, err = storage.ListObjects("bucket", resources) objects, resources, err = storage.ListObjects("bucket", resources)
@ -131,8 +131,8 @@ func testPaging(c *check.C, create func() Storage) {
// check delimited results with delimiter and prefix // check delimited results with delimiter and prefix
{ {
storage.StoreObject("bucket", "this/is/delimited", "", bytes.NewBufferString("prefix1")) storage.CreateObject("bucket", "this/is/delimited", "", bytes.NewBufferString("prefix1"))
storage.StoreObject("bucket", "this/is/also/delimited", "", bytes.NewBufferString("prefix2")) storage.CreateObject("bucket", "this/is/also/delimited", "", bytes.NewBufferString("prefix2"))
var prefixes []string var prefixes []string
resources.CommonPrefixes = prefixes // allocate new everytime resources.CommonPrefixes = prefixes // allocate new everytime
resources.Delimiter = "/" resources.Delimiter = "/"
@ -184,12 +184,12 @@ func testPaging(c *check.C, create func() Storage) {
func testObjectOverwriteFails(c *check.C, create func() Storage) { func testObjectOverwriteFails(c *check.C, create func() Storage) {
storage := create() storage := create()
storage.CreateBucket("bucket") storage.CreateBucket("bucket")
err := storage.StoreObject("bucket", "object", "", bytes.NewBufferString("one")) err := storage.CreateObject("bucket", "object", "", bytes.NewBufferString("one"))
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
err = storage.StoreObject("bucket", "object", "", bytes.NewBufferString("three")) err = storage.CreateObject("bucket", "object", "", bytes.NewBufferString("three"))
c.Assert(err, check.Not(check.IsNil)) c.Assert(err, check.Not(check.IsNil))
var bytesBuffer bytes.Buffer var bytesBuffer bytes.Buffer
length, err := storage.CopyObjectToWriter(&bytesBuffer, "bucket", "object") length, err := storage.GetObject(&bytesBuffer, "bucket", "object")
c.Assert(length, check.Equals, int64(len("one"))) c.Assert(length, check.Equals, int64(len("one")))
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
c.Assert(string(bytesBuffer.Bytes()), check.Equals, "one") c.Assert(string(bytesBuffer.Bytes()), check.Equals, "one")
@ -197,7 +197,7 @@ func testObjectOverwriteFails(c *check.C, create func() Storage) {
func testNonExistantBucketOperations(c *check.C, create func() Storage) { func testNonExistantBucketOperations(c *check.C, create func() Storage) {
storage := create() storage := create()
err := storage.StoreObject("bucket", "object", "", bytes.NewBufferString("one")) err := storage.CreateObject("bucket", "object", "", bytes.NewBufferString("one"))
c.Assert(err, check.Not(check.IsNil)) c.Assert(err, check.Not(check.IsNil))
} }
@ -213,10 +213,10 @@ func testPutObjectInSubdir(c *check.C, create func() Storage) {
storage := create() storage := create()
err := storage.CreateBucket("bucket") err := storage.CreateBucket("bucket")
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
err = storage.StoreObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) err = storage.CreateObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world"))
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
var bytesBuffer bytes.Buffer var bytesBuffer bytes.Buffer
length, err := storage.CopyObjectToWriter(&bytesBuffer, "bucket", "dir1/dir2/object") length, err := storage.GetObject(&bytesBuffer, "bucket", "dir1/dir2/object")
c.Assert(len(bytesBuffer.Bytes()), check.Equals, len("hello world")) c.Assert(len(bytesBuffer.Bytes()), check.Equals, len("hello world"))
c.Assert(int64(len(bytesBuffer.Bytes())), check.Equals, length) c.Assert(int64(len(bytesBuffer.Bytes())), check.Equals, length)
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
@ -286,7 +286,7 @@ func testNonExistantObjectInBucket(c *check.C, create func() Storage) {
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
var byteBuffer bytes.Buffer var byteBuffer bytes.Buffer
length, err := storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1") length, err := storage.GetObject(&byteBuffer, "bucket", "dir1")
c.Assert(length, check.Equals, int64(0)) c.Assert(length, check.Equals, int64(0))
c.Assert(err, check.Not(check.IsNil)) c.Assert(err, check.Not(check.IsNil))
c.Assert(len(byteBuffer.Bytes()), check.Equals, 0) c.Assert(len(byteBuffer.Bytes()), check.Equals, 0)
@ -307,11 +307,11 @@ func testGetDirectoryReturnsObjectNotFound(c *check.C, create func() Storage) {
err := storage.CreateBucket("bucket") err := storage.CreateBucket("bucket")
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
err = storage.StoreObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world")) err = storage.CreateObject("bucket", "dir1/dir2/object", "", bytes.NewBufferString("hello world"))
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
var byteBuffer bytes.Buffer var byteBuffer bytes.Buffer
length, err := storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1") length, err := storage.GetObject(&byteBuffer, "bucket", "dir1")
c.Assert(length, check.Equals, int64(0)) c.Assert(length, check.Equals, int64(0))
switch err := err.(type) { switch err := err.(type) {
case ObjectNotFound: case ObjectNotFound:
@ -328,7 +328,7 @@ func testGetDirectoryReturnsObjectNotFound(c *check.C, create func() Storage) {
c.Assert(len(byteBuffer.Bytes()), check.Equals, 0) c.Assert(len(byteBuffer.Bytes()), check.Equals, 0)
var byteBuffer2 bytes.Buffer var byteBuffer2 bytes.Buffer
length, err = storage.CopyObjectToWriter(&byteBuffer, "bucket", "dir1/") length, err = storage.GetObject(&byteBuffer, "bucket", "dir1/")
c.Assert(length, check.Equals, int64(0)) c.Assert(length, check.Equals, int64(0))
switch err := err.(type) { switch err := err.(type) {
case ObjectNotFound: case ObjectNotFound:
@ -351,19 +351,19 @@ func testDefaultContentType(c *check.C, create func() Storage) {
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
// test empty // test empty
err = storage.StoreObject("bucket", "one", "", bytes.NewBufferString("one")) err = storage.CreateObject("bucket", "one", "", bytes.NewBufferString("one"))
metadata, err := storage.GetObjectMetadata("bucket", "one", "") metadata, err := storage.GetObjectMetadata("bucket", "one", "")
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
c.Assert(metadata.ContentType, check.Equals, "application/octet-stream") c.Assert(metadata.ContentType, check.Equals, "application/octet-stream")
// test custom // test custom
storage.StoreObject("bucket", "two", "application/text", bytes.NewBufferString("two")) storage.CreateObject("bucket", "two", "application/text", bytes.NewBufferString("two"))
metadata, err = storage.GetObjectMetadata("bucket", "two", "") metadata, err = storage.GetObjectMetadata("bucket", "two", "")
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
c.Assert(metadata.ContentType, check.Equals, "application/text") c.Assert(metadata.ContentType, check.Equals, "application/text")
// test trim space // test trim space
storage.StoreObject("bucket", "three", "\tapplication/json ", bytes.NewBufferString("three")) storage.CreateObject("bucket", "three", "\tapplication/json ", bytes.NewBufferString("three"))
metadata, err = storage.GetObjectMetadata("bucket", "three", "") metadata, err = storage.GetObjectMetadata("bucket", "three", "")
c.Assert(err, check.IsNil) c.Assert(err, check.IsNil)
c.Assert(metadata.ContentType, check.Equals, "application/json") c.Assert(metadata.ContentType, check.Equals, "application/json")

Loading…
Cancel
Save