aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/compress_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-06-04 18:12:03 +0900
committerOphestra <cat@gensokyo.uk>2026-06-04 18:33:04 +0900
commit76c1fb84c87ba12a22b64f7c471a92603365837f (patch)
treede04c0a8a45a636ebe78fd06b3097e5b8493e9cc /internal/pkg/compress_test.go
parent729be19af39fb73e827bdb2798ac23942f9cf9e5 (diff)
internal/pkg: stream decompress artifact
The tarArtifact predates FileArtifact pipelining. This migrates decompression and buffering into a standalone artifact implementation. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/compress_test.go')
-rw-r--r--internal/pkg/compress_test.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/internal/pkg/compress_test.go b/internal/pkg/compress_test.go
new file mode 100644
index 00000000..5b542dce
--- /dev/null
+++ b/internal/pkg/compress_test.go
@@ -0,0 +1,70 @@
+package pkg_test
+
+import (
+ "bytes"
+ "compress/gzip"
+ "crypto/sha512"
+ "io/fs"
+ "net/http"
+ "testing"
+ "testing/fstest"
+
+ "hakurei.app/check"
+ "hakurei.app/internal/pkg"
+)
+
+func TestDecompress(t *testing.T) {
+ t.Parallel()
+
+ var buf bytes.Buffer
+ gw := gzip.NewWriter(&buf)
+ if _, err := gw.Write([]byte{0}); err != nil {
+ t.Fatal(err)
+ } else if err = gw.Close(); err != nil {
+ t.Fatal(err)
+ }
+ testdata := buf.String()
+
+ var transport http.Transport
+ client := http.Client{Transport: &transport}
+ transport.RegisterProtocol("file", http.NewFileTransportFS(fstest.MapFS{
+ "testdata": {Data: []byte(testdata), Mode: 0400},
+ }))
+ testdataChecksum := func() pkg.Checksum {
+ h := sha512.New384()
+ h.Write([]byte(testdata))
+ return (pkg.Checksum)(h.Sum(nil))
+ }()
+
+ checkWithCache(t, []cacheTestCase{
+ {"decompress", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ cureMany(t, c, []cureStep{
+ {"close", pkg.NewDecompress(pkg.NewHTTPGet(
+ &client,
+ "file:///testdata",
+ pkg.Checksum{0xfd},
+ ), pkg.Gzip), nil, nil, &pkg.ChecksumMismatchError{
+ Got: testdataChecksum,
+ Want: pkg.Checksum{0xfd},
+ }},
+
+ {"gzip", pkg.NewDecompress(pkg.NewHTTPGet(
+ &client,
+ "file:///testdata",
+ testdataChecksum,
+ ), pkg.Gzip), ignorePathname, expectsChecksum(sha512.Sum384([]byte{0})), nil},
+ })
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/" + pkg.Encode(sha512.Sum384([]byte{0})): {Mode: 0400, Data: []byte{0}},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/QpjkahDrz7pz-tv0eAGNXR6x9NAtTjWCK5Hr7G1cIZj9rT7bLYJWUQeLD4wamAlF": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX")},
+
+ "substitute": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
+ })
+}