diff options
author | FuXiaoHei <fuxiaohei@vip.qq.com> | 2023-03-13 18:23:51 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-13 18:23:51 +0800 |
commit | cdc9e91750036fc370db65a44618f3139db11ae1 (patch) | |
tree | 8a7ae4158086eb157d8aaa5689ff164c8b2d4d78 /modules/storage/local_test.go | |
parent | 757b4c17e900f1d11a81bc9467d90e6c245ee8f2 (diff) | |
download | gitea-cdc9e91750036fc370db65a44618f3139db11ae1.tar.gz gitea-cdc9e91750036fc370db65a44618f3139db11ae1.zip |
add path prefix to ObjectStorage.Iterator (#23332)
Support to iterator subdirectory in ObjectStorage for
ObjectStorage.Iterator method.
It's required for https://github.com/go-gitea/gitea/pull/22738 to make
artifact files cleanable.
---------
Co-authored-by: Jason Song <i@wolfogre.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'modules/storage/local_test.go')
-rw-r--r-- | modules/storage/local_test.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/storage/local_test.go b/modules/storage/local_test.go index 994c54e859..2b112df8f1 100644 --- a/modules/storage/local_test.go +++ b/modules/storage/local_test.go @@ -4,6 +4,10 @@ package storage import ( + "bytes" + "context" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/assert" @@ -50,3 +54,41 @@ func TestBuildLocalPath(t *testing.T) { }) } } + +func TestLocalStorageIterator(t *testing.T) { + dir := filepath.Join(os.TempDir(), "TestLocalStorageIteratorTestDir") + l, err := NewLocalStorage(context.Background(), LocalStorageConfig{Path: dir}) + assert.NoError(t, err) + + testFiles := [][]string{ + {"a/1.txt", "a1"}, + {"/a/1.txt", "aa1"}, // same as above, but with leading slash that will be trim + {"b/1.txt", "b1"}, + {"b/2.txt", "b2"}, + {"b/3.txt", "b3"}, + {"b/x 4.txt", "bx4"}, + } + for _, f := range testFiles { + _, err = l.Save(f[0], bytes.NewBufferString(f[1]), -1) + assert.NoError(t, err) + } + + expectedList := map[string][]string{ + "a": {"a/1.txt"}, + "b": {"b/1.txt", "b/2.txt", "b/3.txt", "b/x 4.txt"}, + "": {"a/1.txt", "b/1.txt", "b/2.txt", "b/3.txt", "b/x 4.txt"}, + "/": {"a/1.txt", "b/1.txt", "b/2.txt", "b/3.txt", "b/x 4.txt"}, + "a/b/../../a": {"a/1.txt"}, + } + for dir, expected := range expectedList { + count := 0 + err = l.IterateObjects(dir, func(path string, f Object) error { + defer f.Close() + assert.Contains(t, expected, path) + count++ + return nil + }) + assert.NoError(t, err) + assert.Equal(t, count, len(expected)) + } +} |