aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/report_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/rosa/report_test.go')
-rw-r--r--internal/rosa/report_test.go57
1 files changed, 57 insertions, 0 deletions
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{}))
+ }
+
+}