diff options
Diffstat (limited to 'object_test.go')
| -rw-r--r-- | object_test.go | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/object_test.go b/object_test.go index 841d177..73463ad 100644 --- a/object_test.go +++ b/object_test.go @@ -20,6 +20,8 @@ package schwift import ( "bytes" + "io" + "io/ioutil" "net/http" "testing" ) @@ -30,6 +32,7 @@ func TestObjectLifecycle(t *testing.T) { o := c.Object(objectName) expectString(t, o.Name(), objectName) + expectString(t, o.FullName(), c.Name()+"/"+objectName) if o.Container() != c { t.Errorf("expected o.Container() = %#v, got %#v instead\n", c, o.Container()) } @@ -59,3 +62,132 @@ func TestObjectLifecycle(t *testing.T) { expectSuccess(t, err) }) } + +func TestObjectUpload(t *testing.T) { + testWithContainer(t, func(c *Container) { + validateUploadedFile := func(obj *Object, expected []byte) { + str, err := obj.Download(nil, nil).AsString() + expectSuccess(t, err) + expectString(t, str, string(expected)) + obj.Invalidate() + hdr, err := obj.Headers() + expectSuccess(t, err) + expectString(t, hdr.Etag().Get(), etagOf(expected)) + } + + //test upload with bytes.Reader + obj := c.Object("upload1") + err := obj.Upload(bytes.NewReader(objectExampleContent), nil, nil) + expectSuccess(t, err) + validateUploadedFile(obj, objectExampleContent) + + //test upload with bytes.Buffer + obj = c.Object("upload2") + err = obj.Upload(bytes.NewBuffer(objectExampleContent), nil, nil) + expectSuccess(t, err) + validateUploadedFile(obj, objectExampleContent) + + //test upload with opaque io.Reader + obj = c.Object("upload3") + err = obj.Upload(opaqueReader{bytes.NewReader(objectExampleContent)}, nil, nil) + expectSuccess(t, err) + validateUploadedFile(obj, objectExampleContent) + + //test upload with io.Writer + obj = c.Object("upload4") + err = obj.UploadWithWriter(nil, nil, func(w io.Writer) error { + _, err := w.Write(objectExampleContent) + return err + }) + expectSuccess(t, err) + validateUploadedFile(obj, objectExampleContent) + + //test upload with empty reader (should create zero-byte-sized object) + obj = c.Object("upload5") + err = obj.Upload(eofReader{}, nil, nil) + expectSuccess(t, err) + validateUploadedFile(obj, nil) + + //test upload without reader (should create zero-byte-sized object) + obj = c.Object("upload6") + err = obj.Upload(nil, nil, nil) + expectSuccess(t, err) + validateUploadedFile(obj, nil) + }) +} + +type eofReader struct{} + +func (r eofReader) Read([]byte) (int, error) { + return 0, io.EOF +} + +type opaqueReader struct { + b *bytes.Reader +} + +func (r opaqueReader) Read(buf []byte) (int, error) { + return r.b.Read(buf) +} + +func TestObjectDownload(t *testing.T) { + testWithContainer(t, func(c *Container) { + //upload example object + obj := c.Object("example") + err := obj.Upload(bytes.NewReader(objectExampleContent), nil, nil) + expectSuccess(t, err) + + //test download as string + str, err := obj.Download(nil, nil).AsString() + expectSuccess(t, err) + expectString(t, str, string(objectExampleContent)) + + //test download as byte slice + buf, err := obj.Download(nil, nil).AsByteSlice() + expectSuccess(t, err) + expectString(t, string(buf), string(objectExampleContent)) + + //test download as io.ReadCloser slice + reader, err := obj.Download(nil, nil).AsReadCloser() + expectSuccess(t, err) + buf = make([]byte, 4) + _, err = reader.Read(buf) + expectSuccess(t, err) + expectString(t, string(buf), string(objectExampleContent[0:4])) + _, err = reader.Read(buf) + expectSuccess(t, err) + expectString(t, string(buf), string(objectExampleContent[4:8])) + buf, err = ioutil.ReadAll(reader) + expectSuccess(t, err) + expectString(t, string(buf), string(objectExampleContent[8:])) + }) +} + +func TestObjectUpdate(t *testing.T) { + testWithContainer(t, func(c *Container) { + obj := c.Object("example") + + //test that metadata update fails for non-existing object + newHeaders := make(ObjectHeaders) + newHeaders.ContentType().Set("application/json") + err := obj.Update(newHeaders, nil) + expectBool(t, Is(err, http.StatusNotFound), true) + expectError(t, err, "expected 202 response, got 404 instead: <html><h1>Not Found</h1><p>The resource could not be found.</p></html>") + + //create object + err = obj.Upload(nil, nil, nil) + expectSuccess(t, err) + + hdr, err := obj.Headers() + expectSuccess(t, err) + expectString(t, hdr.ContentType().Get(), "application/octet-stream") + + //now the metadata update should work + err = obj.Update(newHeaders, nil) + expectSuccess(t, err) + obj.Invalidate() + hdr, err = obj.Headers() + expectSuccess(t, err) + expectString(t, hdr.ContentType().Get(), "application/json") + }) +} |
