// TestFsMove tests Move func TestFsMove(t *testing.T) { skipIfNotOk(t) // Check have Move _, ok := remote.(fs.Mover) if !ok { t.Skip("FS has no Mover interface") } var file1Move = file1 file1Move.Path += "-move" // do the move src := findObject(t, file1.Path) dst, err := remote.(fs.Mover).Move(src, file1Move.Path) require.NoError(t, err) // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file2, file1Move}) // Check dst lightly - list above has checked ModTime/Hashes assert.Equal(t, file1Move.Path, dst.Remote()) // move it back src = findObject(t, file1Move.Path) _, err = remote.(fs.Mover).Move(src, file1.Path) require.NoError(t, err) // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file2, file1}) }
// TestFsDirMove tests DirMove func TestFsDirMove(t *testing.T) { skipIfNotOk(t) // Check have DirMove _, ok := remote.(fs.DirMover) if !ok { t.Skip("FS has no DirMover interface") } // Check it can't move onto itself err := remote.(fs.DirMover).DirMove(remote) require.Equal(t, fs.ErrorDirExists, err) // new remote newRemote, _, removeNewRemote, err := fstest.RandomRemote(RemoteName, false) require.NoError(t, err) defer removeNewRemote() // try the move err = newRemote.(fs.DirMover).DirMove(remote) require.NoError(t, err) // check remotes // FIXME: Prints errors. fstest.CheckListing(t, remote, []fstest.Item{}) fstest.CheckListing(t, newRemote, []fstest.Item{file2, file1}) // move it back err = remote.(fs.DirMover).DirMove(newRemote) require.NoError(t, err) // check remotes fstest.CheckListing(t, remote, []fstest.Item{file2, file1}) fstest.CheckListing(t, newRemote, []fstest.Item{}) }
// TestFsMove tests Move func TestFsMove(t *testing.T) { skipIfNotOk(t) // Check have Move doMove := remote.Features().Move if doMove == nil { t.Skip("FS has no Mover interface") } // state of files now: // 1: file name.txt // 2: hello sausage?/../z.txt var file1Move = file1 var file2Move = file2 // check happy path, i.e. no naming conflicts when rename and move are two // separate operations file2Move.Path = "other.txt" src := findObject(t, file2.Path) dst, err := doMove(src, file2Move.Path) if err == fs.ErrorCantMove { t.Skip("FS can't move") } require.NoError(t, err) // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file1, file2Move}) // Check dst lightly - list above has checked ModTime/Hashes assert.Equal(t, file2Move.Path, dst.Remote()) // 1: file name.txt // 2: other.txt // Check conflict on "rename, then move" file1Move.Path = "moveTest/other.txt" src = findObject(t, file1.Path) _, err = doMove(src, file1Move.Path) require.NoError(t, err) fstest.CheckListing(t, remote, []fstest.Item{file1Move, file2Move}) // 1: moveTest/other.txt // 2: other.txt // Check conflict on "move, then rename" src = findObject(t, file1Move.Path) _, err = doMove(src, file1.Path) require.NoError(t, err) fstest.CheckListing(t, remote, []fstest.Item{file1, file2Move}) // 1: file name.txt // 2: other.txt src = findObject(t, file2Move.Path) _, err = doMove(src, file2.Path) require.NoError(t, err) fstest.CheckListing(t, remote, []fstest.Item{file1, file2}) // 1: file name.txt // 2: hello sausage?/../z.txt }
func TestFsCopy(t *testing.T) { skipIfNotOk(t) // Check have Copy _, ok := remote.(fs.Copier) if !ok { t.Skip("FS has no Copier interface") } var file1Copy = file1 file1Copy.Path += "-copy" // do the copy src := findObject(t, file1.Path) dst, err := remote.(fs.Copier).Copy(src, file1Copy.Path) if err != nil { t.Errorf("Copy failed: %v", err) } // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file1, file2, file1Copy}) // Check dst lightly - list above has checked ModTime/Md5sum if dst.Remote() != file1Copy.Path { t.Errorf("object path: want %q got %q", file1Copy.Path, dst.Remote()) } // Delete copy err = dst.Remove() if err != nil { t.Fatal("Remove copy error", err) } }
// TestObjectRemove tests Remove func TestObjectRemove(t *testing.T) { skipIfNotOk(t) obj := findObject(t, file1.Path) err := obj.Remove() require.NoError(t, err) fstest.CheckListing(t, remote, []fstest.Item{file2}) }
// TestFsCopy tests Copy func TestFsCopy(t *testing.T) { skipIfNotOk(t) // Check have Copy doCopy := remote.Features().Copy if doCopy == nil { t.Skip("FS has no Copier interface") } var file1Copy = file1 file1Copy.Path += "-copy" // do the copy src := findObject(t, file1.Path) dst, err := doCopy(src, file1Copy.Path) if err == fs.ErrorCantCopy { t.Skip("FS can't copy") } require.NoError(t, err, fmt.Sprintf("Error: %#v", err)) // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file1, file2, file1Copy}) // Check dst lightly - list above has checked ModTime/Hashes assert.Equal(t, file1Copy.Path, dst.Remote()) // Delete copy err = dst.Remove() require.NoError(t, err) }
// TestFsIsFileNotFound tests that an error is not returned if no object is found func TestFsIsFileNotFound(t *testing.T) { skipIfNotOk(t) remoteName := subRemoteName + "/not found.txt" fileRemote, err := fs.NewFs(remoteName) require.NoError(t, err) fstest.CheckListing(t, fileRemote, []fstest.Item{}) }
// TestFsCopy tests Copy func TestFsCopy(t *testing.T) { skipIfNotOk(t) // Check have Copy _, ok := remote.(fs.Copier) if !ok { t.Skip("FS has no Copier interface") } var file1Copy = file1 file1Copy.Path += "-copy" // do the copy src := findObject(t, file1.Path) dst, err := remote.(fs.Copier).Copy(src, file1Copy.Path) require.NoError(t, err) // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file1, file2, file1Copy}) // Check dst lightly - list above has checked ModTime/Hashes assert.Equal(t, file1Copy.Path, dst.Remote()) // Delete copy err = dst.Remove() require.NoError(t, err) }
func TestObjectRemove(t *testing.T) { skipIfNotOk(t) obj := findObject(t, file1.Path) err := obj.Remove() if err != nil { t.Fatal("Remove error", err) } fstest.CheckListing(t, remote, []fstest.Item{file2}) }
// TestFsIsFile tests that an error is returned along with a valid fs // which points to the parent directory. func TestFsIsFile(t *testing.T) { skipIfNotOk(t) remoteName := subRemoteName + "/" + file2.Path file2Copy := file2 file2Copy.Path = "z.txt" fileRemote, err := fs.NewFs(remoteName) assert.Equal(t, fs.ErrorIsFile, err) fstest.CheckListing(t, fileRemote, []fstest.Item{file2Copy}) }
// TestFsDirMove tests DirMove func TestFsDirMove(t *testing.T) { skipIfNotOk(t) // Check have DirMove _, ok := remote.(fs.DirMover) if !ok { t.Skip("FS has no DirMover interface") } // Check it can't move onto itself err := remote.(fs.DirMover).DirMove(remote) if err != fs.ErrorDirExists { t.Errorf("Expecting fs.ErrorDirExists got: %v", err) } // new remote newRemote, removeNewRemote, err := fstest.RandomRemote(RemoteName, false) if err != nil { t.Fatalf("Failed to create remote: %v", err) } defer removeNewRemote() // try the move err = newRemote.(fs.DirMover).DirMove(remote) if err != nil { t.Errorf("Failed to DirMove: %v", err) } // check remotes // FIXME: Prints errors. fstest.CheckListing(t, remote, []fstest.Item{}) fstest.CheckListing(t, newRemote, []fstest.Item{file2, file1}) // move it back err = remote.(fs.DirMover).DirMove(newRemote) if err != nil { t.Errorf("Failed to DirMove: %v", err) } // check remotes fstest.CheckListing(t, remote, []fstest.Item{file2, file1}) fstest.CheckListing(t, newRemote, []fstest.Item{}) }
func TestLimitedFsNotFound(t *testing.T) { skipIfNotOk(t) remoteName := subRemoteName + "/not found.txt" fileRemote, err := fs.NewFs(remoteName) if err != nil { t.Fatalf("Failed to make remote %q: %v", remoteName, err) } fstest.CheckListing(t, fileRemote, []fstest.Item{}) _, ok := fileRemote.(*fs.Limited) if ok { t.Errorf("%v is is a fs.Limited", fileRemote) } }
// TestFsMove tests Move func TestFsMove(t *testing.T) { skipIfNotOk(t) // Check have Move _, ok := remote.(fs.Mover) if !ok { t.Skip("FS has no Mover interface") } var file1Move = file1 file1Move.Path += "-move" // do the move src := findObject(t, file1.Path) dst, err := remote.(fs.Mover).Move(src, file1Move.Path) if err != nil { t.Fatalf("Move failed: %v", err) } // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file2, file1Move}) // Check dst lightly - list above has checked ModTime/Md5sum if dst.Remote() != file1Move.Path { t.Errorf("object path: want %q got %q", file1Move.Path, dst.Remote()) } // move it back src = findObject(t, file1Move.Path) _, err = remote.(fs.Mover).Move(src, file1.Path) if err != nil { t.Errorf("Move failed: %v", err) } // check file exists in new listing fstest.CheckListing(t, remote, []fstest.Item{file2, file1}) }
func TestLimitedFs(t *testing.T) { skipIfNotOk(t) remoteName := subRemoteName + "/" + file2.Path file2Copy := file2 file2Copy.Path = "z.txt" fileRemote, err := fs.NewFs(remoteName) if err != nil { t.Fatalf("Failed to make remote %q: %v", remoteName, err) } fstest.CheckListing(t, fileRemote, []fstest.Item{file2Copy}) _, ok := fileRemote.(*fs.Limited) if !ok { t.Errorf("%v is not a fs.Limited", fileRemote) } }
// TestLimitedFs tests that a LimitedFs is created func TestLimitedFs(t *testing.T) { skipIfNotOk(t) remoteName := subRemoteName + "/" + file2.Path file2Copy := file2 file2Copy.Path = "z.txt" fileRemote, err := fs.NewFs(remoteName) if err != nil { t.Fatalf("Failed to make remote %q: %v", remoteName, err) } fstest.CheckListing(t, fileRemote, []fstest.Item{file2Copy}) _, ok := fileRemote.(*fs.Limited) if !ok { // Check to see if this wraps a Limited FS if unwrap, hasUnWrap := fileRemote.(fs.UnWrapper); hasUnWrap { _, ok = unwrap.UnWrap().(*fs.Limited) } if !ok { t.Errorf("%v is not a fs.Limited", fileRemote) } } }
// TestFsListFile1and2 tests two files present func TestFsListFile1and2(t *testing.T) { skipIfNotOk(t) fstest.CheckListing(t, remote, []fstest.Item{file1, file2}) }
// TestFsListEmpty tests listing an empty directory func TestFsListEmpty(t *testing.T) { skipIfNotOk(t) fstest.CheckListing(t, remote, []fstest.Item{}) }