github.com/triarius/goreleaser@v1.12.5/internal/gio/copy_test.go (about) 1 package gio 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestCopy(t *testing.T) { 12 tmp := t.TempDir() 13 a := "testdata/somefile.txt" 14 b := tmp + "/somefile.txt" 15 require.NoError(t, Copy(a, b)) 16 requireEqualFiles(t, a, b) 17 } 18 19 func TestCopySymlink(t *testing.T) { 20 tmp := t.TempDir() 21 a := "testdata/somefile.txt" 22 b := tmp + "/somefile.txt" 23 c := tmp + "/somefile2.txt" 24 require.NoError(t, os.Symlink(a, b)) 25 require.NoError(t, Copy(b, c)) 26 27 fi, err := os.Lstat(c) 28 require.NoError(t, err) 29 require.True(t, fi.Mode()&os.ModeSymlink != 0) 30 31 l, err := os.Readlink(c) 32 require.NoError(t, err) 33 require.Equal(t, a, l) 34 } 35 36 func TestEqualFilesModeChanged(t *testing.T) { 37 tmp := t.TempDir() 38 a := "testdata/somefile.txt" 39 b := tmp + "/somefile.txt" 40 require.NoError(t, CopyWithMode(a, b, 0o755)) 41 requireNotEqualFiles(t, a, b) 42 } 43 44 func TestEqualFilesContentsChanged(t *testing.T) { 45 tmp := t.TempDir() 46 a := "testdata/somefile.txt" 47 b := tmp + "/somefile.txt" 48 require.NoError(t, Copy(a, b)) 49 require.NoError(t, os.WriteFile(b, []byte("hello world"), 0o644)) 50 requireNotEqualFiles(t, a, b) 51 } 52 53 func TestEqualFilesDontExist(t *testing.T) { 54 a := "testdata/nope.txt" 55 b := "testdata/somefile.txt" 56 c := "testdata/notadir/lala" 57 require.Error(t, Copy(a, b)) 58 require.Error(t, CopyWithMode(a, b, 0o644)) 59 require.Error(t, Copy(b, c)) 60 } 61 62 func TestCopyErrors(t *testing.T) { 63 a := "testdata/nope.txt" 64 b := "testdata/also-nope.txt" 65 66 err := copySymlink(a, b) 67 require.Error(t, err) 68 69 err = copyFile(a, b, 0o755) 70 require.Error(t, err) 71 } 72 73 func TestCopyFile(t *testing.T) { 74 dir := t.TempDir() 75 src, err := os.CreateTemp(dir, "src") 76 require.NoError(t, err) 77 require.NoError(t, src.Close()) 78 dst := filepath.Join(dir, "dst") 79 require.NoError(t, os.WriteFile(src.Name(), []byte("foo"), 0o644)) 80 require.NoError(t, Copy(src.Name(), dst)) 81 requireEqualFiles(t, src.Name(), dst) 82 } 83 84 func TestCopyDirectory(t *testing.T) { 85 srcDir := t.TempDir() 86 dstDir := t.TempDir() 87 const testFile = "test" 88 require.NoError(t, os.WriteFile(filepath.Join(srcDir, testFile), []byte("foo"), 0o644)) 89 require.NoError(t, Copy(srcDir, dstDir)) 90 requireEqualFiles(t, filepath.Join(srcDir, testFile), filepath.Join(dstDir, testFile)) 91 } 92 93 func TestCopyTwoLevelDirectory(t *testing.T) { 94 srcDir := t.TempDir() 95 dstDir := t.TempDir() 96 srcLevel2 := filepath.Join(srcDir, "level2") 97 const testFile = "test" 98 99 require.NoError(t, os.Mkdir(srcLevel2, 0o755)) 100 require.NoError(t, os.WriteFile(filepath.Join(srcDir, testFile), []byte("foo"), 0o644)) 101 require.NoError(t, os.WriteFile(filepath.Join(srcLevel2, testFile), []byte("foo"), 0o644)) 102 103 require.NoError(t, Copy(srcDir, dstDir)) 104 105 requireEqualFiles(t, filepath.Join(srcDir, testFile), filepath.Join(dstDir, testFile)) 106 requireEqualFiles(t, filepath.Join(srcLevel2, testFile), filepath.Join(dstDir, "level2", testFile)) 107 } 108 109 func requireEqualFiles(tb testing.TB, a, b string) { 110 tb.Helper() 111 eq, err := EqualFiles(a, b) 112 require.NoError(tb, err) 113 require.True(tb, eq, "%s != %s", a, b) 114 } 115 116 func requireNotEqualFiles(tb testing.TB, a, b string) { 117 tb.Helper() 118 eq, err := EqualFiles(a, b) 119 require.NoError(tb, err) 120 require.False(tb, eq, "%s == %s", a, b) 121 }