diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2021-10-21 19:40:01 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2021-11-08 12:52:36 +0100 |
| commit | 07642bf10c06ec77b16b80cfb386715f5180c954 (patch) | |
| tree | ffb534f4fede6da0be47dc3462eccf51d8975414 /syz-verifier/utils_test.go | |
| parent | 3ea5a3451b2bfa90a3b73397273560f17d587efc (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.go | 105 |
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} +} |
