aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/rosa/report_test.go
blob: 2ca8ac57453bcfadc627b10f7fc5006425f88df1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package rosa_test

import (
	"errors"
	"os"
	"path/filepath"
	"syscall"
	"testing"
	"unique"

	"hakurei.app/internal/pkg"
	"hakurei.app/internal/rosa"
)

func TestReportZeroLength(t *testing.T) {
	report := filepath.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 := filepath.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)()
		for {
			r.ArtifactOf(unique.Make(pkg.ID{}))
		}
	}
}