From 82a69d3ab9ee6ec9aa967ccbe52446b499ec3bfd Mon Sep 17 00:00:00 2001 From: "Frederick F. Kautz IV" Date: Sun, 25 Jan 2015 11:22:38 -0800 Subject: [PATCH] Adding initial test suites --- .gitignore | 3 +- pkg/storage/inmemory/inmemory_test.go | 24 ++++++++++ pkg/storage/storage_api_suite.go | 67 +++++++++++++++++++++++++++ pkg/webapi/minioapi/minioapi_test.go | 12 +++-- 4 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 pkg/storage/inmemory/inmemory_test.go create mode 100644 pkg/storage/storage_api_suite.go diff --git a/.gitignore b/.gitignore index 6fa33bc4c..95391d7b0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/*.swp cover.out *~ -minio \ No newline at end of file +minio +**/*.test diff --git a/pkg/storage/inmemory/inmemory_test.go b/pkg/storage/inmemory/inmemory_test.go new file mode 100644 index 000000000..fd8c403ce --- /dev/null +++ b/pkg/storage/inmemory/inmemory_test.go @@ -0,0 +1,24 @@ +package inmemory + +import ( + "testing" + + mstorage "github.com/minio-io/minio/pkg/storage" + + . "gopkg.in/check.v1" +) + +func Test(t *testing.T) { TestingT(t) } + +type MySuite struct{} + +var _ = Suite(&MySuite{}) + +func (s *MySuite) TestAPISuite(c *C) { + create := func() mstorage.Storage { + _, _, store := Start() + return store + } + + mstorage.APITestSuite(c, create) +} diff --git a/pkg/storage/storage_api_suite.go b/pkg/storage/storage_api_suite.go new file mode 100644 index 000000000..992ea9e7f --- /dev/null +++ b/pkg/storage/storage_api_suite.go @@ -0,0 +1,67 @@ +package storage + +import ( + "bytes" + "math/rand" + "strconv" + + . "gopkg.in/check.v1" +) + +func APITestSuite(c *C, create func() Storage) { + testCreateBucket(c, create) + testMultipleObjectCreation(c, create) + testPaging(c, create) + testObjectOverwriteFails(c, create) + testNonExistantBucketOperations(c, create) +} + +func testCreateBucket(c *C, create func() Storage) { + // test create bucket + // test bucket exists + // test no objects exist + // 2x +} + +func testMultipleObjectCreation(c *C, create func() Storage) { + objects := make(map[string][]byte) + storage := create() + storage.StoreBucket("bucket") + for i := 0; i < 10; i++ { + randomPerm := rand.Perm(10) + randomString := "" + for _, num := range randomPerm { + randomString = randomString + strconv.Itoa(num) + } + key := "obj" + strconv.Itoa(i) + objects[key] = []byte(randomString) + err := storage.StoreObject("bucket", key, bytes.NewBufferString(randomString)) + c.Assert(err, IsNil) + } + + // ensure no duplicates + etags := make(map[string]string) + for key, value := range objects { + var byteBuffer bytes.Buffer + storage.CopyObjectToWriter(&byteBuffer, "bucket", key) + c.Assert(bytes.Equal(value, byteBuffer.Bytes()), Equals, true) + + metadata, err := storage.GetObjectMetadata("bucket", key) + c.Assert(err, IsNil) + c.Assert(metadata.Size, Equals, len(value)) + + _, ok := etags[metadata.ETag] + c.Assert(ok, Equals, false) + etags[metadata.ETag] = metadata.ETag + } +} + +func testPaging(c *C, create func() Storage) { +} + +func testObjectOverwriteFails(c *C, create func() Storage) { + // test overwriting object fails +} +func testNonExistantBucketOperations(c *C, create func() Storage) { + // test writing object in non-existant bucket fails +} diff --git a/pkg/webapi/minioapi/minioapi_test.go b/pkg/webapi/minioapi/minioapi_test.go index 881ba505e..8c3143863 100644 --- a/pkg/webapi/minioapi/minioapi_test.go +++ b/pkg/webapi/minioapi/minioapi_test.go @@ -289,6 +289,14 @@ func (s *MySuite) TestShouldNotBeAbleToCreateObjectInNonexistantBucket(c *C) { // TODO Implement } +func (s *MySuite) TestHeadOnObject(c *C) { + // TODO +} + +func (s *MySuite) TestDateFormat(c *C) { + // TODO +} + func verifyHeaders(c *C, header http.Header, date time.Time, size int, contentType string, etag string) { // Verify date c.Assert(header["Last-Modified"][0], Equals, date.Format(time.RFC1123)) @@ -302,7 +310,3 @@ func verifyHeaders(c *C, header http.Header, date time.Time, size int, contentTy // verify etag c.Assert(header["Etag"][0], Equals, etag) } - -// Test date format - -// Test HEAD