aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/pkg_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-06 03:41:04 +0900
committerOphestra <cat@gensokyo.uk>2026-05-06 05:44:04 +0900
commitdfd26abf6c171fb7fb92ffd0091b539f38fcaf9c (patch)
tree4ef76541696998583d4b6329563a928d0d79128a /internal/pkg/pkg_test.go
parent617ee21647ef86be67e37a3df2413d08c6658799 (diff)
internal/pkg: improve output measuring
This significantly improves readability and maintainability. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/pkg_test.go')
-rw-r--r--internal/pkg/pkg_test.go323
1 files changed, 239 insertions, 84 deletions
diff --git a/internal/pkg/pkg_test.go b/internal/pkg/pkg_test.go
index f0145e47..793b1e82 100644
--- a/internal/pkg/pkg_test.go
+++ b/internal/pkg/pkg_test.go
@@ -16,9 +16,11 @@ import (
"path/filepath"
"reflect"
"strconv"
+ "strings"
"sync"
"syscall"
"testing"
+ "testing/fstest"
"unique"
"unsafe"
@@ -286,6 +288,99 @@ func TestIdent(t *testing.T) {
}
}
+// An expectsKnown describes an expected file or directory.
+type expectsKnown interface {
+ // hash returns the checksum of the represented data.
+ hash() (checksum pkg.Checksum)
+}
+
+// An expectsChecksum is a prepared checksum value.
+type expectsChecksum pkg.Checksum
+
+// hash returns e.
+func (e expectsChecksum) hash() pkg.Checksum { return e }
+
+// An expectsFile is the contents of a file expected by the test suite.
+type expectsFile []byte
+
+// hash computes the checksum of e.
+func (e expectsFile) hash() (checksum pkg.Checksum) {
+ h := sha512.New384()
+ h.Write(e)
+ h.Sum(checksum[:0])
+ return
+}
+
+// An expectsFS describes the state of a filesystem expected by the test suite.
+type expectsFS fstest.MapFS
+
+// hash computes the checksum of e.
+func (e expectsFS) hash() (checksum pkg.Checksum) {
+ if err := pkg.HashFS(&checksum, fstest.MapFS(e), "."); err != nil {
+ panic(err)
+ }
+ return
+}
+
+// expectsFrom generates expectsFS for a filesystem directory.
+func expectsFrom(pathname string) string {
+ var buf strings.Builder
+ buf.WriteString("expectsFS{\n")
+ if err := filepath.WalkDir(pathname, func(path string, d fs.DirEntry, err error) error {
+ if err != nil {
+ return err
+ }
+
+ var rel string
+ if rel, err = filepath.Rel(pathname, path); err != nil {
+ return err
+ }
+ buf.WriteString("\t" + strconv.Quote(rel) + ": {Mode: ")
+
+ var fi fs.FileInfo
+ if fi, err = d.Info(); err != nil {
+ return err
+ }
+ mode := fi.Mode()
+
+ switch {
+ case mode.IsDir():
+ buf.WriteString("fs.ModeDir | 0" +
+ strconv.FormatInt(int64(mode&^fs.ModeDir), 8))
+
+ case mode&fs.ModeSymlink != 0:
+ buf.WriteString("fs.ModeSymlink | 0" +
+ strconv.FormatInt(int64(mode&^fs.ModeSymlink), 8) +
+ ", Data: []byte(")
+ var linkname string
+ if linkname, err = os.Readlink(path); err != nil {
+ return err
+ }
+ buf.WriteString(strconv.Quote(linkname))
+ buf.WriteByte(')')
+
+ case mode.IsRegular():
+ buf.WriteString("0" + strconv.FormatInt(int64(mode), 8))
+ var p []byte
+ if p, err = os.ReadFile(path); err != nil {
+ return err
+ }
+
+ if len(p) > 0 {
+ buf.WriteString(", Data: []byte(")
+ buf.WriteString(strconv.Quote(unsafe.String(unsafe.SliceData(p), len(p))))
+ buf.WriteByte(')')
+ }
+ }
+ buf.WriteString("},\n")
+ return nil
+ }); err != nil {
+ panic(err)
+ }
+ buf.WriteString("}")
+ return buf.String()
+}
+
// cacheTestCase is a test case passed to checkWithCache where a new instance
// of [pkg.Cache] is prepared for the test case, and is validated and removed
// on test completion.
@@ -294,7 +389,7 @@ type cacheTestCase struct {
flags int
early func(t *testing.T, base *check.Absolute)
f func(t *testing.T, base *check.Absolute, c *pkg.Cache)
- want pkg.Checksum
+ want expectsFS
}
// checkWithCache runs a slice of cacheTestCase.
@@ -381,15 +476,13 @@ func checkWithCache(t *testing.T, testCases []cacheTestCase) {
if err := os.RemoveAll(base.Append("status").String()); err != nil {
t.Fatal(err)
}
+ want := tc.want.hash()
var checksum pkg.Checksum
if err := pkg.HashDir(&checksum, base); err != nil {
t.Fatalf("HashDir: error = %v", err)
- } else if checksum != tc.want {
- t.Fatalf("HashDir: %v", &pkg.ChecksumMismatchError{
- Got: checksum,
- Want: tc.want,
- })
+ } else if checksum != want {
+ t.Fatal(expectsFrom(base.String()))
}
if err := scrubFunc(); err != nil {
@@ -408,10 +501,10 @@ func checkWithCache(t *testing.T, testCases []cacheTestCase) {
// validate again to make sure scrub did not condemn anything
if err := pkg.HashDir(&checksum, base); err != nil {
t.Fatalf("HashDir: error = %v", err)
- } else if checksum != tc.want {
+ } else if checksum != want {
t.Fatalf("(scrubbed) HashDir: %v", &pkg.ChecksumMismatchError{
Got: checksum,
- Want: tc.want,
+ Want: want,
})
}
})
@@ -425,7 +518,7 @@ type cureStep struct {
a pkg.Artifact
pathname *check.Absolute
- checksum pkg.Checksum
+ output expectsKnown
err error
}
@@ -449,14 +542,12 @@ func cureMany(t *testing.T, c *pkg.Cache, steps []cureStep) {
t.Fatalf("Cure: error = %v, want %v", err, step.err)
} else if step.pathname != ignorePathname && !pathname.Is(step.pathname) {
t.Fatalf("Cure: pathname = %q, want %q", pathname, step.pathname)
- } else if checksum != makeChecksumH(step.checksum) {
- if checksum == (unique.Handle[pkg.Checksum]{}) {
- checksum = unique.Make(pkg.Checksum{})
+ } else if step.output == nil || checksum != makeChecksumH(step.output.hash()) {
+ if pathname != nil {
+ t.Fatal(expectsFrom(pathname.String()))
+ } else if checksum != (unique.Handle[pkg.Checksum]{}) {
+ t.Fatalf("Cure: unexpected checksum %s", pkg.Encode(checksum.Value()))
}
- t.Fatalf(
- "Cure: checksum = %s, want %s",
- pkg.Encode(checksum.Value()), pkg.Encode(step.checksum),
- )
} else {
v := any(err)
if err == nil {
@@ -517,18 +608,12 @@ func newWantScrubError(base *check.Absolute) *pkg.ScrubError {
func TestCache(t *testing.T) {
t.Parallel()
- const testdata = "" +
+ testdata := expectsFile("" +
"\x00\x00\x00\x00" +
"\xad\x0b\x00" +
"\x04" +
"\xfe\xfe\x00\x00" +
- "\xfe\xca\x00\x00"
-
- testdataChecksum := func() pkg.Checksum {
- h := sha512.New384()
- h.Write([]byte(testdata))
- return (pkg.Checksum)(h.Sum(nil))
- }()
+ "\xfe\xca\x00\x00")
testCases := []cacheTestCase{
{"file", pkg.CValidateKnown | pkg.CAssumeChecksum, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
@@ -551,31 +636,31 @@ func TestCache(t *testing.T) {
{"initial file", newStubFile(
pkg.KindHTTPGet,
identifier,
- &testdataChecksum,
- []byte(testdata), nil,
- ), wantPathname, testdataChecksum, nil},
+ new(testdata.hash()),
+ testdata, nil,
+ ), wantPathname, testdata, nil},
{"identical content", newStubFile(
pkg.KindHTTPGet,
identifier0,
- &testdataChecksum,
- []byte(testdata), nil,
- ), wantPathname0, testdataChecksum, nil},
+ new(testdata.hash()),
+ testdata, nil,
+ ), wantPathname0, testdata, nil},
{"existing entry", newStubFile(
pkg.KindHTTPGet,
identifier,
- &testdataChecksum,
- []byte(testdata), nil,
- ), wantPathname, testdataChecksum, nil},
+ new(testdata.hash()),
+ testdata, nil,
+ ), wantPathname, testdata, nil},
{"checksum mismatch", newStubFile(
pkg.KindHTTPGet,
pkg.ID{0xff, 0},
new(pkg.Checksum),
- []byte(testdata), nil,
- ), nil, pkg.Checksum{}, &pkg.ChecksumMismatchError{
- Got: testdataChecksum,
+ testdata, nil,
+ ), nil, nil, &pkg.ChecksumMismatchError{
+ Got: testdata.hash(),
}},
{"store without validation", newStubFile(
@@ -586,7 +671,7 @@ func TestCache(t *testing.T) {
), base.Append(
"identifier",
"vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX",
- ), pkg.Checksum{
+ ), expectsChecksum{
0xbe, 0xc0, 0x21, 0xb4, 0xf3, 0x68,
0xe3, 0x06, 0x91, 0x34, 0xe0, 0x12,
0xc2, 0xb4, 0x30, 0x70, 0x83, 0xd3,
@@ -600,7 +685,7 @@ func TestCache(t *testing.T) {
{"incomplete implementation", struct{ pkg.Artifact }{&stubArtifact{
kind: pkg.KindExec,
params: []byte("artifact overridden to be incomplete"),
- }}, nil, pkg.Checksum{}, pkg.InvalidArtifactError(pkg.MustDecode(
+ }}, nil, nil, pkg.InvalidArtifactError(pkg.MustDecode(
"E__uZ1sLIvb84vzSm5Uezb03RogsiaeTt1nfIVv8TKnnf4LqwtSi-smdHhlkZrUJ",
))},
@@ -609,18 +694,18 @@ func TestCache(t *testing.T) {
pkg.ID{0xff, 1},
nil,
nil, stub.UniqueError(0xcafe),
- ), nil, pkg.Checksum{}, stub.UniqueError(0xcafe)},
+ ), nil, nil, stub.UniqueError(0xcafe)},
{"error caching", newStubFile(
pkg.KindHTTPGet,
pkg.ID{0xff, 1},
nil,
nil, nil,
- ), nil, pkg.Checksum{}, stub.UniqueError(0xcafe)},
+ ), nil, nil, stub.UniqueError(0xcafe)},
- {"cache hit bad type", overrideChecksum{testdataChecksum, overrideIdent{pkg.ID{0xff, 2}, &stubArtifact{
+ {"cache hit bad type", overrideChecksum{testdata.hash(), overrideIdent{pkg.ID{0xff, 2}, &stubArtifact{
kind: pkg.KindTar,
- }}}, nil, pkg.Checksum{}, pkg.InvalidFileModeError(
+ }}}, nil, nil, pkg.InvalidFileModeError(
0400,
)},
@@ -640,7 +725,7 @@ func TestCache(t *testing.T) {
cure: func(f *pkg.FContext) error {
panic("attempting to cure impossible artifact")
},
- }, nil, pkg.Checksum{}, &pkg.DependencyCureError{
+ }, nil, nil, &pkg.DependencyCureError{
{
Ident: unique.Make(pkg.ID{0xff, 3}),
Err: struct {
@@ -662,18 +747,18 @@ func TestCache(t *testing.T) {
cureMany(t, c0, []cureStep{
{"cache hit ident", overrideIdent{
id: identifier,
- }, wantPathname, testdataChecksum, nil},
+ }, wantPathname, testdata, nil},
{"cache miss checksum match", newStubFile(
pkg.KindHTTPGet,
- testdataChecksum,
+ testdata.hash(),
nil,
- []byte(testdata),
+ testdata,
nil,
), base.Append(
"identifier",
- pkg.Encode(testdataChecksum),
- ), testdataChecksum, nil},
+ pkg.Encode(testdata.hash()),
+ ), testdata, nil},
})
// cure after close
@@ -686,7 +771,21 @@ func TestCache(t *testing.T) {
t.Fatalf("(closed) Cure: error = %v", err)
}
}
- }, pkg.MustDecode("St9rlE-mGZ5gXwiv_hzQ_B8bZP-UUvSNmf4nHUZzCMOumb6hKnheZSe0dmnuc4Q2")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX": {Mode: 0400, Data: []byte{0}},
+ "checksum/0bSFPu5Tnd-2Jj0Mv6co23PW2t3BmHc7eLFj9TgY3eIBg8zislo7xZYNBqovVLcq": {Mode: 0400, Data: []byte{0, 0, 0, 0, 0xad, 0xb, 0, 4, 0xfe, 0xfe, 0, 0, 0xfe, 0xca, 0, 0}},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/vsAhtPNo4waRNOASwrQwcIPTqb3SBuJOXw2G4T1mNmVZM-wrQTRllmgXqcIIoRcX")},
+ "identifier/0bSFPu5Tnd-2Jj0Mv6co23PW2t3BmHc7eLFj9TgY3eIBg8zislo7xZYNBqovVLcq": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/0bSFPu5Tnd-2Jj0Mv6co23PW2t3BmHc7eLFj9TgY3eIBg8zislo7xZYNBqovVLcq")},
+ "identifier/cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/0bSFPu5Tnd-2Jj0Mv6co23PW2t3BmHc7eLFj9TgY3eIBg8zislo7xZYNBqovVLcq")},
+ "identifier/deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/0bSFPu5Tnd-2Jj0Mv6co23PW2t3BmHc7eLFj9TgY3eIBg8zislo7xZYNBqovVLcq")},
+
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
{"directory", pkg.CAssumeChecksum, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
id := pkg.MustDecode(
@@ -721,9 +820,16 @@ func TestCache(t *testing.T) {
).String(),
)
}
- wantChecksum := pkg.MustDecode(
- "qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b",
- )
+ want := expectsFS{
+ ".": {Mode: fs.ModeDir | 0500},
+
+ "check": {Mode: 0400, Data: []byte{0, 0}},
+
+ "lib": {Mode: fs.ModeDir | 0700},
+ "lib/libedac.so": {Mode: fs.ModeSymlink | 0777, Data: []byte("/proc/nonexistent/libedac.so")},
+
+ "lib/pkgconfig": {Mode: fs.ModeDir | 0700},
+ }
wantPathname := base.Append(
"identifier",
pkg.Encode(id),
@@ -777,33 +883,33 @@ func TestCache(t *testing.T) {
}
cureMany(t, c, []cureStep{
- {"initial directory", overrideChecksum{wantChecksum, overrideIdent{id, &stubArtifact{
+ {"initial directory", overrideChecksum{want.hash(), overrideIdent{id, &stubArtifact{
kind: pkg.KindTar,
cure: makeSample,
- }}}, wantPathname, wantChecksum, nil},
+ }}}, wantPathname, want, nil},
- {"identical identifier", overrideChecksum{wantChecksum, overrideIdent{id, &stubArtifact{
+ {"identical identifier", overrideChecksum{want.hash(), overrideIdent{id, &stubArtifact{
kind: pkg.KindTar,
- }}}, wantPathname, wantChecksum, nil},
+ }}}, wantPathname, want, nil},
{"identical checksum", overrideIdent{id0, &stubArtifact{
kind: pkg.KindTar,
cure: makeSample,
- }}, wantPathname0, wantChecksum, nil},
+ }}, wantPathname0, want, nil},
{"cure fault", overrideIdent{pkg.ID{0xff, 0}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return makeGarbage(t.GetWorkDir(), stub.UniqueError(0xcafe))
},
- }}, nil, pkg.Checksum{}, stub.UniqueError(0xcafe)},
+ }}, nil, nil, stub.UniqueError(0xcafe)},
{"checksum mismatch", overrideChecksum{pkg.Checksum{}, overrideIdent{pkg.ID{0xff, 1}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return makeGarbage(t.GetWorkDir(), nil)
},
- }}}, nil, pkg.Checksum{}, &pkg.ChecksumMismatchError{
+ }}}, nil, nil, &pkg.ChecksumMismatchError{
Got: pkg.MustDecode(
"CUx-3hSbTWPsbMfDhgalG4Ni_GmR9TnVX8F99tY_P5GtkYvczg9RrF5zO0jX9XYT",
),
@@ -812,27 +918,27 @@ func TestCache(t *testing.T) {
{"cache hit bad type", newStubFile(
pkg.KindHTTPGet,
pkg.ID{0xff, 2},
- &wantChecksum,
- []byte(testdata), nil,
- ), nil, pkg.Checksum{}, pkg.InvalidFileModeError(
+ new(want.hash()),
+ testdata, nil,
+ ), nil, nil, pkg.InvalidFileModeError(
fs.ModeDir | 0500,
)},
{"openFile directory", overrideIdent{pkg.ID{0xff, 3}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
- r, err := t.Open(overrideChecksumFile{checksum: wantChecksum})
+ r, err := t.Open(overrideChecksumFile{checksum: want.hash()})
if err != nil {
panic(err)
}
_, err = io.ReadAll(r)
return err
},
- }}, nil, pkg.Checksum{}, &os.PathError{
+ }}, nil, nil, &os.PathError{
Op: "read",
Path: base.Append(
"checksum",
- pkg.Encode(wantChecksum),
+ pkg.Encode(want.hash()),
).String(),
Err: syscall.EISDIR,
}},
@@ -842,14 +948,14 @@ func TestCache(t *testing.T) {
cure: func(t *pkg.TContext) error {
return nil
},
- }}, nil, pkg.Checksum{}, pkg.NoOutputError{}},
+ }}, nil, nil, pkg.NoOutputError{}},
{"file output", overrideIdent{pkg.ID{0xff, 5}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return os.WriteFile(t.GetWorkDir().String(), []byte{0}, 0400)
},
- }}, nil, pkg.Checksum{}, errors.New("non-file artifact produced regular file")},
+ }}, nil, nil, errors.New("non-file artifact produced regular file")},
{"symlink output", overrideIdent{pkg.ID{0xff, 6}, &stubArtifact{
kind: pkg.KindTar,
@@ -859,11 +965,26 @@ func TestCache(t *testing.T) {
t.GetWorkDir().String(),
)
},
- }}, nil, pkg.Checksum{}, pkg.InvalidFileModeError(
+ }}, nil, nil, pkg.InvalidFileModeError(
fs.ModeSymlink | 0777,
)},
})
- }, pkg.MustDecode("WVpvsVqVKg9Nsh744x57h51AuWUoUR2nnh8Md-EYBQpk6ziyTuUn6PLtF2e0Eu_d")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b": {Mode: fs.ModeDir | 0500},
+ "checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b/check": {Mode: 0400, Data: []byte{0, 0}},
+ "checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b/lib": {Mode: fs.ModeDir | 0700},
+ "checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b/lib/pkgconfig": {Mode: fs.ModeDir | 0700},
+ "checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b/lib/libedac.so": {Mode: fs.ModeSymlink | 0777, Data: []byte("/proc/nonexistent/libedac.so")},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/HnySzeLQvSBZuTUcvfmLEX_OmH4yJWWH788NxuLuv7kVn8_uPM6Ks4rqFWM2NZJY": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b")},
+ "identifier/Zx5ZG9BAwegNT3zQwCySuI2ktCXxNgxirkGLFjW4FW06PtojYVaCdtEw8yuntPLa": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/qRN6in76LndiiOZJheHkwyW8UT1N5-f-bXvHfDvwrMw2fSkOoZdh8pWE1qhLk65b")},
+
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
{"pending", pkg.CValidateKnown, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
wantErr := stub.UniqueError(0xcafe)
@@ -899,7 +1020,7 @@ func TestCache(t *testing.T) {
pkg.ID{0xff, 1},
nil,
nil, stub.UniqueError(0xbad),
- ), nil, pkg.Checksum{}, stub.UniqueError(0xbad)},
+ ), nil, nil, stub.UniqueError(0xbad)},
{"file output", overrideIdent{pkg.ID{0xff, 2}, &stubArtifact{
kind: pkg.KindTar,
@@ -910,7 +1031,7 @@ func TestCache(t *testing.T) {
0400,
)
},
- }}, nil, pkg.Checksum{}, errors.New(
+ }}, nil, nil, errors.New(
"non-file artifact produced regular file",
)},
})
@@ -932,7 +1053,12 @@ func TestCache(t *testing.T) {
for c.Done(unique.Make(pkg.ID{0xff})) != nil {
}
<-wCureDone
- }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
{"cancel abort block", pkg.CValidateKnown, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
var wg sync.WaitGroup
@@ -985,7 +1111,12 @@ func TestCache(t *testing.T) {
c.Close()
c.Abort()
- }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
{"no assume checksum", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
makeGarbage := func(work *check.Absolute, wantErr error) error {
@@ -1002,10 +1133,12 @@ func TestCache(t *testing.T) {
return wantErr
}
- wantChecksum := pkg.MustDecode("Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M")
+ want := expectsChecksum(pkg.MustDecode(
+ "Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M",
+ ))
cureMany(t, c, []cureStep{
- {"create", overrideChecksum{wantChecksum, overrideIdent{pkg.ID{0xff, 0}, &stubArtifact{
+ {"create", overrideChecksum{want.hash(), overrideIdent{pkg.ID{0xff, 0}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return makeGarbage(t.GetWorkDir(), nil)
@@ -1013,16 +1146,16 @@ func TestCache(t *testing.T) {
}}}, base.Append(
"identifier",
pkg.Encode(pkg.ID{0xff, 0}),
- ), wantChecksum, nil},
+ ), want, nil},
- {"reject", overrideChecksum{wantChecksum, overrideIdent{pkg.ID{0xfe, 1}, &stubArtifact{
+ {"reject", overrideChecksum{want.hash(), overrideIdent{pkg.ID{0xfe, 1}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return makeGarbage(t.GetWorkDir(), stub.UniqueError(0xbad))
},
- }}}, nil, pkg.Checksum{}, stub.UniqueError(0xbad)},
+ }}}, nil, nil, stub.UniqueError(0xbad)},
- {"match", overrideChecksum{wantChecksum, overrideIdent{pkg.ID{0xff, 1}, &stubArtifact{
+ {"match", overrideChecksum{want.hash(), overrideIdent{pkg.ID{0xff, 1}, &stubArtifact{
kind: pkg.KindTar,
cure: func(t *pkg.TContext) error {
return makeGarbage(t.GetWorkDir(), nil)
@@ -1030,9 +1163,21 @@ func TestCache(t *testing.T) {
}}}, base.Append(
"identifier",
pkg.Encode(pkg.ID{0xff, 1}),
- ), wantChecksum, nil},
+ ), want, nil},
})
- }, pkg.MustDecode("OC290t23aimNo2Rp2pPwan5GI2KRLRdOwYxXQMD9jw0QROgHnNXWodoWdV0hwu2w")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "checksum/Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M": {Mode: fs.ModeDir | 0500},
+ "checksum/Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M/check": {Mode: 0400, Data: []byte{}},
+
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "identifier/_wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M")},
+ "identifier/_wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA": {Mode: fs.ModeSymlink | 0777, Data: []byte("../checksum/Aubi5EG4_Y8DhL9bQ3Q4HFBhLRF7X5gt9D3CNCQfT-TeBtlRXc7Zi_JYZEMoCC7M")},
+
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
{"scrub", 0, nil, func(t *testing.T, base *check.Absolute, c *pkg.Cache) {
cureMany(t, c, []cureStep{
@@ -1044,7 +1189,7 @@ func TestCache(t *testing.T) {
), base.Append(
"identifier",
pkg.Encode(pkg.Checksum{0xfe, 0}),
- ), pkg.Checksum{0xff, 0}, nil},
+ ), expectsChecksum{0xff, 0}, nil},
})
for _, p := range [][]string{
@@ -1077,7 +1222,12 @@ func TestCache(t *testing.T) {
if err := c.Scrub(1 << 6); !reflect.DeepEqual(err, wantErr) {
t.Fatalf("Scrub: error =\n%s\nwant\n%s", err, wantErr)
}
- }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
}
checkWithCache(t, testCases)
}
@@ -1351,7 +1501,12 @@ func TestDependencyCureErrorEarly(t *testing.T) {
if !errors.Is(err, stub.UniqueError(0xcafe)) {
t.Fatalf("Cure: error = %v", err)
}
- }, pkg.MustDecode("E4vEZKhCcL2gPZ2Tt59FS3lDng-d_2SKa2i5G_RbDfwGn6EemptFaGLPUDiOa94C")},
+ }, expectsFS{
+ ".": {Mode: fs.ModeDir | 0700},
+ "checksum": {Mode: fs.ModeDir | 0700},
+ "identifier": {Mode: fs.ModeDir | 0700},
+ "work": {Mode: fs.ModeDir | 0700},
+ }},
})
}