aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/dir_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-06-03 15:51:43 +0900
committerOphestra <cat@gensokyo.uk>2026-06-03 16:00:36 +0900
commit42cea1e7c6d1ea0658e6b4d2a1f12f98b9c0dd22 (patch)
tree5e04f8ff2ea2d32405c2a11fad3ea966bade27f3 /internal/pkg/dir_test.go
parent83498b5a8af4edc6e4f9408fec2d527c2be982a7 (diff)
internal/pkg: streaming archive reader/writer
This is much more robust and efficient than the simple buffering implementation for larger files. Allocations happen almost exclusively in WalkDir. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/dir_test.go')
-rw-r--r--internal/pkg/dir_test.go134
1 files changed, 0 insertions, 134 deletions
diff --git a/internal/pkg/dir_test.go b/internal/pkg/dir_test.go
deleted file mode 100644
index f9e4a999..00000000
--- a/internal/pkg/dir_test.go
+++ /dev/null
@@ -1,134 +0,0 @@
-package pkg_test
-
-import (
- "bytes"
- "io/fs"
- "reflect"
- "testing"
- "testing/fstest"
-
- "hakurei.app/internal/pkg"
-)
-
-func TestFlatten(t *testing.T) {
- t.Parallel()
-
- testCases := []struct {
- name string
- fsys fs.FS
- entries []pkg.FlatEntry
- sum pkg.Checksum
- err error
- }{
- {"bad type", fstest.MapFS{
- ".": {Mode: fs.ModeDir | 0700},
- "invalid": {Mode: fs.ModeCharDevice | 0400},
- }, nil, pkg.Checksum{}, pkg.InvalidFileModeError(
- fs.ModeCharDevice | 0400,
- )},
-
- {"coldboot", fstest.MapFS{
- ".": {Mode: fs.ModeDir | 0700},
-
- "devices": {Mode: fs.ModeDir | 0700},
- "devices/uevent": {Mode: 0600, Data: []byte("add")},
- "devices/empty": {Mode: fs.ModeDir | 0700},
-
- "devices/sub": {Mode: fs.ModeDir | 0700},
- "devices/sub/uevent": {Mode: 0600, Data: []byte("add")},
-
- "block": {Mode: fs.ModeDir | 0700},
- "block/uevent": {Mode: 0600, Data: []byte{}},
- }, []pkg.FlatEntry{
- {Mode: fs.ModeDir | 0700, Path: "."},
-
- {Mode: fs.ModeDir | 0700, Path: "block"},
- {Mode: 0600, Path: "block/uevent", Data: []byte{}},
-
- {Mode: fs.ModeDir | 0700, Path: "devices"},
- {Mode: fs.ModeDir | 0700, Path: "devices/empty"},
- {Mode: fs.ModeDir | 0700, Path: "devices/sub"},
- {Mode: 0600, Path: "devices/sub/uevent", Data: []byte("add")},
- {Mode: 0600, Path: "devices/uevent", Data: []byte("add")},
- }, pkg.MustDecode("mEy_Lf5KotThm7OwMx7yTKZh5HCCyaB41pVAvI9uDMgVQFM91iosBLYsRm8bDsX8"), nil},
-
- {"empty", fstest.MapFS{
- ".": {Mode: fs.ModeDir | 0700},
- "checksum": {Mode: fs.ModeDir | 0700},
- "identifier": {Mode: fs.ModeDir | 0700},
- "work": {Mode: fs.ModeDir | 0700},
- }, []pkg.FlatEntry{
- {Mode: fs.ModeDir | 0700, Path: "."},
- {Mode: fs.ModeDir | 0700, Path: "checksum"},
- {Mode: fs.ModeDir | 0700, Path: "identifier"},
- {Mode: fs.ModeDir | 0700, Path: "work"},
- }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C"), nil},
-
- {"sample directory step garbage", fstest.MapFS{
- ".": {Mode: fs.ModeDir | 0500},
-
- "lib": {Mode: fs.ModeDir | 0500},
- "lib/check": {Mode: 0400, Data: []byte{}},
-
- "lib/pkgconfig": {Mode: fs.ModeDir | 0500},
- }, []pkg.FlatEntry{
- {Mode: fs.ModeDir | 0500, Path: "."},
-
- {Mode: fs.ModeDir | 0500, Path: "lib"},
- {Mode: 0400, Path: "lib/check", Data: []byte{}},
-
- {Mode: fs.ModeDir | 0500, Path: "lib/pkgconfig"},
- }, pkg.MustDecode("CUx-3hSbTWPsbMfDhgalG4Ni_GmR9TnVX8F99tY_P5GtkYvczg9RrF5zO0jX9XYT"), nil},
- }
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- t.Parallel()
-
- t.Run("roundtrip", func(t *testing.T) {
- t.Parallel()
-
- var buf bytes.Buffer
- if _, err := pkg.Flatten(
- tc.fsys,
- ".",
- &buf,
- ); !reflect.DeepEqual(err, tc.err) {
- t.Fatalf("Flatten: error = %v, want %v", err, tc.err)
- } else if tc.err != nil {
- return
- }
-
- s := pkg.NewDirScanner(bytes.NewReader(buf.Bytes()), true)
- var got []pkg.FlatEntry
- for s.Scan() {
- got = append(got, *s.Entry())
- }
- if err := s.Err(); err != nil {
- t.Fatalf("Err: error = %v", err)
- }
-
- if !reflect.DeepEqual(got, tc.entries) {
- t.Fatalf("Scan: %#v, want %#v", got, tc.entries)
- }
- })
-
- if tc.err != nil {
- return
- }
-
- t.Run("hash", func(t *testing.T) {
- t.Parallel()
-
- var got pkg.Checksum
- if err := pkg.HashFS(&got, tc.fsys, "."); err != nil {
- t.Fatalf("HashFS: error = %v", err)
- } else if got != tc.sum {
- t.Fatalf("HashFS: %v", &pkg.ChecksumMismatchError{
- Got: got,
- Want: tc.sum,
- })
- }
- })
- })
- }
-}