aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/tar_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-01-05 01:42:29 +0900
committerOphestra <cat@gensokyo.uk>2026-01-05 01:43:23 +0900
commitb98d27f773d74059e92bd5d4169e1347eeb4a6d9 (patch)
tree35f97260c84b0873f7dad44a5540dd70fb61232f /internal/pkg/tar_test.go
parentf3aa31e401e58ea20aa0c0fd09b55f237bbfb54a (diff)
internal/pkg: expand single directory tarball
This enables much cleaner use of their output without giving up any meaningful data. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/tar_test.go')
-rw-r--r--internal/pkg/tar_test.go124
1 files changed, 71 insertions, 53 deletions
diff --git a/internal/pkg/tar_test.go b/internal/pkg/tar_test.go
index feff9c14..604ef61a 100644
--- a/internal/pkg/tar_test.go
+++ b/internal/pkg/tar_test.go
@@ -17,23 +17,48 @@ import (
func TestTar(t *testing.T) {
t.Parallel()
- testdataFsys := fstest.MapFS{
- ".": {Mode: fs.ModeDir | 0700},
+ checkWithCache(t, []cacheTestCase{
+ {"http", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ checkTarHTTP(t, base, c, fstest.MapFS{
+ ".": {Mode: fs.ModeDir | 0700},
- "checksum": {Mode: fs.ModeDir | 0700},
- "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP": {Mode: fs.ModeDir | 0700},
- "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/check": {Mode: 0400, Data: []byte{0, 0}},
- "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib": {Mode: fs.ModeDir | 0700},
- "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/pkgconfig": {Mode: fs.ModeDir | 0700},
- "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/libedac.so": {Mode: 01000000777, Data: []byte("/proc/nonexistent/libedac.so")},
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP": {Mode: fs.ModeDir | 0700},
+ "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/check": {Mode: 0400, Data: []byte{0, 0}},
+ "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib": {Mode: fs.ModeDir | 0700},
+ "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/pkgconfig": {Mode: fs.ModeDir | 0700},
+ "checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/libedac.so": {Mode: fs.ModeSymlink | 0777, Data: []byte("/proc/nonexistent/libedac.so")},
- "identifier": {Mode: fs.ModeDir | 0700},
- "identifier/HnySzeLQvSBZuTUcvfmLEX_OmH4yJWWH788NxuLuv7kVn8_uPM6Ks4rqFWM2NZJY": {Mode: 01000000777, Data: []byte("../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP")},
- "identifier/Zx5ZG9BAwegNT3zQwCySuI2ktCXxNgxirkGLFjW4FW06PtojYVaCdtEw8yuntPLa": {Mode: 01000000777, Data: []byte("../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP")},
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/HnySzeLQvSBZuTUcvfmLEX_OmH4yJWWH788NxuLuv7kVn8_uPM6Ks4rqFWM2NZJY": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP")},
+ "identifier/Zx5ZG9BAwegNT3zQwCySuI2ktCXxNgxirkGLFjW4FW06PtojYVaCdtEw8yuntPLa": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP")},
- "work": {Mode: fs.ModeDir | 0700},
- }
+ "work": {Mode: fs.ModeDir | 0700},
+ }, pkg.MustDecode(
+ "yJlSb2A3jxaMLuKqwp1GwHOguAHddS9MjygF9ICEeegKfRvgLPdPmNh8mva47f8o",
+ ))
+ }, pkg.MustDecode("d14kfTvK8uyYIrMq-NUPGGIGmYKcFytmrsvEu5oXibVfmxhu7Y_dAt3rXpsHVSPM")},
+
+ {"http expand", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
+ checkTarHTTP(t, base, c, fstest.MapFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "lib": {Mode: fs.ModeDir | 0700},
+ "lib/libedac.so": {Mode: fs.ModeSymlink | 0777, Data: []byte("/proc/nonexistent/libedac.so")},
+ }, pkg.MustDecode(
+ "rY9_cYWgGWgGI2efznu9RP6bPnjM6I5CHFY2nGysnlbPDdOx_iIaiGKYesmMARwC",
+ ))
+ }, pkg.MustDecode("tqrqx8Ig_l9jjDywovatvg3btS-6hf182Ofzpjcrj2148NhobE_Xb7wrYptZoXFD")},
+ })
+}
+func checkTarHTTP(
+ t *testing.T,
+ base *check.Absolute,
+ c *pkg.Cache,
+ testdataFsys fs.FS,
+ wantChecksum pkg.Checksum,
+) {
var testdata string
{
var buf bytes.Buffer
@@ -68,47 +93,40 @@ func TestTar(t *testing.T) {
"testdata": {Data: []byte(testdata), Mode: 0400},
}))
- checkWithCache(t, []cacheTestCase{
- {"http", nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
- wantIdent := func() pkg.ID {
- h := sha512.New384()
- h.Write([]byte{byte(pkg.KindTar), 0, 0, 0, 0, 0, 0, 0})
- h.Write([]byte{pkg.TarGzip, 0, 0, 0, 0, 0, 0, 0})
- h.Write([]byte{byte(pkg.KindHTTPGet), 0, 0, 0, 0, 0, 0, 0})
- httpIdent := pkg.KindHTTPGet.Ident([]byte("file:///testdata"))
- h.Write(httpIdent[:])
- return pkg.ID(h.Sum(nil))
- }()
+ wantIdent := func() pkg.ID {
+ h := sha512.New384()
+ h.Write([]byte{byte(pkg.KindTar), 0, 0, 0, 0, 0, 0, 0})
+ h.Write([]byte{pkg.TarGzip, 0, 0, 0, 0, 0, 0, 0})
+ h.Write([]byte{byte(pkg.KindHTTPGet), 0, 0, 0, 0, 0, 0, 0})
+ httpIdent := pkg.KindHTTPGet.Ident([]byte("file:///testdata"))
+ h.Write(httpIdent[:])
+ return pkg.ID(h.Sum(nil))
+ }()
- a := pkg.NewHTTPGetTar(
- t.Context(),
- &client,
- "file:///testdata",
- testdataChecksum,
- pkg.TarGzip,
- )
+ a := pkg.NewHTTPGetTar(
+ t.Context(),
+ &client,
+ "file:///testdata",
+ testdataChecksum,
+ pkg.TarGzip,
+ )
- if id := pkg.Ident(a); id != wantIdent {
- t.Fatalf("Ident: %s, want %s", pkg.Encode(id), pkg.Encode(wantIdent))
- }
+ if id := pkg.Ident(a); id != wantIdent {
+ t.Fatalf("Ident: %s, want %s", pkg.Encode(id), pkg.Encode(wantIdent))
+ }
- wantPathname := base.Append(
- "identifier",
- pkg.Encode(wantIdent),
- )
- wantChecksum := pkg.MustDecode(
- "yJlSb2A3jxaMLuKqwp1GwHOguAHddS9MjygF9ICEeegKfRvgLPdPmNh8mva47f8o",
- )
- if pathname, checksum, err := c.Cure(a); err != nil {
- t.Fatalf("Cure: error = %v", err)
- } else if !pathname.Is(wantPathname) {
- t.Fatalf("Cure: %q, want %q", pathname, wantPathname)
- } else if checksum != wantChecksum {
- t.Fatalf("Cure: %v", &pkg.ChecksumMismatchError{
- Got: checksum,
- Want: wantChecksum,
- })
- }
- }, pkg.MustDecode("lmVlYEGNFkwGVpzzS8KYjGBVB6FCyPtk9ViX88zen0GgTKLgGqO6eFxb4dpcP6bR")},
- })
+ wantPathname := base.Append(
+ "identifier",
+ pkg.Encode(wantIdent),
+ )
+ if pathname, checksum, err := c.Cure(a); err != nil {
+ t.Fatalf("Cure: error = %v", err)
+ } else if !pathname.Is(wantPathname) {
+ t.Fatalf("Cure: %q, want %q", pathname, wantPathname)
+ } else if checksum != wantChecksum {
+ t.Fatalf("Cure: %v", &pkg.ChecksumMismatchError{
+ Got: checksum,
+ Want: wantChecksum,
+ })
+ }
}