github.com/ahmet2mir/goreleaser@v0.180.3-0.20210927151101-8e5ee5a9b8c5/internal/gio/copy_test.go (about) 1 package gio 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestCopy(t *testing.T) { 13 tmp := t.TempDir() 14 a := "testdata/somefile.txt" 15 b := tmp + "/somefile.txt" 16 require.NoError(t, Copy(a, b)) 17 requireEqualFiles(t, a, b) 18 } 19 20 func TestEqualFilesModeChanged(t *testing.T) { 21 tmp := t.TempDir() 22 a := "testdata/somefile.txt" 23 b := tmp + "/somefile.txt" 24 require.NoError(t, CopyWithMode(a, b, 0o755)) 25 requireNotEqualFiles(t, a, b) 26 } 27 28 func TestEqualFilesContentsChanged(t *testing.T) { 29 tmp := t.TempDir() 30 a := "testdata/somefile.txt" 31 b := tmp + "/somefile.txt" 32 require.NoError(t, Copy(a, b)) 33 require.NoError(t, os.WriteFile(b, []byte("hello world"), 0o644)) 34 requireNotEqualFiles(t, a, b) 35 } 36 37 func TestEqualFilesDontExist(t *testing.T) { 38 a := "testdata/nope.txt" 39 b := "testdata/somefile.txt" 40 c := "testdata/notadir/lala" 41 require.Error(t, Copy(a, b)) 42 require.Error(t, CopyWithMode(a, b, 0o644)) 43 require.Error(t, Copy(b, c)) 44 } 45 46 func TestCopyFile(t *testing.T) { 47 dir := t.TempDir() 48 src, err := ioutil.TempFile(dir, "src") 49 require.NoError(t, err) 50 require.NoError(t, src.Close()) 51 dst := filepath.Join(dir, "dst") 52 require.NoError(t, os.WriteFile(src.Name(), []byte("foo"), 0o644)) 53 require.NoError(t, Copy(src.Name(), dst)) 54 requireEqualFiles(t, src.Name(), dst) 55 } 56 57 func TestCopyDirectory(t *testing.T) { 58 srcDir := t.TempDir() 59 dstDir := t.TempDir() 60 const testFile = "test" 61 require.NoError(t, os.WriteFile(filepath.Join(srcDir, testFile), []byte("foo"), 0o644)) 62 require.NoError(t, Copy(srcDir, dstDir)) 63 requireEqualFiles(t, filepath.Join(srcDir, testFile), filepath.Join(dstDir, testFile)) 64 } 65 66 func TestCopyTwoLevelDirectory(t *testing.T) { 67 srcDir := t.TempDir() 68 dstDir := t.TempDir() 69 srcLevel2 := filepath.Join(srcDir, "level2") 70 const testFile = "test" 71 72 require.NoError(t, os.Mkdir(srcLevel2, 0o755)) 73 require.NoError(t, os.WriteFile(filepath.Join(srcDir, testFile), []byte("foo"), 0o644)) 74 require.NoError(t, os.WriteFile(filepath.Join(srcLevel2, testFile), []byte("foo"), 0o644)) 75 76 require.NoError(t, Copy(srcDir, dstDir)) 77 78 requireEqualFiles(t, filepath.Join(srcDir, testFile), filepath.Join(dstDir, testFile)) 79 requireEqualFiles(t, filepath.Join(srcLevel2, testFile), filepath.Join(dstDir, "level2", testFile)) 80 } 81 82 func requireEqualFiles(tb testing.TB, a, b string) { 83 tb.Helper() 84 eq, err := EqualFiles(a, b) 85 require.NoError(tb, err) 86 require.True(tb, eq, "%s != %s", a, b) 87 } 88 89 func requireNotEqualFiles(tb testing.TB, a, b string) { 90 tb.Helper() 91 eq, err := EqualFiles(a, b) 92 require.NoError(tb, err) 93 require.False(tb, eq, "%s == %s", a, b) 94 }