14
"github.com/stretchr/testify/suite"
16
"github.com/siderolabs/talos/pkg/archiver"
19
type WalkerSuite struct {
23
func (suite *WalkerSuite) TestIterationDir() {
24
ch, err := archiver.Walker(context.Background(), suite.tmpDir, archiver.WithSkipRoot())
25
suite.Require().NoError(err)
27
relPaths := []string(nil)
30
suite.Require().NoError(fi.Error)
31
relPaths = append(relPaths, fi.RelPath)
33
if fi.RelPath == "usr/bin/mv" {
34
suite.Assert().Equal("/usr/bin/cp", fi.Link)
38
suite.Assert().Equal([]string{
40
"etc", "etc/certs", "etc/certs/ca.crt", "etc/hostname",
41
"lib", "lib/dynalib.so",
42
"usr", "usr/bin", "usr/bin/cp", "usr/bin/mv",
47
func (suite *WalkerSuite) TestIterationFilter() {
48
ch, err := archiver.Walker(context.Background(), suite.tmpDir, archiver.WithSkipRoot(), archiver.WithFnmatchPatterns("dev/*", "lib"))
49
suite.Require().NoError(err)
51
relPaths := []string(nil)
54
suite.Require().NoError(fi.Error)
55
relPaths = append(relPaths, fi.RelPath)
57
if fi.RelPath == "usr/bin/mv" {
58
suite.Assert().Equal("/usr/bin/cp", fi.Link)
62
suite.Assert().Equal([]string{
69
func (suite *WalkerSuite) TestIterationMaxRecurseDepth() {
70
for _, test := range []struct {
76
result: []string{".", "dev", "dev/random", "etc", "etc/certs", "etc/certs/ca.crt", "etc/hostname", "lib", "lib/dynalib.so", "usr", "usr/bin", "usr/bin/cp", "usr/bin/mv"},
81
result: []string{".", "dev", "etc", "lib", "usr"},
85
result: []string{".", "dev", "etc", "lib", "usr"},
89
result: []string{".", "dev", "dev/random", "etc", "etc/certs", "etc/hostname", "lib", "lib/dynalib.so", "usr", "usr/bin"},
93
result: []string{".", "dev", "dev/random", "etc", "etc/certs", "etc/certs/ca.crt", "etc/hostname", "lib", "lib/dynalib.so", "usr", "usr/bin", "usr/bin/cp", "usr/bin/mv"},
97
result: []string{".", "dev", "dev/random", "etc", "etc/certs", "etc/certs/ca.crt", "etc/hostname", "lib", "lib/dynalib.so", "usr", "usr/bin", "usr/bin/cp", "usr/bin/mv"},
100
suite.Run(strconv.Itoa(test.maxDepth), func() {
103
ch, err := archiver.Walker(context.Background(), suite.tmpDir, archiver.WithMaxRecurseDepth(test.maxDepth))
104
suite.Require().NoError(err)
109
suite.Require().NoError(fi.Error)
110
result = append(result, fi.RelPath)
113
suite.Equal(test.result, result)
118
func (suite *WalkerSuite) TestIterationFile() {
119
ch, err := archiver.Walker(context.Background(), filepath.Join(suite.tmpDir, "usr/bin/cp"))
120
suite.Require().NoError(err)
122
relPaths := []string(nil)
125
suite.Require().NoError(fi.Error)
126
relPaths = append(relPaths, fi.RelPath)
129
suite.Assert().Equal([]string{"cp"},
133
func (suite *WalkerSuite) TestIterationSymlink() {
134
original := filepath.Join(suite.tmpDir, "original")
135
err := os.Mkdir(original, 0o755)
136
suite.Require().NoError(err)
139
err = os.RemoveAll(original)
140
suite.Require().NoError(err)
144
newname := filepath.Join(suite.tmpDir, "new")
145
err = os.Symlink("original", newname)
146
suite.Require().NoError(err)
149
err = os.Remove(newname)
150
suite.Require().NoError(err)
153
err = os.WriteFile(filepath.Join(original, "original.txt"), []byte{}, 0o666)
154
suite.Require().NoError(err)
156
ch, err := archiver.Walker(context.Background(), newname)
157
suite.Require().NoError(err)
159
relPaths := []string(nil)
162
suite.Require().NoError(fi.Error)
163
relPaths = append(relPaths, fi.RelPath)
166
suite.Assert().Equal([]string{".", "original.txt"}, relPaths)
169
func (suite *WalkerSuite) TestIterationNotFound() {
170
_, err := archiver.Walker(context.Background(), filepath.Join(suite.tmpDir, "doesntlivehere"))
171
suite.Require().Error(err)
174
func (suite *WalkerSuite) TestIterationTypes() {
175
ch, err := archiver.Walker(context.Background(), suite.tmpDir, archiver.WithFileTypes(archiver.DirectoryFileType))
176
suite.Require().NoError(err)
178
relPaths := []string(nil)
181
suite.Require().NoError(fi.Error)
182
relPaths = append(relPaths, fi.RelPath)
185
suite.Assert().Equal([]string{
186
".", "dev", "etc", "etc/certs", "lib", "usr", "usr/bin",
191
func TestWalkerSuite(t *testing.T) {
192
suite.Run(t, new(WalkerSuite))