aboutsummaryrefslogtreecommitdiffstats
path: root/syz-verifier/execresult_test.go
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@gmail.com>2021-10-14 14:47:55 +0000
committertarasmadan <89859571+tarasmadan@users.noreply.github.com>2021-10-15 09:52:17 +0200
commit115b2d95e56f01373ebe1c3f8f5a4d8c3c4d33e4 (patch)
treed5ae7da0e49e35a24d66aae7551330ca06e7f86f /syz-verifier/execresult_test.go
parentfc538d9dc19d1d8d0c0301ca73f269e71d978c85 (diff)
syz-verifier: rename verifier.go and Result to better reflect internals
Diffstat (limited to 'syz-verifier/execresult_test.go')
-rw-r--r--syz-verifier/execresult_test.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/syz-verifier/execresult_test.go b/syz-verifier/execresult_test.go
new file mode 100644
index 000000000..aae7bcdac
--- /dev/null
+++ b/syz-verifier/execresult_test.go
@@ -0,0 +1,96 @@
+// 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"
+ "github.com/google/syzkaller/prog"
+)
+
+func TestVerify(t *testing.T) {
+ p := "breaks_returns()\n" +
+ "minimize$0(0x1, 0x1)\n" +
+ "test$res0()\n"
+ tests := []struct {
+ name string
+ res []*ExecResult
+ wantReport *ResultReport
+ wantStats []*CallStats
+ }{
+ {
+ name: "only crashes",
+ res: []*ExecResult{
+ makeExecResultCrashed(1),
+ makeExecResultCrashed(4),
+ },
+ wantReport: nil,
+ },
+ {
+ name: "mismatches because results and crashes",
+ res: []*ExecResult{
+ makeExecResultCrashed(1),
+ makeExecResult(2, []int{11, 33, 22}, []int{1, 3, 3}...),
+ makeExecResult(4, []int{11, 33, 22}, []int{1, 3, 3}...),
+ },
+ wantReport: &ResultReport{
+ Prog: p,
+ Reports: []*CallReport{
+ {Call: "breaks_returns", States: map[int]ReturnState{
+ 1: crashedReturnState(),
+ 2: returnState(11, 1),
+ 4: returnState(11, 1)},
+ Mismatch: true},
+ {Call: "minimize$0", States: map[int]ReturnState{
+ 1: crashedReturnState(),
+ 2: returnState(33, 3),
+ 4: returnState(33, 3)},
+ Mismatch: true},
+ {Call: "test$res0", States: map[int]ReturnState{
+ 1: crashedReturnState(),
+ 2: returnState(22, 3),
+ 4: returnState(22, 3)},
+ Mismatch: true},
+ },
+ },
+ },
+ {
+ name: "mismatches not found in results",
+ res: []*ExecResult{
+ makeExecResult(2, []int{11, 33, 22}, []int{1, 3, 3}...),
+ makeExecResult(4, []int{11, 33, 22}, []int{1, 3, 3}...)},
+ wantReport: nil,
+ },
+ {
+ name: "mismatches found in results",
+ res: []*ExecResult{
+ makeExecResult(1, []int{1, 3, 2}, []int{4, 7, 7}...),
+ makeExecResult(4, []int{1, 3, 5}, []int{4, 7, 3}...),
+ },
+ wantReport: &ResultReport{
+ Prog: p,
+ Reports: []*CallReport{
+ {Call: "breaks_returns", States: map[int]ReturnState{1: {Errno: 1, Flags: 4}, 4: {Errno: 1, Flags: 4}}},
+ {Call: "minimize$0", States: map[int]ReturnState{1: {Errno: 3, Flags: 7}, 4: {Errno: 3, Flags: 7}}},
+ {Call: "test$res0", States: map[int]ReturnState{1: {Errno: 2, Flags: 7}, 4: {Errno: 5, Flags: 3}}, Mismatch: true},
+ },
+ },
+ }}
+
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ target := prog.InitTargetTest(t, "test", "64")
+ prog, err := target.Deserialize([]byte(p), prog.Strict)
+ if err != nil {
+ t.Fatalf("failed to deserialise test program: %v", err)
+ }
+ stats := emptyTestStats()
+ got := Verify(test.res, prog, stats)
+ if diff := cmp.Diff(test.wantReport, got); diff != "" {
+ t.Errorf("Verify report mismatch (-want +got):\n%s", diff)
+ }
+ })
+ }
+}