diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-01-05 01:42:29 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-01-05 01:43:23 +0900 |
| commit | b98d27f773d74059e92bd5d4169e1347eeb4a6d9 (patch) | |
| tree | 35f97260c84b0873f7dad44a5540dd70fb61232f /internal/pkg/tar_test.go | |
| parent | f3aa31e401e58ea20aa0c0fd09b55f237bbfb54a (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.go | 124 |
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, + }) + } } |
