github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/utils/files_test.go (about) 1 /* 2 * Copyright (c) 2024-present unTill Software Development Group B.V. 3 * @author Denis Gribanov 4 */ 5 6 package coreutils 7 8 import ( 9 "os" 10 "path/filepath" 11 "strings" 12 "testing" 13 14 "github.com/google/uuid" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestCopy_BasicUsage(t *testing.T) { 19 require := require.New(t) 20 tempDirSrc := t.TempDir() 21 dir1 := filepath.Join(tempDirSrc, "dir1") 22 dir2 := filepath.Join(tempDirSrc, "dir2") 23 dir1dir3 := filepath.Join(dir1, "dir3") 24 require.NoError(os.MkdirAll(dir1, FileMode_rwxrwxrwx)) 25 require.NoError(os.MkdirAll(dir2, FileMode_rwxrwxrwx)) 26 require.NoError(os.MkdirAll(dir1dir3, FileMode_rwxrwxrwx)) 27 file0 := filepath.Join(tempDirSrc, "file0.txt") 28 file1 := filepath.Join(dir1, "file1.txt") 29 file2 := filepath.Join(dir2, "file2.txt") 30 file3 := filepath.Join(dir1dir3, "file3.txt") 31 32 require.NoError(os.WriteFile(file0, []byte("file0 content"), FileMode_rw_rw_rw_)) 33 require.NoError(os.WriteFile(file1, []byte("file1 content"), FileMode_rw_rw_rw_)) 34 require.NoError(os.WriteFile(file2, []byte("file2 content"), FileMode_rw_rw_rw_)) 35 require.NoError(os.WriteFile(file3, []byte("file3 content"), FileMode_rw_rw_rw_)) 36 37 t.Run("CopyDir", func(t *testing.T) { 38 tempDirDst := t.TempDir() 39 40 require.NoError(CopyDir(tempDirSrc, tempDirDst)) 41 42 file0Dst := strings.ReplaceAll(file0, tempDirSrc, tempDirDst) 43 file1Dst := strings.ReplaceAll(file1, tempDirSrc, tempDirDst) 44 file2Dst := strings.ReplaceAll(file2, tempDirSrc, tempDirDst) 45 file3Dst := strings.ReplaceAll(file3, tempDirSrc, tempDirDst) 46 47 file0ActualContent, err := os.ReadFile(file0Dst) 48 require.NoError(err) 49 file1ActualContent, err := os.ReadFile(file1Dst) 50 require.NoError(err) 51 file2ActualContent, err := os.ReadFile(file2Dst) 52 require.NoError(err) 53 file3ActualContent, err := os.ReadFile(file3Dst) 54 require.NoError(err) 55 56 require.Equal("file0 content", string(file0ActualContent)) 57 require.Equal("file1 content", string(file1ActualContent)) 58 require.Equal("file2 content", string(file2ActualContent)) 59 require.Equal("file3 content", string(file3ActualContent)) 60 }) 61 62 t.Run("CopyFile", func(t *testing.T) { 63 tempDirDst := t.TempDir() 64 require.NoError(CopyFile(file1, tempDirDst)) 65 file1Dst := filepath.Join(tempDirDst, filepath.Base(file1)) 66 file1ActualContent, err := os.ReadFile(file1Dst) 67 require.NoError(err) 68 require.Equal("file1 content", string(file1ActualContent)) 69 }) 70 71 t.Run("CopyFile to unexisting dir -> create target dir", func(t *testing.T) { 72 tempDirDst := t.TempDir() 73 require.NoError(os.RemoveAll(tempDirDst)) 74 require.NoError(CopyFile(file1, tempDirDst)) 75 file1Dst := filepath.Join(tempDirDst, filepath.Base(file1)) 76 file1ActualContent, err := os.ReadFile(file1Dst) 77 require.NoError(err) 78 require.Equal("file1 content", string(file1ActualContent)) 79 }) 80 81 t.Run("CopyFile src file without path", func(t *testing.T) { 82 tempDirDst := t.TempDir() 83 initialWD, err := os.Getwd() 84 require.NoError(err) 85 file1SrcPath, file1SrcName := filepath.Split(file1) 86 require.NoError(os.Chdir(file1SrcPath)) 87 defer func() { 88 require.NoError(os.Chdir(initialWD)) 89 }() 90 91 require.NoError(CopyFile(file1SrcName, tempDirDst)) 92 file1Dst := filepath.Join(tempDirDst, file1SrcName) 93 file1ActualContent, err := os.ReadFile(file1Dst) 94 require.NoError(err) 95 require.Equal("file1 content", string(file1ActualContent)) 96 }) 97 98 //TODO: test copy to the dir that is not exists yet, test specifying the src file without path 99 } 100 101 func TestCopyErrors(t *testing.T) { 102 require := require.New(t) 103 tempDirSrc := t.TempDir() 104 tempDirDst := t.TempDir() 105 unexisingDir := filepath.Join(tempDirSrc, "unexisting") 106 107 require.Error(CopyDir("", "")) 108 require.Error(CopyDir("", tempDirDst)) 109 require.Error(CopyDir(unexisingDir, "")) 110 require.Error(CopyDir(unexisingDir, "")) 111 require.Error(CopyFile("", "")) 112 require.Error(CopyFile("", tempDirDst)) 113 require.Error(CopyFile(unexisingDir, "")) 114 require.Error(CopyFile(unexisingDir, "")) 115 } 116 117 func TestCopyOptions(t *testing.T) { 118 require := require.New(t) 119 tempDirSrc := t.TempDir() 120 tempDirDst := t.TempDir() 121 dir1 := filepath.Join(tempDirSrc, "dir1") 122 dir2 := filepath.Join(tempDirSrc, "dir2") 123 dir1dir3 := filepath.Join(dir1, "dir3") 124 require.NoError(os.MkdirAll(dir1, FileMode_rwxrwxrwx)) 125 require.NoError(os.MkdirAll(dir2, FileMode_rwxrwxrwx)) 126 require.NoError(os.MkdirAll(dir1dir3, FileMode_rwxrwxrwx)) 127 file0 := filepath.Join(tempDirSrc, "file0.txt") 128 file1 := filepath.Join(dir1, "file1.txt") 129 file2 := filepath.Join(dir2, "file2.txt") 130 file3 := filepath.Join(dir1dir3, "file3.txt") 131 132 require.NoError(os.WriteFile(file0, []byte("file0 content"), FileMode_rw_rw_rw_)) 133 require.NoError(os.WriteFile(file1, []byte("file1 content"), FileMode_rw_rw_rw_)) 134 require.NoError(os.WriteFile(file2, []byte("file2 content"), FileMode_rw_rw_rw_)) 135 require.NoError(os.WriteFile(file3, []byte("file3 content"), FileMode_rw_rw_rw_)) 136 137 file2 = strings.ReplaceAll(file2, tempDirSrc, tempDirDst) 138 dir2dst := filepath.Join(tempDirDst, "dir2") 139 require.NoError(os.MkdirAll(dir2dst, FileMode_rwxrwxrwx)) 140 require.NoError(os.WriteFile(file2, []byte("file2 existing content"), FileMode_rw_rw_rw_)) 141 142 err := CopyDir(tempDirSrc, tempDirDst, WithFilterFilesWithRelativePaths( 143 []string{"dir1/file1.txt", "dir2/file2.txt"}), WithSkipExisting()) 144 require.NoError(err) 145 146 file0 = strings.ReplaceAll(file0, tempDirSrc, tempDirDst) 147 file1 = strings.ReplaceAll(file1, tempDirSrc, tempDirDst) 148 file2 = strings.ReplaceAll(file2, tempDirSrc, tempDirDst) 149 file3 = strings.ReplaceAll(file3, tempDirSrc, tempDirDst) 150 151 exists, err := Exists(file0) 152 require.NoError(err) 153 require.False(exists) 154 file1ActualContent, err := os.ReadFile(file1) 155 require.NoError(err) 156 file2ActualContent, err := os.ReadFile(file2) 157 require.NoError(err) 158 exists, err = Exists(file3) 159 require.NoError(err) 160 require.False(exists) 161 162 require.Equal("file1 content", string(file1ActualContent)) 163 require.Equal("file2 existing content", string(file2ActualContent)) 164 } 165 166 func TestExists(t *testing.T) { 167 require := require.New(t) 168 t.Run("file", func(t *testing.T) { 169 exists, err := Exists("files_test.go") 170 require.NoError(err) 171 require.True(exists) 172 173 exists, err = Exists(uuid.New().String()) 174 require.NoError(err) 175 require.False(exists) 176 }) 177 178 t.Run("dir", func(t *testing.T) { 179 exists, err := Exists("testwsdesc") 180 require.NoError(err) 181 require.True(exists) 182 }) 183 }