github.com/duffpl/gomplate/v3@v3.9.1/file/file_test.go (about) 1 package file 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/spf13/afero" 10 "github.com/stretchr/testify/assert" 11 tfs "gotest.tools/v3/fs" 12 ) 13 14 func TestRead(t *testing.T) { 15 origfs := fs 16 defer func() { fs = origfs }() 17 fs = afero.NewMemMapFs() 18 _ = fs.Mkdir("/tmp", 0777) 19 f, _ := fs.Create("/tmp/foo") 20 _, _ = f.Write([]byte("foo")) 21 22 actual, err := Read("/tmp/foo") 23 assert.NoError(t, err) 24 assert.Equal(t, "foo", actual) 25 26 _, err = Read("/tmp/bar") 27 assert.Error(t, err) 28 } 29 30 func TestReadDir(t *testing.T) { 31 origfs := fs 32 defer func() { fs = origfs }() 33 fs = afero.NewMemMapFs() 34 fs.Mkdir("/tmp", 0777) 35 fs.Create("/tmp/foo") 36 fs.Create("/tmp/bar") 37 fs.Create("/tmp/baz") 38 fs.Mkdir("/tmp/qux", 0777) 39 fs.Create("/tmp/qux/quux") 40 41 actual, err := ReadDir("/tmp") 42 assert.NoError(t, err) 43 assert.Equal(t, []string{"bar", "baz", "foo", "qux"}, actual) 44 45 _, err = ReadDir("/tmp/foo") 46 assert.Error(t, err) 47 } 48 49 func TestWrite(t *testing.T) { 50 oldwd, _ := os.Getwd() 51 defer os.Chdir(oldwd) 52 53 rootDir := tfs.NewDir(t, "gomplate-test") 54 defer rootDir.Remove() 55 56 newwd := rootDir.Join("the", "path", "we", "want") 57 badwd := rootDir.Join("some", "other", "dir") 58 fs.MkdirAll(newwd, 0755) 59 fs.MkdirAll(badwd, 0755) 60 newwd, _ = filepath.EvalSymlinks(newwd) 61 badwd, _ = filepath.EvalSymlinks(badwd) 62 63 err := os.Chdir(newwd) 64 assert.NoError(t, err) 65 66 err = Write("/foo", []byte("Hello world")) 67 assert.Error(t, err) 68 69 rel, err := filepath.Rel(newwd, badwd) 70 assert.NoError(t, err) 71 err = Write(rel, []byte("Hello world")) 72 assert.Error(t, err) 73 74 foopath := filepath.Join(newwd, "foo") 75 err = Write(foopath, []byte("Hello world")) 76 assert.NoError(t, err) 77 78 out, err := ioutil.ReadFile(foopath) 79 assert.NoError(t, err) 80 assert.Equal(t, "Hello world", string(out)) 81 82 err = Write(foopath, []byte("truncate")) 83 assert.NoError(t, err) 84 85 out, err = ioutil.ReadFile(foopath) 86 assert.NoError(t, err) 87 assert.Equal(t, "truncate", string(out)) 88 89 foopath = filepath.Join(newwd, "nonexistant", "subdir", "foo") 90 err = Write(foopath, []byte("Hello subdirranean world!")) 91 assert.NoError(t, err) 92 93 out, err = ioutil.ReadFile(foopath) 94 assert.NoError(t, err) 95 assert.Equal(t, "Hello subdirranean world!", string(out)) 96 } 97 98 func TestAssertPathInWD(t *testing.T) { 99 oldwd, _ := os.Getwd() 100 defer os.Chdir(oldwd) 101 102 err := assertPathInWD("/tmp") 103 assert.Error(t, err) 104 105 err = assertPathInWD(filepath.Join(oldwd, "subpath")) 106 assert.NoError(t, err) 107 108 err = assertPathInWD("subpath") 109 assert.NoError(t, err) 110 111 err = assertPathInWD("./subpath") 112 assert.NoError(t, err) 113 114 err = assertPathInWD(filepath.Join("..", "bogus")) 115 assert.Error(t, err) 116 117 err = assertPathInWD(filepath.Join("..", "..", "bogus")) 118 assert.Error(t, err) 119 120 base := filepath.Base(oldwd) 121 err = assertPathInWD(filepath.Join("..", base)) 122 assert.NoError(t, err) 123 }