internal/rosa: stream format for cure report
All checks were successful
Test / Create distribution (push) Successful in 59s
Test / Sandbox (push) Successful in 2m37s
Test / Hakurei (push) Successful in 3m40s
Test / ShareFS (push) Successful in 3m46s
Test / Sandbox (race detector) (push) Successful in 4m54s
Test / Hakurei (race detector) (push) Successful in 5m51s
Test / Flake checks (push) Successful in 1m38s

This is for efficient cure status retrieval by the package website server.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-03-07 01:38:11 +09:00
parent 1e0d68a29e
commit ba5d882ef2
2 changed files with 295 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
package rosa_test
import (
"errors"
"os"
"path"
"syscall"
"testing"
"unique"
"hakurei.app/internal/pkg"
"hakurei.app/internal/rosa"
)
func TestReportZeroLength(t *testing.T) {
report := path.Join(t.TempDir(), "report")
if err := os.WriteFile(report, nil, 0400); err != nil {
t.Fatal(err)
}
if _, err := rosa.OpenReport(report); !errors.Is(err, syscall.EINVAL) {
t.Fatalf("OpenReport: error = %v", err)
}
}
func TestReportSIGSEGV(t *testing.T) {
report := path.Join(t.TempDir(), "report")
if err := os.WriteFile(report, make([]byte, 64), 0400); err != nil {
t.Fatal(err)
}
if r, err := rosa.OpenReport(report); err != nil {
t.Fatalf("OpenReport: error = %v", err)
} else {
status, n := r.ArtifactOf(unique.Make(pkg.ID{}))
if len(status) != 0 {
t.Errorf("ArtifactsOf: status = %#v", status)
}
if n != 0 {
t.Errorf("ArtifactsOf: n = %d", n)
}
if err = r.Close(); err != nil {
t.Fatalf("Close: error = %v", err)
}
defer func() {
ioErr := err.(*rosa.ReportIOError)
if ioErr.Offset != 48 {
panic(ioErr)
}
}()
defer r.HandleAccess(&err)()
r.ArtifactOf(unique.Make(pkg.ID{}))
}
}