16
"github.com/stretchr/testify/suite"
18
"github.com/siderolabs/talos/pkg/archiver"
25
func (suite *TarSuite) TestArchiveDir() {
26
ch, err := archiver.Walker(context.Background(), suite.tmpDir)
27
suite.Require().NoError(err)
31
err = archiver.Tar(context.Background(), ch, &buf)
32
suite.Require().NoError(err)
34
pathsSeen := map[string]struct{}{}
36
tr := tar.NewReader(&buf)
44
suite.Require().NoError(err)
46
if hdr.Typeflag == tar.TypeDir {
50
contents, err := io.ReadAll(tr)
51
suite.Require().NoError(err)
55
for _, fi := range filesFixture {
56
if fi.Path[1:] == hdr.Name {
58
pathsSeen[fi.Path] = struct{}{}
61
case fi.Mode&os.ModeSymlink != 0:
62
suite.Require().Equal(string(fi.Contents), hdr.Linkname)
64
suite.Require().Len(contents, fi.Size)
65
case fi.Contents != nil:
66
suite.Require().EqualValues(fi.Contents, contents)
68
suite.Require().Len(contents, 0)
73
suite.Require().True(found, "file %q", hdr.Name)
76
for _, fi := range filesFixture {
77
_, ok := pathsSeen[fi.Path]
78
suite.Require().True(ok, "path %q", fi.Path)
82
func (suite *TarSuite) TestArchiveFile() {
83
ch, err := archiver.Walker(context.Background(), filepath.Join(suite.tmpDir, "/usr/bin/cp"))
84
suite.Require().NoError(err)
88
err = archiver.Tar(context.Background(), ch, &buf)
89
suite.Require().NoError(err)
91
tr := tar.NewReader(&buf)
99
suite.Require().NoError(err)
101
expectedContents := []byte("ELF EXECUTABLE IIRC")
103
suite.Require().EqualValues(hdr.Typeflag, tar.TypeReg)
104
suite.Require().EqualValues(hdr.Name, "cp")
105
suite.Require().EqualValues(hdr.Size, len(expectedContents))
107
contents, err := io.ReadAll(tr)
108
suite.Require().NoError(err)
110
suite.Require().Equal(expectedContents, contents)
114
func (suite *TarSuite) TestArchiveProcfs() {
115
ch, err := archiver.Walker(context.Background(), "/proc/self/", archiver.WithMaxRecurseDepth(0))
116
suite.Require().NoError(err)
121
archiver.Tar(context.Background(), ch, &buf)
123
tr := tar.NewReader(&buf)
125
expectedNonZeroFiles := map[string]struct{}{
134
hdr, err := tr.Next()
139
suite.Require().NoError(err)
141
if _, expected := expectedNonZeroFiles[hdr.Name]; !expected {
145
suite.Assert().EqualValues(hdr.Typeflag, tar.TypeReg)
146
suite.Assert().NotZero(hdr.Size)
148
delete(expectedNonZeroFiles, hdr.Name)
151
suite.Assert().Empty(expectedNonZeroFiles)
154
func TestTarSuite(t *testing.T) {
155
suite.Run(t, new(TarSuite))