From ba5d882ef281450efe10aea60b05976cb533ab92 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 7 Mar 2026 01:38:11 +0900 Subject: internal/rosa: stream format for cure report This is for efficient cure status retrieval by the package website server. Signed-off-by: Ophestra --- internal/rosa/report_test.go | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 internal/rosa/report_test.go (limited to 'internal/rosa/report_test.go') diff --git a/internal/rosa/report_test.go b/internal/rosa/report_test.go new file mode 100644 index 00000000..ca29cf36 --- /dev/null +++ b/internal/rosa/report_test.go @@ -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{})) + } + +} -- cgit v1.3.1