Add tests to cover #1854

These tests show issues when with foo/repo and foo-bar/repo are
compared, because - is below / in the ascii table and affects path based
sorting.

Signed-off-by: James Hewitt <james.hewitt@uk.ibm.com>
This commit is contained in:
James Hewitt 2023-08-21 12:57:06 +01:00
parent 409c92229c
commit 09fbf5d9ea
No known key found for this signature in database
GPG key ID: EA6C3C654B6193E4

View file

@ -524,6 +524,8 @@ func TestWalk(t *testing.T) {
fileset := []string{ fileset := []string{
"/file1", "/file1",
"/folder1-suffix",
"/folder1-suffix/file1",
"/folder1/file1", "/folder1/file1",
"/folder2/file1", "/folder2/file1",
"/folder3/subfolder1/subfolder1/file1", "/folder3/subfolder1/subfolder1/file1",
@ -557,6 +559,8 @@ func TestWalk(t *testing.T) {
} }
}() }()
noopFn := func(fileInfo storagedriver.FileInfo) error { return nil }
tcs := []struct { tcs := []struct {
name string name string
fn storagedriver.WalkFn fn storagedriver.WalkFn
@ -567,9 +571,11 @@ func TestWalk(t *testing.T) {
}{ }{
{ {
name: "walk all", name: "walk all",
fn: func(fileInfo storagedriver.FileInfo) error { return nil }, fn: noopFn,
expected: []string{ expected: []string{
"/file1", "/file1",
"/folder1-suffix",
"/folder1-suffix/file1",
"/folder1", "/folder1",
"/folder1/file1", "/folder1/file1",
"/folder2", "/folder2",
@ -598,6 +604,8 @@ func TestWalk(t *testing.T) {
}, },
expected: []string{ expected: []string{
"/file1", "/file1",
"/folder1-suffix",
"/folder1-suffix/file1",
"/folder1", "/folder1",
"/folder1/file1", "/folder1/file1",
"/folder2", "/folder2",
@ -608,25 +616,9 @@ func TestWalk(t *testing.T) {
"/folder4/file1", "/folder4/file1",
}, },
}, },
{
name: "stop early",
fn: func(fileInfo storagedriver.FileInfo) error {
if fileInfo.Path() == "/folder1/file1" {
return storagedriver.ErrFilledBuffer
}
return nil
},
expected: []string{
"/file1",
"/folder1",
"/folder1/file1",
// stop early
},
err: false,
},
{ {
name: "start late without from", name: "start late without from",
fn: func(fileInfo storagedriver.FileInfo) error { return nil }, fn: noopFn,
options: []func(*storagedriver.WalkOptions){ options: []func(*storagedriver.WalkOptions){
storagedriver.WithStartAfterHint("/folder3/subfolder1/subfolder1/file1"), storagedriver.WithStartAfterHint("/folder3/subfolder1/subfolder1/file1"),
}, },
@ -643,7 +635,7 @@ func TestWalk(t *testing.T) {
}, },
{ {
name: "start late with from", name: "start late with from",
fn: func(fileInfo storagedriver.FileInfo) error { return nil }, fn: noopFn,
from: "/folder3", from: "/folder3",
options: []func(*storagedriver.WalkOptions){ options: []func(*storagedriver.WalkOptions){
storagedriver.WithStartAfterHint("/folder3/subfolder1/subfolder1/file1"), storagedriver.WithStartAfterHint("/folder3/subfolder1/subfolder1/file1"),
@ -656,6 +648,69 @@ func TestWalk(t *testing.T) {
}, },
err: false, err: false,
}, },
{
name: "start after from",
fn: noopFn,
from: "/folder1",
options: []func(*storagedriver.WalkOptions){
storagedriver.WithStartAfterHint("/folder1-suffix"),
},
expected: []string{},
err: false,
},
{
name: "start matches from",
fn: noopFn,
from: "/folder3",
options: []func(*storagedriver.WalkOptions){
storagedriver.WithStartAfterHint("/folder3"),
},
expected: []string{
"/folder3/subfolder1",
"/folder3/subfolder1/subfolder1",
"/folder3/subfolder1/subfolder1/file1",
"/folder3/subfolder2",
"/folder3/subfolder2/subfolder1",
"/folder3/subfolder2/subfolder1/file1",
},
err: false,
},
{
name: "start doesn't exist",
fn: noopFn,
from: "/folder3",
options: []func(*storagedriver.WalkOptions){
storagedriver.WithStartAfterHint("/folder3/notafolder/notafile"),
},
expected: []string{
"/folder3/subfolder1",
"/folder3/subfolder1/subfolder1",
"/folder3/subfolder1/subfolder1/file1",
"/folder3/subfolder2",
"/folder3/subfolder2/subfolder1",
"/folder3/subfolder2/subfolder1/file1",
},
err: false,
},
{
name: "stop early",
fn: func(fileInfo storagedriver.FileInfo) error {
if fileInfo.Path() == "/folder1/file1" {
return storagedriver.ErrFilledBuffer
}
return nil
},
expected: []string{
"/file1",
"/folder1-suffix",
"/folder1-suffix/file1",
"/folder1",
"/folder1/file1",
// stop early
},
err: false,
},
{ {
name: "error", name: "error",
fn: func(fileInfo storagedriver.FileInfo) error { fn: func(fileInfo storagedriver.FileInfo) error {
@ -668,7 +723,7 @@ func TestWalk(t *testing.T) {
}, },
{ {
name: "from folder", name: "from folder",
fn: func(fileInfo storagedriver.FileInfo) error { return nil }, fn: noopFn,
expected: []string{ expected: []string{
"/folder1/file1", "/folder1/file1",
}, },