From 9fbc40c5b987d679085b9fdf9eb9464222c8d633 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Fri, 20 Apr 2018 23:06:51 +0100 Subject: [PATCH] fstests: List missing dir must return ErrorDirNotFound for non bucket based remotes List or ListR of an non existent directory must return ErrorDirNotFound for non bucket based remotes. For bucket based remotes it may return ErrorDirNotFound or it may return no error and no entries. --- cmd/ls/lshelp/lshelp.go | 4 ++++ fstest/fstests/fstests.go | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/cmd/ls/lshelp/lshelp.go b/cmd/ls/lshelp/lshelp.go index 8b713636b..cb4c656eb 100644 --- a/cmd/ls/lshelp/lshelp.go +++ b/cmd/ls/lshelp/lshelp.go @@ -19,4 +19,8 @@ There are several related list commands Note that ` + "`ls`,`lsl`,`lsd`" + ` all recurse by default - use "--max-depth 1" to stop the recursion. The other list commands ` + "`lsf`,`lsjson`" + ` do not recurse by default - use "-R" to make them recurse. + +Listing a non existent directory will produce an error except for +remotes which can't have empty directories (eg s3, swift, gcs, etc - +the bucket based remotes). ` diff --git a/fstest/fstests/fstests.go b/fstest/fstests/fstests.go index 304bba178..961f861dd 100644 --- a/fstest/fstests/fstests.go +++ b/fstest/fstests/fstests.go @@ -335,6 +335,27 @@ func Run(t *testing.T, opt *Opt) { TestFsListDirEmpty(t) }) + // TestFsListDirNotFound tests listing the directories from an empty directory + TestFsListDirNotFound := func(t *testing.T) { + skipIfNotOk(t) + objs, dirs, err := walk.GetAll(remote, "does not exist", true, 1) + if !remote.Features().CanHaveEmptyDirectories { + if err != fs.ErrorDirNotFound { + assert.NoError(t, err) + assert.Equal(t, 0, len(objs)+len(dirs)) + } + } else { + assert.Equal(t, fs.ErrorDirNotFound, err) + } + } + t.Run("TestFsListDirNotFound", TestFsListDirNotFound) + + // TestFsListRDirNotFound tests listing the directories from an empty directory using ListR + t.Run("TestFsListRDirNotFound", func(t *testing.T) { + defer skipIfNotListR(t)() + TestFsListDirNotFound(t) + }) + // TestFsNewObjectNotFound tests not finding a object t.Run("TestFsNewObjectNotFound", func(t *testing.T) { skipIfNotOk(t) @@ -666,10 +687,9 @@ func Run(t *testing.T, opt *Opt) { require.NoError(t, err) // check remotes - // FIXME: Prints errors. // remote should not exist here _, err = remote.List("") - require.Equal(t, fs.ErrorDirNotFound, errors.Cause(err)) + assert.Equal(t, fs.ErrorDirNotFound, errors.Cause(err)) //fstest.CheckListingWithPrecision(t, remote, []fstest.Item{}, []string{}, remote.Precision()) file1Copy := file1 file1Copy.Path = path.Join(newName, file1.Path)