package rosa import ( "hakurei.app/internal/pkg" ) func (t Toolchain) newHakurei(suffix, script string) pkg.Artifact { const ( version = "0.3.5" checksum = "6Tn38NLezRD2d3aGdFg5qFfqn8_KvC6HwMKwJMPvaHmVw8xRgxn8B0PObswl2mOk" ) return t.New("hakurei"+suffix+"-"+version, 0, []pkg.Artifact{ t.Load(Go), t.Load(Gzip), t.Load(PkgConfig), t.Load(KernelHeaders), t.Load(Libseccomp), t.Load(ACL), t.Load(Attr), t.Load(Fuse), t.Load(Xproto), t.Load(LibXau), t.Load(XCBProto), t.Load(XCB), t.Load(Libffi), t.Load(Libexpat), t.Load(Libxml2), t.Load(Wayland), t.Load(WaylandProtocols), }, nil, []string{ "CGO_ENABLED=1", "GOCACHE=/tmp/gocache", "CC=clang -O3 -Werror", }, ` echo '# Building test helper (hostname).' go build -v -o /bin/hostname /usr/src/hostname/main.go echo chmod -R +w /usr/src/hakurei cd /usr/src/hakurei HAKUREI_VERSION='v`+version+`' `+script, pkg.Path(AbsUsrSrc.Append("hakurei"), true, t.NewPatchedSource( "hakurei", version, pkg.NewHTTPGetTar( nil, "https://git.gensokyo.uk/security/hakurei/archive/"+ "v"+version+".tar.gz", mustDecode(checksum), pkg.TarGzip, ), true, [2]string{"createTemp-error-injection", `diff --git a/container/dispatcher_test.go b/container/dispatcher_test.go index 5de37fc..fe0c4db 100644 --- a/container/dispatcher_test.go +++ b/container/dispatcher_test.go @@ -238,8 +238,11 @@ func sliceAddr[S any](s []S) *[]S { return &s } func newCheckedFile(t *testing.T, name, wantData string, closeErr error) osFile { f := &checkedOsFile{t: t, name: name, want: wantData, closeErr: closeErr} - // check happens in Close, and cleanup is not guaranteed to run, so relying on it for sloppy implementations will cause sporadic test results - f.cleanup = runtime.AddCleanup(f, func(name string) { f.t.Fatalf("checkedOsFile %s became unreachable without a call to Close", name) }, f.name) + // check happens in Close, and cleanup is not guaranteed to run, so relying + // on it for sloppy implementations will cause sporadic test results + f.cleanup = runtime.AddCleanup(f, func(name string) { + panic("checkedOsFile " + name + " became unreachable without a call to Close") + }, name) return f } diff --git a/container/initplace_test.go b/container/initplace_test.go index afeddbe..1c2f20b 100644 --- a/container/initplace_test.go +++ b/container/initplace_test.go @@ -21,7 +21,7 @@ func TestTmpfileOp(t *testing.T) { Path: samplePath, Data: sampleData, }, nil, nil, []stub.Call{ - call("createTemp", stub.ExpectArgs{"/", "tmp.*"}, newCheckedFile(t, "tmp.32768", sampleDataString, nil), stub.UniqueError(5)), + call("createTemp", stub.ExpectArgs{"/", "tmp.*"}, (*checkedOsFile)(nil), stub.UniqueError(5)), }, stub.UniqueError(5)}, {"Write", &Params{ParentPerm: 0700}, &TmpfileOp{ `}, )), pkg.Path(AbsUsrSrc.Append("hostname", "main.go"), false, pkg.NewFile( "hostname.go", []byte(` package main import "os" func main() { if name, err := os.Hostname(); err != nil { panic(err) } else { os.Stdout.WriteString(name) } } `), ))) } func init() { artifactsF[Hakurei] = func(t Toolchain) pkg.Artifact { return t.newHakurei("", ` mkdir -p /work/system/libexec/hakurei/ echo '# Building hakurei.' go generate -v ./... go build -trimpath -v -o /work/system/libexec/hakurei -ldflags="-s -w -buildid= -extldflags=-static -X hakurei.app/internal/info.buildVersion="$HAKUREI_VERSION" -X hakurei.app/internal/info.hakureiPath=/system/bin/hakurei -X hakurei.app/internal/info.hsuPath=/system/bin/hsu -X main.hakureiPath=/system/bin/hakurei" ./... echo echo '# Testing hakurei.' go test -ldflags='-buildid= -extldflags=-static' ./... echo mkdir -p /work/system/bin/ (cd /work/system/libexec/hakurei && mv \ hakurei \ sharefs \ ../../bin/) `) } artifactsF[HakureiDist] = func(t Toolchain) pkg.Artifact { return t.newHakurei("-dist", ` export HAKUREI_VERSION DESTDIR=/work /usr/src/hakurei/dist/release.sh `) } }