2023-05-14 01:33:25 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package storage
import (
"bytes"
"testing"
2023-06-14 06:42:38 +03:00
"code.gitea.io/gitea/modules/setting"
2023-05-14 01:33:25 +03:00
"github.com/stretchr/testify/assert"
2024-07-30 22:41:10 +03:00
"github.com/stretchr/testify/require"
2023-05-14 01:33:25 +03:00
)
2023-06-14 06:42:38 +03:00
func testStorageIterator ( t * testing . T , typStr Type , cfg * setting . Storage ) {
2023-05-14 01:33:25 +03:00
l , err := NewStorage ( typStr , cfg )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-05-14 01:33:25 +03:00
testFiles := [ ] [ ] string {
{ "a/1.txt" , "a1" } ,
{ "/a/1.txt" , "aa1" } , // same as above, but with leading slash that will be trim
{ "ab/1.txt" , "ab1" } ,
{ "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 )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-05-14 01:33:25 +03:00
}
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" , "ab/1.txt" } ,
"/" : { "a/1.txt" , "b/1.txt" , "b/2.txt" , "b/3.txt" , "b/x 4.txt" , "ab/1.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
} )
2024-07-30 22:41:10 +03:00
require . NoError ( t , err )
2023-05-14 01:33:25 +03:00
assert . Len ( t , expected , count )
}
}