Skip to content

Commit

Permalink
Add tests for file/symlink/dir deleted while copy
Browse files Browse the repository at this point in the history
Files, symlinks and directories may be deleted while or after directory
list is read. Add test to simulate this so we can fix the desired
behavior.

ref otiai10#72
  • Loading branch information
ncopa committed Apr 5, 2023
1 parent dfe4363 commit 4895fee
Showing 1 changed file with 43 additions and 0 deletions.
43 changes: 43 additions & 0 deletions all_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"io"
"io/ioutil"
"os"
"path/filepath"
"runtime"
"strings"
"testing"
Expand Down Expand Up @@ -86,6 +87,48 @@ func TestCopy(t *testing.T) {
err = os.Chmod(dest, 0o755)
Expect(t, err).ToBe(nil)
})
When(t, "file is deleted while copying", func(t *testing.T) {
src := t.TempDir()
dest := t.TempDir()

file := filepath.Join(src, "file")
f, err := os.Create(file)
Expect(t, err).ToBe(nil)
f.Close()

opt := Options{Skip: func(info os.FileInfo, src, dest string) (bool, error) {
os.Remove(src)
return false, nil
}}
err = Copy(src, dest, opt)
Expect(t, err).ToBe(nil)
})
When(t, "symlink is deleted while copying", func(t *testing.T) {
src := t.TempDir()
dest := t.TempDir()

Expect(t, os.Symlink(".", filepath.Join(src, "symlink"))).ToBe(nil)

opt := Options{Skip: func(info os.FileInfo, src, dest string) (bool, error) {
os.Remove(src)
return false, nil
}}
err = Copy(src, dest, opt)
Expect(t, err).ToBe(nil)
})
When(t, "directory is deleted while copying", func(t *testing.T) {
src := t.TempDir()
dest := t.TempDir()

Expect(t, os.Mkdir(filepath.Join(src, "dir"), 0755)).ToBe(nil)

opt := Options{Skip: func(info os.FileInfo, src, dest string) (bool, error) {
os.Remove(src)
return false, nil
}}
err = Copy(src, dest, opt)
Expect(t, err).ToBe(nil)
})
}

func TestCopy_NamedPipe(t *testing.T) {
Expand Down

0 comments on commit 4895fee

Please sign in to comment.