blob: 762f9092c34a0bee9a32df92103007506fbfe7ed [file] [log] [blame]
// Copyright 2021 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
package main
import (
"testing"
"github.com/google/go-cmp/cmp"
)
func dummyStats() *Stats {
return (&Stats{
TotalProgs: StatUint64{uint64: 24},
TotalCallMismatches: StatUint64{uint64: 10},
FlakyProgs: StatUint64{uint64: 4},
MismatchingProgs: StatUint64{uint64: 6},
Calls: StatMapStringToCallStats{
mapStringToCallStats: mapStringToCallStats{
"foo": {"foo", 2, 8, map[ReturnState]bool{
returnState(1, 7): true,
returnState(3, 7): true}},
"bar": {"bar", 5, 6, map[ReturnState]bool{
crashedReturnState(): true,
returnState(10, 7): true,
returnState(22, 7): true}},
"tar": {"tar", 3, 4, map[ReturnState]bool{
returnState(31, 7): true,
returnState(17, 7): true,
returnState(5, 7): true}},
"biz": {"biz", 0, 2, map[ReturnState]bool{}},
},
},
}).Init()
}
func TestGetCallStatsTextDescription(t *testing.T) {
tests := []struct {
name, call, report string
}{
{
name: "report for unsupported call",
call: "read",
report: "",
},
{
name: "report for supported call",
call: "foo",
report: "statistics for foo:\n" +
"\t↳ mismatches of foo / occurrences of foo: 2 / 8 (25.00 %)\n" +
"\t↳ mismatches of foo / total number of mismatches: 2 / 10 (20.00 %)\n" +
"\t↳ 2 distinct states identified: " +
"[\"Flags: 7, Errno: 1 (operation not permitted)\" \"Flags: 7, Errno: 3 (no such process)\"]\n",
},
}
for _, test := range tests {
s := dummyStats()
t.Run(test.name, func(t *testing.T) {
got, want := s.getCallStatsTextDescription(test.call), test.report
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("s.getCallStatsTextDescription mismatch (-want +got):\n%s", diff)
}
})
}
}
func TestGetTextDescription(t *testing.T) {
stats := dummyStats()
got, want := stats.GetTextDescription(float64(10)),
"total number of mismatches / total number of calls "+
"executed: 10 / 20 (50.00 %)\n\n"+
"programs / minute: 2.40\n\n"+
"true mismatching programs: 6 / total number of programs: 24 (25.00 %)\n"+
"flaky programs: 4 / total number of programs: 24 (16.67 %)\n\n"+
"statistics for bar:\n"+
"\t↳ mismatches of bar / occurrences of bar: 5 / 6 (83.33 %)\n"+
"\t↳ mismatches of bar / total number of mismatches: 5 / 10 (50.00 %)\n"+
"\t↳ 3 distinct states identified: "+
"[\"Crashed\" \"Flags: 7, Errno: 10 (no child processes)\" "+
"\"Flags: 7, Errno: 22 (invalid argument)\"]\n\n"+
"statistics for tar:\n"+
"\t↳ mismatches of tar / occurrences of tar: 3 / 4 (75.00 %)\n"+
"\t↳ mismatches of tar / total number of mismatches: 3 / 10 (30.00 %)\n"+
"\t↳ 3 distinct states identified: "+
"[\"Flags: 7, Errno: 17 (file exists)\" "+
"\"Flags: 7, Errno: 31 (too many links)\" "+
"\"Flags: 7, Errno: 5 (input/output error)\"]\n\n"+
"statistics for foo:\n"+
"\t↳ mismatches of foo / occurrences of foo: 2 / 8 (25.00 %)\n"+
"\t↳ mismatches of foo / total number of mismatches: 2 / 10 (20.00 %)\n"+
"\t↳ 2 distinct states identified: "+
"[\"Flags: 7, Errno: 1 (operation not permitted)\" \"Flags: 7, Errno: 3 (no such process)\"]\n\n"
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("s.GetTextDescription mismatch (-want +got):\n%s", diff)
}
}