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