aboutsummaryrefslogtreecommitdiffhomepage
path: root/pkg/tar_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-09-16 13:39:20 +0900
committerOphestra <cat@gensokyo.uk>2026-09-16 13:39:20 +0900
commit56572324956cfaa9039f7d7b7885cb3fec22f3fb (patch)
tree49bce72a226c7162695e46c9ec22d68f5a51969b /pkg/tar_test.go
parentbbb6f349d3cf790fbd4f400201b816a2206b1769 (diff)
pkg: write tar status
This serves as a status indicator while fetching large tarballs, and preserves information otherwise stripped during unpacking. This is a revision of the tarArtifact to avoid inconsistent state from previously cured tarArtifact lacking their status files. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'pkg/tar_test.go')
-rw-r--r--pkg/tar_test.go51
1 files changed, 42 insertions, 9 deletions
diff --git a/pkg/tar_test.go b/pkg/tar_test.go
index 5462714f..28fec2d2 100644
--- a/pkg/tar_test.go
+++ b/pkg/tar_test.go
@@ -44,6 +44,24 @@ func TestTar(t *testing.T) {
}
wantExpandEncode := pkg.Encode(wantExpand.hash())
+ const (
+ wantStatus = `drwx------ checksum/
+drwx------ checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/
+-r-------- checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/check (2 bytes)
+drwx------ checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/
+Lrwxrwxrwx checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/libedac.so linkname /proc/nonexistent/libedac.so
+drwx------ checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP/lib/pkgconfig/
+drwx------ identifier/
+Lrwxrwxrwx identifier/HnySzeLQvSBZuTUcvfmLEX_OmH4yJWWH788NxuLuv7kVn8_uPM6Ks4rqFWM2NZJY linkname ../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP
+Lrwxrwxrwx identifier/Zx5ZG9BAwegNT3zQwCySuI2ktCXxNgxirkGLFjW4FW06PtojYVaCdtEw8yuntPLa linkname ../checksum/1TL00Qb8dcqayX7wTO8WNaraHvY6b-KCsctLDTrb64QBCmxj_-byK1HdIUwMaFEP
+drwx------ work/
+`
+
+ wantStatusExpand = `drwx------ lib/
+Lrwxrwxrwx lib/libedac.so linkname /proc/nonexistent/libedac.so
+`
+ )
+
checkWithCache(t, []cacheTestCase{
{"http", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
checkTarHTTP(t, base, c, fstest.MapFS{
@@ -79,8 +97,12 @@ func TestTar(t *testing.T) {
"checksum/" + wantEncode + "/work": {Mode: fs.ModeDir | 0500},
"identifier": {Mode: fs.ModeDir | 0700},
- "identifier/snWp53xxNdx6cV5KSJqzyVWzLlTsFd8udOisIu8Rgxly09mGcxufYCoQ5CQrHDyZ": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantEncode)},
- "identifier/v9DUj2R4YK_3ae0m9VuUYI-HJysDDCENu1k10thxioycRzFH1Qejw5bBGukm4IdL": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantEncode)},
+ "identifier/82-Dwiovp_DGXPBmnmrTk4XtsduvTBBXxnJTBgyp6avsUhjcqmL9yKQLxkwJJM0x": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantEncode)},
+ "identifier/ld6DxwiP2Gj47Ue2L_pFv6NrOth8nkU5W1voMyivd2aVROrorGqPlpbyHUnU1AvI": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantEncode)},
+
+ "status": {Mode: fs.ModeDir | 0700},
+ "status/82-Dwiovp_DGXPBmnmrTk4XtsduvTBBXxnJTBgyp6avsUhjcqmL9yKQLxkwJJM0x": {Mode: 0400, Data: []byte(statusHeader + wantStatus)},
+ "status/ld6DxwiP2Gj47Ue2L_pFv6NrOth8nkU5W1voMyivd2aVROrorGqPlpbyHUnU1AvI": {Mode: 0400, Data: []byte(statusHeader + wantStatus)},
"substitute": {Mode: fs.ModeDir | 0700},
@@ -103,8 +125,12 @@ func TestTar(t *testing.T) {
"checksum/" + wantExpandEncode + "/libedac.so": {Mode: fs.ModeSymlink | 0777, Data: []byte("/proc/nonexistent/libedac.so")},
"identifier": {Mode: fs.ModeDir | 0700},
- "identifier/1SuvgGltcsgqps9tWqjULG8RCdpx_6KVWXdsMd5xPKvdtysOxqpE-3bLu4j0WpGk": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantExpandEncode)},
- "identifier/snWp53xxNdx6cV5KSJqzyVWzLlTsFd8udOisIu8Rgxly09mGcxufYCoQ5CQrHDyZ": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantExpandEncode)},
+ "identifier/82-Dwiovp_DGXPBmnmrTk4XtsduvTBBXxnJTBgyp6avsUhjcqmL9yKQLxkwJJM0x": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantExpandEncode)},
+ "identifier/fsMFOV4_LoYWbC8GNqL2zjbpzNzT80vPWbSw4L47caKVIta333WIW2TZXoSW8ntH": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/" + wantExpandEncode)},
+
+ "status": {Mode: fs.ModeDir | 0700},
+ "status/82-Dwiovp_DGXPBmnmrTk4XtsduvTBBXxnJTBgyp6avsUhjcqmL9yKQLxkwJJM0x": {Mode: 0400, Data: []byte(statusHeader + wantStatusExpand)},
+ "status/fsMFOV4_LoYWbC8GNqL2zjbpzNzT80vPWbSw4L47caKVIta333WIW2TZXoSW8ntH": {Mode: 0400, Data: []byte(statusHeader + wantStatusExpand)},
"substitute": {Mode: fs.ModeDir | 0700},
@@ -206,13 +232,13 @@ func checkTarHTTP(
{"directory", pkg.NewTar(&tarDir), ignorePathname, want, pkg.WNew, nil},
- {"multiple entries", pkg.NewTar(&tarDirMulti), nil, nil, pkg.WNew, errors.New(
+ {"multiple entries", pkg.NewTar(&tarDirMulti), nil, nil, pkg.WNew, errors.Join(errors.New(
"input directory does not contain a single regular file",
- )},
+ ))},
- {"bad type", pkg.NewTar(&tarDirType), nil, nil, pkg.WNew, errors.New(
+ {"bad type", pkg.NewTar(&tarDirType), nil, nil, pkg.WNew, errors.Join(errors.New(
"input directory does not contain a single regular file",
- )},
+ ))},
{"error passthrough", pkg.NewTar(&stubArtifact{
kind: pkg.KindExec,
@@ -220,6 +246,13 @@ func checkTarHTTP(
cure: func(t *pkg.TContext) error {
return stub.UniqueError(0xcafe)
},
- }), nil, nil, pkg.WNew, stub.UniqueError(0xcafe)},
+ }), nil, nil, pkg.WNew, errors.Join(stub.UniqueError(0xcafe))},
})
+
+ fault := base.Append("fault")
+ if err := os.RemoveAll(fault.String()); err != nil {
+ t.Fatal(err)
+ } else if err = os.Mkdir(fault.String(), 0); err != nil {
+ t.Fatal(err)
+ }
}