...

Source file src/sigs.k8s.io/kustomize/kyaml/filesys/filesystem_test.go

Documentation: sigs.k8s.io/kustomize/kyaml/filesys

     1  // Copyright 2021 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package filesys
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"sigs.k8s.io/kustomize/kyaml/errors"
    14  )
    15  
    16  const (
    17  	disk        = "MakeFsOnDisk"
    18  	memoryAbs   = "MakeFsInMemory"
    19  	memoryEmpty = "MakeEmptyDirInMemory"
    20  
    21  	existMsg = "expected '%s' to exist"
    22  )
    23  
    24  var filesysBuilders = map[string]func() FileSystem{
    25  	memoryAbs:   MakeFsInMemory,
    26  	disk:        MakeFsOnDisk,
    27  	memoryEmpty: func() FileSystem { return MakeEmptyDirInMemory() },
    28  }
    29  
    30  func TestNotExistErr(t *testing.T) {
    31  	for name, builder := range filesysBuilders {
    32  		t.Run(name, func(t *testing.T) {
    33  			testNotExistErr(t, builder())
    34  		})
    35  	}
    36  }
    37  
    38  func testNotExistErr(t *testing.T, fs FileSystem) {
    39  	t.Helper()
    40  	const path = "bad-dir/file.txt"
    41  
    42  	err := fs.RemoveAll(path)
    43  	assert.Falsef(t, errors.Is(err, os.ErrNotExist), "RemoveAll should not return ErrNotExist, got %v", err)
    44  	_, err = fs.Open(path)
    45  	assert.Truef(t, errors.Is(err, os.ErrNotExist), "Open should return ErrNotExist, got %v", err)
    46  	_, err = fs.ReadDir(path)
    47  	assert.Truef(t, errors.Is(err, os.ErrNotExist), "ReadDir should return ErrNotExist, got %v", err)
    48  	_, _, err = fs.CleanedAbs(path)
    49  	assert.Truef(t, errors.Is(err, os.ErrNotExist), "CleanedAbs should return ErrNotExist, got %v", err)
    50  	_, err = fs.ReadFile(path)
    51  	assert.Truef(t, errors.Is(err, os.ErrNotExist), "ReadFile should return ErrNotExist, got %v", err)
    52  	err = fs.Walk(path, func(_ string, _ os.FileInfo, err error) error { return err })
    53  	assert.Truef(t, errors.Is(err, os.ErrNotExist), "Walk should return ErrNotExist, got %v", err)
    54  }
    55  
    56  // setupFileSys returns file system, default directory to test in, and working directory
    57  func setupFileSys(t *testing.T, name string) (FileSystem, string, string) {
    58  	t.Helper()
    59  
    60  	switch name {
    61  	case disk:
    62  		fSys, testDir := makeTestDir(t)
    63  		return fSys, testDir, cleanWd(t)
    64  	case memoryAbs:
    65  		return filesysBuilders[name](), Separator, Separator
    66  	case memoryEmpty:
    67  		return filesysBuilders[name](), "", ""
    68  	default:
    69  		t.Fatalf("unexpected FileSystem implementation '%s'", name)
    70  		panic("unreachable point of execution")
    71  	}
    72  }
    73  
    74  func TestConfirmDir(t *testing.T) {
    75  	for name := range filesysBuilders {
    76  		name := name
    77  		t.Run(name, func(t *testing.T) {
    78  			fSys, prefixPath, wd := setupFileSys(t, name)
    79  
    80  			d1Path := filepath.Join(prefixPath, "d1")
    81  			d2Path := filepath.Join(d1Path, ".d2")
    82  			err := fSys.MkdirAll(d2Path)
    83  			require.NoError(t, err)
    84  			require.Truef(t, fSys.Exists(d2Path), existMsg, d2Path)
    85  
    86  			tests := map[string]*struct {
    87  				dir      string
    88  				expected string
    89  			}{
    90  				"Simple": {
    91  					d1Path,
    92  					d1Path,
    93  				},
    94  				"Hidden": {
    95  					d2Path,
    96  					d2Path,
    97  				},
    98  				"Relative": {
    99  					SelfDir,
   100  					wd,
   101  				},
   102  			}
   103  			for subName, test := range tests {
   104  				test := test
   105  				t.Run(subName, func(t *testing.T) {
   106  					cleanDir, err := ConfirmDir(fSys, test.dir)
   107  					require.NoError(t, err)
   108  					require.Equal(t, test.expected, cleanDir.String())
   109  				})
   110  			}
   111  		})
   112  	}
   113  }
   114  
   115  func TestConfirmDirErr(t *testing.T) {
   116  	for name := range filesysBuilders {
   117  		thisName := name
   118  		t.Run(thisName, func(t *testing.T) {
   119  			fSys, prefixPath, _ := setupFileSys(t, thisName)
   120  
   121  			fPath := filepath.Join(prefixPath, "foo")
   122  			err := fSys.WriteFile(fPath, []byte(`foo`))
   123  			require.NoError(t, err)
   124  			require.Truef(t, fSys.Exists(fPath), existMsg, fPath)
   125  
   126  			tests := map[string]string{
   127  				"Empty":        "",
   128  				"File":         fPath,
   129  				"Non-existent": filepath.Join(prefixPath, "bar"),
   130  			}
   131  			for subName, invalidPath := range tests {
   132  				invalidPath := invalidPath
   133  				t.Run(subName, func(t *testing.T) {
   134  					_, err := ConfirmDir(fSys, invalidPath)
   135  					require.Error(t, err)
   136  				})
   137  			}
   138  		})
   139  	}
   140  }
   141  

View as plain text