github.com/jaylevin/jenkins-library@v1.230.4/pkg/piperutils/fileUtils_test.go (about) 1 package piperutils 2 3 import ( 4 "github.com/stretchr/testify/assert" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 "testing" 9 ) 10 11 func TestFileExists(t *testing.T) { 12 runInTempDir(t, "testing dir returns false", "dir", func(t *testing.T) { 13 err := os.Mkdir("test", 0777) 14 if err != nil { 15 t.Fatal("failed to create test dir in temporary dir") 16 } 17 result, err := FileExists("test") 18 assert.NoError(t, err) 19 assert.False(t, result) 20 }) 21 runInTempDir(t, "testing file returns true", "dir", func(t *testing.T) { 22 file, err := ioutil.TempFile("", "testFile") 23 assert.NoError(t, err) 24 result, err := FileExists(file.Name()) 25 assert.NoError(t, err) 26 assert.True(t, result) 27 }) 28 } 29 30 func TestDirExists(t *testing.T) { 31 runInTempDir(t, "testing dir exists", "dir-exists", func(t *testing.T) { 32 err := os.Mkdir("test", 0777) 33 if err != nil { 34 t.Fatal("failed to create test dir in temporary dir") 35 } 36 files := Files{} 37 38 result, err := files.DirExists("test") 39 assert.NoError(t, err) 40 assert.True(t, result, "created folder should exist") 41 42 result, err = files.DirExists(".") 43 assert.NoError(t, err) 44 assert.True(t, result, "current directory should exist") 45 46 result, err = files.DirExists(string(os.PathSeparator)) 47 assert.NoError(t, err) 48 assert.True(t, result, "root directory should exist") 49 }) 50 } 51 52 func TestCopy(t *testing.T) { 53 runInTempDir(t, "copying file succeeds", "dir2", func(t *testing.T) { 54 file := "testFile" 55 err := ioutil.WriteFile(file, []byte{byte(1), byte(2), byte(3)}, 0700) 56 if err != nil { 57 t.Fatal("Failed to create temporary workspace directory") 58 } 59 60 result, err := Copy(file, "testFile2") 61 assert.NoError(t, err, "Didn't expert error but got one") 62 assert.Equal(t, int64(3), result, "Expected true but got false") 63 }) 64 runInTempDir(t, "copying directory fails", "dir3", func(t *testing.T) { 65 src := filepath.Join("some", "file") 66 dst := filepath.Join("another", "file") 67 68 err := os.MkdirAll(src, 0777) 69 if err != nil { 70 t.Fatal("Failed to create test directory") 71 } 72 73 files := Files{} 74 exists, err := files.DirExists(src) 75 assert.NoError(t, err) 76 assert.True(t, exists) 77 78 length, err := files.Copy(src, dst) 79 assert.EqualError(t, err, "Source file '"+src+"' does not exist") 80 assert.Equal(t, length, int64(0)) 81 }) 82 } 83 84 func runInTempDir(t *testing.T, nameOfRun, tempDirPattern string, run func(t *testing.T)) { 85 dir, err := ioutil.TempDir("", tempDirPattern) 86 if err != nil { 87 t.Fatal("Failed to create temporary directory") 88 } 89 oldCWD, _ := os.Getwd() 90 _ = os.Chdir(dir) 91 // clean up tmp dir 92 defer func() { 93 _ = os.Chdir(oldCWD) 94 _ = os.RemoveAll(dir) 95 }() 96 97 t.Run(nameOfRun, run) 98 } 99 100 func TestExcludeFiles(t *testing.T) { 101 t.Parallel() 102 t.Run("nil slices", func(t *testing.T) { 103 t.Parallel() 104 filtered, err := ExcludeFiles(nil, nil) 105 assert.NoError(t, err) 106 assert.Len(t, filtered, 0) 107 }) 108 t.Run("empty excludes", func(t *testing.T) { 109 t.Parallel() 110 files := []string{"file"} 111 filtered, err := ExcludeFiles(files, nil) 112 assert.NoError(t, err) 113 assert.Equal(t, files, filtered) 114 }) 115 t.Run("direct match", func(t *testing.T) { 116 t.Parallel() 117 files := []string{"file"} 118 filtered, err := ExcludeFiles(files, files) 119 assert.NoError(t, err) 120 assert.Len(t, filtered, 0) 121 }) 122 t.Run("two direct matches", func(t *testing.T) { 123 t.Parallel() 124 files := []string{"a", "b"} 125 filtered, err := ExcludeFiles(files, files) 126 assert.NoError(t, err) 127 assert.Len(t, filtered, 0) 128 }) 129 t.Run("one direct exclude matches", func(t *testing.T) { 130 t.Parallel() 131 files := []string{"a", "b"} 132 filtered, err := ExcludeFiles(files, []string{"b"}) 133 assert.NoError(t, err) 134 assert.Equal(t, []string{"a"}, filtered) 135 }) 136 t.Run("no glob matches", func(t *testing.T) { 137 t.Parallel() 138 files := []string{"a", "b"} 139 filtered, err := ExcludeFiles(files, []string{"*/a", "b/*"}) 140 assert.NoError(t, err) 141 assert.Equal(t, []string{"a", "b"}, filtered) 142 }) 143 t.Run("two globs match", func(t *testing.T) { 144 t.Parallel() 145 files := []string{"path/to/a", "b"} 146 filtered, err := ExcludeFiles(files, []string{"**/a", "**/b"}) 147 assert.NoError(t, err) 148 assert.Len(t, filtered, 0) 149 }) 150 }