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  }