mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2025-09-20 16:37:57 +08:00
Fix s3 pagination (#3436)
* Revert previous changes * s3: use cursor to track tree traversal fix https://github.com/seaweedfs/seaweedfs/issues/3166 * special cases for empty prefix and empty directory * use constants * address empty folder * undo local changes * fix IsTruncated * adjust counting directories * fix cases when prefix is a directory * s3: handle directory object works for aws --endpoint-url http://127.0.0.1:8333/ s3api list-objects-v2 --bucket test --prefix "fakedir"
This commit is contained in:
@@ -2,6 +2,7 @@ package s3api
|
||||
|
||||
import (
|
||||
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@@ -37,3 +38,54 @@ func TestListObjectsHandler(t *testing.T) {
|
||||
t.Errorf("unexpected output: %s\nexpecting:%s", encoded, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_normalizePrefixMarker(t *testing.T) {
|
||||
type args struct {
|
||||
prefix string
|
||||
marker string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantAlignedDir string
|
||||
wantAlignedPrefix string
|
||||
wantAlignedMarker string
|
||||
}{
|
||||
{"prefix is a directory",
|
||||
args{"/parentDir/data/",
|
||||
""},
|
||||
"parentDir/data",
|
||||
"",
|
||||
"",
|
||||
},
|
||||
{"normal case",
|
||||
args{"/parentDir/data/0",
|
||||
"parentDir/data/0e/0e149049a2137b0cc12e"},
|
||||
"parentDir/data",
|
||||
"0",
|
||||
"0e/0e149049a2137b0cc12e",
|
||||
},
|
||||
{"empty prefix",
|
||||
args{"",
|
||||
"parentDir/data/0e/0e149049a2137b0cc12e"},
|
||||
"",
|
||||
"",
|
||||
"parentDir/data/0e/0e149049a2137b0cc12e",
|
||||
},
|
||||
{"empty directory",
|
||||
args{"parent",
|
||||
"parentDir/data/0e/0e149049a2137b0cc12e"},
|
||||
"",
|
||||
"parent",
|
||||
"parentDir/data/0e/0e149049a2137b0cc12e",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotAlignedDir, gotAlignedPrefix, gotAlignedMarker := normalizePrefixMarker(tt.args.prefix, tt.args.marker)
|
||||
assert.Equalf(t, tt.wantAlignedDir, gotAlignedDir, "normalizePrefixMarker(%v, %v)", tt.args.prefix, tt.args.marker)
|
||||
assert.Equalf(t, tt.wantAlignedPrefix, gotAlignedPrefix, "normalizePrefixMarker(%v, %v)", tt.args.prefix, tt.args.marker)
|
||||
assert.Equalf(t, tt.wantAlignedMarker, gotAlignedMarker, "normalizePrefixMarker(%v, %v)", tt.args.prefix, tt.args.marker)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user