aboutsummaryrefslogtreecommitdiffstats
path: root/syz-verifier/utils_test.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-10-21 19:40:01 +0200
committerDmitry Vyukov <dvyukov@google.com>2021-11-08 12:52:36 +0100
commit07642bf10c06ec77b16b80cfb386715f5180c954 (patch)
treeffb534f4fede6da0be47dc3462eccf51d8975414 /syz-verifier/utils_test.go
parent3ea5a3451b2bfa90a3b73397273560f17d587efc (diff)
syz-verifier: rename test_utils.go to utils_test.go
test_utils.go must be parts of tests (used only by tests), rather than of the binary itself. Currently it is part of the binary since it does not end with _test.go. This works with go tool, but confuses bazel+glaze which does not want to add test_utils.go into the test target.
Diffstat (limited to 'syz-verifier/utils_test.go')
-rw-r--r--syz-verifier/utils_test.go105
1 files changed, 105 insertions, 0 deletions
diff --git a/syz-verifier/utils_test.go b/syz-verifier/utils_test.go
new file mode 100644
index 000000000..517d17232
--- /dev/null
+++ b/syz-verifier/utils_test.go
@@ -0,0 +1,105 @@
+// 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 (
+ "io/ioutil"
+ "math/rand"
+ "os"
+ "testing"
+ "time"
+
+ "github.com/google/syzkaller/pkg/ipc"
+ "github.com/google/syzkaller/pkg/osutil"
+ "github.com/google/syzkaller/prog"
+)
+
+func createTestServer(t *testing.T) *RPCServer {
+ target, err := prog.GetTarget("test", "64")
+ if err != nil {
+ t.Fatalf("failed to initialise test target: %v", err)
+ }
+ vrf := Verifier{
+ target: target,
+ choiceTable: target.DefaultChoiceTable(),
+ rnd: rand.New(rand.NewSource(time.Now().UnixNano())),
+ progIdx: 3,
+ reruns: 1,
+ }
+ vrf.resultsdir = makeTestResultDirectory(t)
+ vrf.stats = emptyTestStats()
+ srv, err := startRPCServer(&vrf)
+ if err != nil {
+ t.Fatalf("failed to initialise RPC server: %v", err)
+ }
+ return srv
+}
+
+func getTestProgram(t *testing.T) *prog.Prog {
+ p := "breaks_returns()\n" +
+ "minimize$0(0x1, 0x1)\n" +
+ "test$res0()\n"
+ 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)
+ }
+ return prog
+}
+
+func makeTestResultDirectory(t *testing.T) string {
+ dir, err := ioutil.TempDir("", "syz-verifier")
+ if err != nil {
+ t.Fatalf("failed to create results directory: %v", err)
+ }
+ t.Cleanup(func() {
+ os.RemoveAll(dir)
+ })
+ return osutil.Abs(dir)
+}
+
+func makeExecResult(pool int, errnos []int, flags ...int) *ExecResult {
+ r := &ExecResult{Pool: pool, Info: ipc.ProgInfo{Calls: []ipc.CallInfo{}}}
+ for _, e := range errnos {
+ r.Info.Calls = append(r.Info.Calls, ipc.CallInfo{Errno: e})
+ }
+
+ for idx, f := range flags {
+ r.Info.Calls[idx].Flags = ipc.CallFlags(f)
+ }
+ return r
+}
+
+func makeExecResultCrashed(pool int) *ExecResult {
+ return &ExecResult{Pool: pool, Crashed: true}
+}
+
+func emptyTestStats() *Stats {
+ return &Stats{
+ Calls: map[string]*CallStats{
+ "breaks_returns": {Name: "breaks_returns", States: map[ReturnState]bool{}},
+ "minimize$0": {Name: "minimize$0", States: map[ReturnState]bool{}},
+ "test$res0": {Name: "test$res0", States: map[ReturnState]bool{}},
+ },
+ }
+}
+
+func makeCallStats(name string, occurrences, mismatches int, states map[ReturnState]bool) *CallStats {
+ return &CallStats{Name: name,
+ Occurrences: occurrences,
+ Mismatches: mismatches,
+ States: states}
+}
+
+func returnState(errno int, flags ...int) ReturnState {
+ rs := ReturnState{Errno: errno}
+ if flags != nil {
+ rs.Flags = ipc.CallFlags(flags[0])
+ }
+ return rs
+}
+
+func crashedReturnState() ReturnState {
+ return ReturnState{Crashed: true}
+}