github.com/xhghs/rclone@v1.51.1-0.20200430155106-e186a28cced8/lib/bucket/bucket_test.go (about) 1 package bucket 2 3 import ( 4 "errors" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestSplit(t *testing.T) { 11 for _, test := range []struct { 12 in string 13 wantBucket string 14 wantPath string 15 }{ 16 {in: "", wantBucket: "", wantPath: ""}, 17 {in: "bucket", wantBucket: "bucket", wantPath: ""}, 18 {in: "bucket/path", wantBucket: "bucket", wantPath: "path"}, 19 {in: "bucket/path/subdir", wantBucket: "bucket", wantPath: "path/subdir"}, 20 } { 21 gotBucket, gotPath := Split(test.in) 22 assert.Equal(t, test.wantBucket, gotBucket, test.in) 23 assert.Equal(t, test.wantPath, gotPath, test.in) 24 } 25 } 26 27 func TestCache(t *testing.T) { 28 c := NewCache() 29 errBoom := errors.New("boom") 30 31 assert.Equal(t, 0, len(c.status)) 32 33 // IsDeleted before creation 34 assert.False(t, c.IsDeleted("bucket")) 35 36 // MarkOK 37 38 c.MarkOK("") 39 assert.Equal(t, 0, len(c.status)) 40 41 // MarkOK again 42 43 c.MarkOK("bucket") 44 assert.Equal(t, map[string]bool{"bucket": true}, c.status) 45 46 // MarkDeleted 47 48 c.MarkDeleted("bucket") 49 assert.Equal(t, map[string]bool{"bucket": false}, c.status) 50 51 // MarkOK again 52 53 c.MarkOK("bucket") 54 assert.Equal(t, map[string]bool{"bucket": true}, c.status) 55 56 // IsDeleted after creation 57 assert.False(t, c.IsDeleted("bucket")) 58 59 // Create from root 60 61 err := c.Create("", nil, nil) 62 assert.NoError(t, err) 63 assert.Equal(t, map[string]bool{"bucket": true}, c.status) 64 65 // Create bucket that is already OK 66 67 err = c.Create("bucket", nil, nil) 68 assert.NoError(t, err) 69 assert.Equal(t, map[string]bool{"bucket": true}, c.status) 70 71 // Create new bucket 72 73 err = c.Create("bucket2", func() error { 74 return nil 75 }, func() (bool, error) { 76 return true, nil 77 }) 78 assert.NoError(t, err) 79 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true}, c.status) 80 81 // Create bucket that has been deleted with error 82 83 c.status["bucket2"] = false // mark bucket deleted 84 err = c.Create("bucket2", nil, func() (bool, error) { 85 return false, errBoom 86 }) 87 assert.Equal(t, errBoom, err) 88 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": false}, c.status) 89 90 // Create bucket that has been deleted with no error 91 92 err = c.Create("bucket2", nil, func() (bool, error) { 93 return true, nil 94 }) 95 assert.NoError(t, err) 96 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true}, c.status) 97 98 // Create a new bucket with no exists function 99 100 err = c.Create("bucket3", func() error { 101 return nil 102 }, nil) 103 assert.NoError(t, err) 104 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status) 105 106 // Create a new bucket with no exists function with an error 107 108 err = c.Create("bucket4", func() error { 109 return errBoom 110 }, nil) 111 assert.Equal(t, errBoom, err) 112 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status) 113 114 // Remove root 115 116 err = c.Remove("", func() error { 117 return nil 118 }) 119 assert.NoError(t, err) 120 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": true}, c.status) 121 122 // Remove existing bucket 123 124 err = c.Remove("bucket3", func() error { 125 return nil 126 }) 127 assert.NoError(t, err) 128 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status) 129 130 // IsDeleted after removal 131 assert.True(t, c.IsDeleted("bucket3")) 132 133 // Remove it again 134 135 err = c.Remove("bucket3", func() error { 136 return errBoom 137 }) 138 assert.Equal(t, ErrAlreadyDeleted, err) 139 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status) 140 141 // Remove bucket with error 142 143 err = c.Remove("bucket2", func() error { 144 return errBoom 145 }) 146 assert.Equal(t, errBoom, err) 147 assert.Equal(t, map[string]bool{"bucket": true, "bucket2": true, "bucket3": false}, c.status) 148 }