aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/archive_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-06-04 19:43:50 +0900
committerOphestra <cat@gensokyo.uk>2026-06-04 19:46:36 +0900
commit8e8410ce3850a34d8b79431eb89ce4a7b9f89a60 (patch)
tree7de96628652c65d149c4e1d09306145a298844ad /internal/pkg/archive_test.go
parent8fb6fdaa80e793928f80c45d058aa5aebf79e78b (diff)
internal/pkg: archive unpack artifact
This unpacks an internal/pkg archive stream used in the upcoming mirror service. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/archive_test.go')
-rw-r--r--internal/pkg/archive_test.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/internal/pkg/archive_test.go b/internal/pkg/archive_test.go
index e04f3a66..29383eda 100644
--- a/internal/pkg/archive_test.go
+++ b/internal/pkg/archive_test.go
@@ -4,11 +4,13 @@ import (
"bytes"
"io"
"io/fs"
+ "maps"
"reflect"
"testing"
"testing/fstest"
"unsafe"
+ "hakurei.app/check"
"hakurei.app/internal/pkg"
)
@@ -168,6 +170,46 @@ var archiveTestdata = fstest.MapFS{
"block/uevent": {Mode: 0600},
}
+func TestArchiveArtifact(t *testing.T) {
+ t.Parallel()
+
+ want := maps.Clone(archiveTestdata)
+ want["."].Mode = fs.ModeDir | 0500
+
+ checkWithCache(t, []cacheTestCase{
+ {"unpack", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ var buf bytes.Buffer
+ if err := pkg.Write(archiveTestdata, ".", &buf); err != nil {
+ t.Fatal(err)
+ }
+
+ cureMany(t, c, []cureStep{
+ {"sample", pkg.NewArchive(
+ pkg.NewFile("", buf.Bytes()),
+ ), ignorePathname, expectsFS(want), nil},
+ })
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F": {Mode: fs.ModeDir | 0500},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/block": {Mode: fs.ModeDir | 0700},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/block/uevent": {Mode: 0600},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/devices": {Mode: fs.ModeDir | 0700},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/devices/empty": {Mode: fs.ModeDir | 0700},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/devices/sub": {Mode: fs.ModeDir | 0700},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/devices/sub/uevent": {Mode: 0600, Data: []byte("add")},
+ "checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F/devices/uevent": {Mode: 0600, Data: []byte("add")},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/3oYyAbRJ_we7AgWo1BRcRcnxXFk3mAQ0Qui2nGQMi8GIJNJQtvUC6P2IeoA5mbjD": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/CBPcoVHuVUTVRCMbRl8J30RSSzm_tyfuXaZ-HlZsanY1sY50meOVmgaWDrGKbx9F")},
+
+ "substitute": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
+ })
+}
+
func BenchmarkArchiveRead(b *testing.B) {
var buf bytes.Buffer
if err := pkg.Write(archiveTestdata, ".", &buf); err != nil {