lib/bucket: utilities for dealing with bucket based backends #3421
This commit is contained in:
parent
df8bdf0dcb
commit
d266a171c2
2 changed files with 314 additions and 0 deletions
148
lib/bucket/bucket_test.go
Normal file
148
lib/bucket/bucket_test.go
Normal file
|
@ -0,0 +1,148 @@
|
|||
package bucket
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestSplit(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
in string
|
||||
wantBucket string
|
||||
wantPath string
|
||||
}{
|
||||
{in: "", wantBucket: "", wantPath: ""},
|
||||
{in: "bucket", wantBucket: "bucket", wantPath: ""},
|
||||
{in: "bucket/path", wantBucket: "bucket", wantPath: "path"},
|
||||
{in: "bucket/path/subdir", wantBucket: "bucket", wantPath: "path/subdir"},
|
||||
} {
|
||||
gotBucket, gotPath := Split(test.in)
|
||||
assert.Equal(t, test.wantBucket, gotBucket, test.in)
|
||||
assert.Equal(t, test.wantPath, gotPath, test.in)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCache(t *testing.T) {
|
||||
c := NewCache()
|
||||
errBoom := errors.New("boom")
|
||||
|
||||
assert.Equal(t, 0, len(c.status))
|
||||
|
||||
// IsDeleted before creation
|
||||
assert.False(t, c.IsDeleted("bucket"))
|
||||
|
||||
// MarkOK
|
||||
|
||||
c.MarkOK("")
|
||||
assert.Equal(t, 0, len(c.status))
|
||||
|
||||
// MarkOK again
|
||||
|
||||
c.MarkOK("bucket")
|
||||
assert.Equal(t, map[string]bool{"bucket": true}, c.status)
|
||||
|
||||
// MarkDeleted
|
||||
|
||||
c.MarkDeleted("bucket")
|
||||
assert.Equal(t, map[string]bool{"bucket": false}, c.status)
|
||||
|
||||
// MarkOK again
|
||||
|
||||
c.MarkOK("bucket")
|
||||
assert.Equal(t, map[string]bool{"bucket": true}, c.status)
|
||||
|
||||
// IsDeleted after creation
|
||||
assert.False(t, c.IsDeleted("bucket"))
|
||||
|
||||
// Create from root
|
||||
|
||||
err := c.Create("", nil, nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true}, c.status)
|
||||
|
||||
// Create bucket that is already OK
|
||||
|
||||
err = c.Create("bucket", nil, nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true}, c.status)
|
||||
|
||||
// Create new bucket
|
||||
|
||||
err = c.Create("bucket2", func() error {
|
||||
return nil
|
||||
}, func() (bool, error) {
|
||||
return true, nil
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true}, c.status)
|
||||
|
||||
// Create bucket that has been deleted with error
|
||||
|
||||
c.status["bucket2"] = false // mark bucket deleted
|
||||
err = c.Create("bucket2", nil, func() (bool, error) {
|
||||
return false, errBoom
|
||||
})
|
||||
assert.Equal(t, errBoom, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": false}, c.status)
|
||||
|
||||
// Create bucket that has been deleted with no error
|
||||
|
||||
err = c.Create("bucket2", nil, func() (bool, error) {
|
||||
return true, nil
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true}, c.status)
|
||||
|
||||
// Create a new bucket with no exists function
|
||||
|
||||
err = c.Create("bucket3", func() error {
|
||||
return nil
|
||||
}, nil)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status)
|
||||
|
||||
// Create a new bucket with no exists function with an error
|
||||
|
||||
err = c.Create("bucket4", func() error {
|
||||
return errBoom
|
||||
}, nil)
|
||||
assert.Equal(t, errBoom, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status)
|
||||
|
||||
// Remove root
|
||||
|
||||
err = c.Remove("", func() error {
|
||||
return nil
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status)
|
||||
|
||||
// Remove existing bucket
|
||||
|
||||
err = c.Remove("bucket3", func() error {
|
||||
return nil
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status)
|
||||
|
||||
// IsDeleted after removal
|
||||
assert.True(t, c.IsDeleted("bucket3"))
|
||||
|
||||
// Remove it again
|
||||
|
||||
err = c.Remove("bucket3", func() error {
|
||||
return errBoom
|
||||
})
|
||||
assert.Equal(t, ErrAlreadyDeleted, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status)
|
||||
|
||||
// Remove bucket with error
|
||||
|
||||
err = c.Remove("bucket2", func() error {
|
||||
return errBoom
|
||||
})
|
||||
assert.Equal(t, errBoom, err)
|
||||
assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue