github.com/levb/mattermost-server@v5.3.1+incompatible/utils/file_test.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package utils 5 6 import ( 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestCopyDir(t *testing.T) { 17 srcDir, err := ioutil.TempDir("", "src") 18 require.NoError(t, err) 19 defer os.RemoveAll(srcDir) 20 21 dstParentDir, err := ioutil.TempDir("", "dstparent") 22 require.NoError(t, err) 23 defer os.RemoveAll(dstParentDir) 24 25 dstDir := filepath.Join(dstParentDir, "dst") 26 27 tempFile := "temp.txt" 28 err = ioutil.WriteFile(filepath.Join(srcDir, tempFile), []byte("test file"), 0655) 29 require.NoError(t, err) 30 31 childDir := "child" 32 err = os.Mkdir(filepath.Join(srcDir, childDir), 0777) 33 require.NoError(t, err) 34 35 childTempFile := "childtemp.txt" 36 err = ioutil.WriteFile(filepath.Join(srcDir, childDir, childTempFile), []byte("test file"), 0755) 37 require.NoError(t, err) 38 39 err = CopyDir(srcDir, dstDir) 40 assert.NoError(t, err) 41 42 stat, err := os.Stat(filepath.Join(dstDir, tempFile)) 43 assert.NoError(t, err) 44 assert.Equal(t, uint32(0655), uint32(stat.Mode())) 45 assert.False(t, stat.IsDir()) 46 data, err := ioutil.ReadFile(filepath.Join(dstDir, tempFile)) 47 assert.NoError(t, err) 48 assert.Equal(t, "test file", string(data)) 49 50 stat, err = os.Stat(filepath.Join(dstDir, childDir)) 51 assert.NoError(t, err) 52 assert.True(t, stat.IsDir()) 53 54 stat, err = os.Stat(filepath.Join(dstDir, childDir, childTempFile)) 55 assert.NoError(t, err) 56 assert.Equal(t, uint32(0755), uint32(stat.Mode())) 57 assert.False(t, stat.IsDir()) 58 data, err = ioutil.ReadFile(filepath.Join(dstDir, childDir, childTempFile)) 59 assert.NoError(t, err) 60 assert.Equal(t, "test file", string(data)) 61 62 err = CopyDir(srcDir, dstDir) 63 assert.Error(t, err) 64 }