From a5d0bef4e2941fd70f176158dff05799b19fcf04 Mon Sep 17 00:00:00 2001 From: Brendan Ashworth Date: Mon, 7 Mar 2016 19:02:36 -0800 Subject: [PATCH] pkg/fs: test, bench, and drop unnecessary check in ListBuckets There is now a simple test and a benchmark for ListBuckets. I also dropped an unnecessary check that was simply repeated from above, guaranteed to be true. --- pkg/fs/fs-bucket.go | 2 +- pkg/fs/fs-bucket_test.go | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/pkg/fs/fs-bucket.go b/pkg/fs/fs-bucket.go index 1a598e82a..0b8545bb2 100644 --- a/pkg/fs/fs-bucket.go +++ b/pkg/fs/fs-bucket.go @@ -78,7 +78,7 @@ func (fs Filesystem) ListBuckets() ([]BucketMetadata, *probe.Error) { } // If directories are found with odd names, skip them. dirName := strings.ToLower(file.Name()) - if file.IsDir() && !IsValidBucketName(dirName) { + if !IsValidBucketName(dirName) { continue } metadata := BucketMetadata{ diff --git a/pkg/fs/fs-bucket_test.go b/pkg/fs/fs-bucket_test.go index c50ac1eb6..7701f2faf 100644 --- a/pkg/fs/fs-bucket_test.go +++ b/pkg/fs/fs-bucket_test.go @@ -19,10 +19,51 @@ package fs import ( "io/ioutil" "os" + "strconv" "strings" "testing" ) +func TestListBuckets(t *testing.T) { + // Make a temporary directory to use as the filesystem. + directory, fserr := ioutil.TempDir("", "minio-benchmark") + if fserr != nil { + t.Fatal(fserr) + } + defer os.RemoveAll(directory) + + // Create the filesystem. + filesystem, err := New(directory, 0) + if err != nil { + t.Fatal(err) + } + + // Create a few buckets. + for i := 0; i < 10; i++ { + err = filesystem.MakeBucket("testbucket."+strconv.Itoa(i), "public-read") + if err != nil { + t.Fatal(err) + } + } + + // List, and ensure that they are all there. + metadatas, err := filesystem.ListBuckets() + if err != nil { + t.Fatal(err) + } + + if len(metadatas) != 10 { + t.Errorf("incorrect length of metadatas (%i)\n", len(metadatas)) + } + + // Iterate over the buckets, ensuring that the name is correct. + for i := 0; i < len(metadatas); i++ { + if !strings.Contains(metadatas[i].Name, "testbucket") { + t.Fail() + } + } +} + func TestDeleteBucket(t *testing.T) { // Make a temporary directory to use as the filesystem. directory, fserr := ioutil.TempDir("", "minio-benchmark") @@ -44,6 +85,39 @@ func TestDeleteBucket(t *testing.T) { } } +func BenchmarkListBuckets(b *testing.B) { + // Make a temporary directory to use as the filesystem. + directory, fserr := ioutil.TempDir("", "minio-benchmark") + if fserr != nil { + b.Fatal(fserr) + } + defer os.RemoveAll(directory) + + // Create the filesystem. + filesystem, err := New(directory, 0) + if err != nil { + b.Fatal(err) + } + + // Create a few buckets. + for i := 0; i < 20; i++ { + err = filesystem.MakeBucket("bucket."+strconv.Itoa(i), "public-read") + if err != nil { + b.Fatal(err) + } + } + + b.ResetTimer() + + // List the buckets over and over and over. + for i := 0; i < b.N; i++ { + _, err = filesystem.ListBuckets() + if err != nil { + b.Fatal(err) + } + } +} + func BenchmarkDeleteBucket(b *testing.B) { // Make a temporary directory to use as the filesystem. directory, fserr := ioutil.TempDir("", "minio-benchmark")