aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2024-03-07 12:47:38 +0100
committerTaras Madan <tarasmadan@google.com>2024-03-07 18:18:35 +0000
commitcefae83b6e6d706731fe1dd7377bab24b13e84b6 (patch)
tree5d077ed3b06f2f5cb9e86c1b367618020a19dbdc /pkg
parent77022ee5c2c60e17afaf9ab46ebcb5789725d8ff (diff)
pkg/cover/report_test.go: test DoCoverJSON
Diffstat (limited to 'pkg')
-rw-r--r--pkg/cover/report_test.go62
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))
+}