diff options
| author | Taras Madan <tarasmadan@google.com> | 2024-03-07 12:47:38 +0100 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-03-07 18:18:35 +0000 |
| commit | cefae83b6e6d706731fe1dd7377bab24b13e84b6 (patch) | |
| tree | 5d077ed3b06f2f5cb9e86c1b367618020a19dbdc /pkg | |
| parent | 77022ee5c2c60e17afaf9ab46ebcb5789725d8ff (diff) | |
pkg/cover/report_test.go: test DoCoverJSON
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/cover/report_test.go | 62 |
1 files changed, 51 insertions, 11 deletions
diff --git a/pkg/cover/report_test.go b/pkg/cover/report_test.go index 3d31841cc..0a771b575 100644 --- a/pkg/cover/report_test.go +++ b/pkg/cover/report_test.go @@ -11,6 +11,7 @@ package cover import ( "bytes" "encoding/csv" + "encoding/json" "fmt" "os" "path/filepath" @@ -28,6 +29,7 @@ import ( "github.com/google/syzkaller/pkg/symbolizer" _ "github.com/google/syzkaller/sys" "github.com/google/syzkaller/sys/targets" + "github.com/stretchr/testify/assert" ) type Test struct { @@ -154,7 +156,7 @@ func TestReportGenerator(t *testing.T) { } func testReportGenerator(t *testing.T, target *targets.Target, test Test) { - rep, csv, err := generateReport(t, target, &test) + reps, err := generateReport(t, target, &test) if err != nil { if test.Result == "" { t.Fatalf("expected no error, but got:\n%v", err) @@ -167,8 +169,8 @@ func testReportGenerator(t *testing.T, target *targets.Target, test Test) { if test.Result != "" { t.Fatalf("got no error, but expected %q", test.Result) } - checkCSVReport(t, csv) - _ = rep + checkCSVReport(t, reps.csv) + checkJSONReport(t, reps.json) } const kcovCode = ` @@ -287,7 +289,13 @@ func targetKcovIsBroken(t *testing.T, target *targets.Target) bool { return true } -func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, []byte, error) { +type reports struct { + html []byte + csv []byte + json []byte +} + +func generateReport(t *testing.T, target *targets.Target, test *Test) (*reports, error) { dir := t.TempDir() bin := buildTestBinary(t, target, test, dir) cfg := &mgrconfig.Config{ @@ -318,7 +326,7 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, [ rg, err := MakeReportGenerator(cfg, subsystem, nil, false) if err != nil { - return nil, nil, err + return nil, err } if test.AddCover { var pcs []uint64 @@ -369,24 +377,31 @@ func generateReport(t *testing.T, target *targets.Target, test *Test) ([]byte, [ Progs: progs, } if err := rg.DoHTML(html, params); err != nil { - return nil, nil, err + return nil, err } htmlTable := new(bytes.Buffer) if err := rg.DoHTMLTable(htmlTable, params); err != nil { - return nil, nil, err + return nil, err } _ = htmlTable csv := new(bytes.Buffer) if err := rg.DoCSV(csv, params); err != nil { - return nil, nil, err + return nil, err } csvFiles := new(bytes.Buffer) if err := rg.DoCSVFiles(csvFiles, params); err != nil { - return nil, nil, err + return nil, err } _ = csvFiles - - return html.Bytes(), csv.Bytes(), nil + json := new(bytes.Buffer) + if err := rg.DoCoverJSON(json, params); err != nil { + return nil, err + } + return &reports{ + html: html.Bytes(), + csv: csv.Bytes(), + json: json.Bytes(), + }, nil } func checkCSVReport(t *testing.T, CSVReport []byte) { @@ -413,3 +428,28 @@ func checkCSVReport(t *testing.T, CSVReport []byte) { t.Fatalf("no main in the CSV report") } } +func checkJSONReport(t *testing.T, r []byte) { + expected := []byte(`{ + "version":1, + "total_cb_count":1, + "covered_cb_count":1, + "files": { + "main.c": { + "total_cb_count":1, + "covered_cb_count":1, + "functions":{ + "main": { + "total_cb_count":1, + "covered_cb_count":1 + } + } + } + } +}`) + compacted := new(bytes.Buffer) + if err := json.Compact(compacted, expected); err != nil { + t.Errorf("failed to prepare compacted json: %v", err) + } + compacted.Write([]byte("\n")) + assert.Equal(t, compacted.String(), string(r)) +} |
