aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/osutil/tar_test.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-04-10 15:08:06 +0200
committerAleksandr Nogikh <nogikh@google.com>2025-04-11 10:07:50 +0000
commitdfb5be349af98db984a0944f49896f454e4bc8a6 (patch)
treedab54a5476b759b2ff9f4ce7a71b30a6ef1b02be /pkg/osutil/tar_test.go
parenta2335417592dcd4545c1953807ae9c8906e133d5 (diff)
pkg/osutil: add tar.gz generation helpers
Diffstat (limited to 'pkg/osutil/tar_test.go')
-rw-r--r--pkg/osutil/tar_test.go60
1 files changed, 60 insertions, 0 deletions
diff --git a/pkg/osutil/tar_test.go b/pkg/osutil/tar_test.go
new file mode 100644
index 000000000..a0e5a22bd
--- /dev/null
+++ b/pkg/osutil/tar_test.go
@@ -0,0 +1,60 @@
+// Copyright 2025 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package osutil
+
+import (
+ "archive/tar"
+ "bytes"
+ "io"
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestTarDirectory(t *testing.T) {
+ dir := t.TempDir()
+
+ items := map[string]string{
+ "file1.txt": "first file content",
+ "dir/file2.txt": "second file content",
+ "empty.txt": "",
+ }
+
+ for path, content := range items {
+ fullPath := filepath.Join(dir, path)
+ dirPath := filepath.Dir(fullPath)
+ if err := MkdirAll(dirPath); err != nil {
+ t.Fatalf("mkdir %q failed: %v", dirPath, err)
+ }
+ if err := WriteFile(fullPath, []byte(content)); err != nil {
+ t.Fatalf("write file failed: %v", err)
+ }
+ }
+
+ var buf bytes.Buffer
+ err := tarDirectory(dir, &buf)
+ assert.NoError(t, err)
+
+ tr := tar.NewReader(&buf)
+ found := make(map[string]string)
+ for {
+ hdr, err := tr.Next()
+ if err == io.EOF {
+ break
+ }
+ if err != nil {
+ t.Fatal(err)
+ }
+ if hdr.Typeflag == tar.TypeReg {
+ contentBytes, err := io.ReadAll(tr)
+ if err != nil {
+ t.Fatal(err)
+ }
+ found[hdr.Name] = string(contentBytes)
+ }
+ }
+
+ assert.Equal(t, items, found)
+}