diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-05-06 03:41:04 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-05-06 05:44:04 +0900 |
| commit | dfd26abf6c171fb7fb92ffd0091b539f38fcaf9c (patch) | |
| tree | 4ef76541696998583d4b6329563a928d0d79128a /internal/pkg/pkg_test.go | |
| parent | 617ee21647ef86be67e37a3df2413d08c6658799 (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.go | 323 |
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}, + }}, }) } |
