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  }