aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-09-13 19:03:51 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-09-13 19:28:47 +0200
commit55b6cd4333071949c60b9e52b6b201b09e837a4d (patch)
tree5394ece15614aedea4c7b47fea14534e07477c23 /pkg
parentc52d06e41031046b8e2a1782418fbd85f469455c (diff)
pkg/runtest: test parsing of all tests
Currently we only test parsing in tools/syz-runtest and for test OS in pkg/runtest tests. This means errors in tests for other OSes won't be noticed until somebody runs tests manually. Test parsing of all tests in pkg/runtest tests. Fix up 2 broken tests.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/runtest/run.go37
-rw-r--r--pkg/runtest/run_test.go25
2 files changed, 47 insertions, 15 deletions
diff --git a/pkg/runtest/run.go b/pkg/runtest/run.go
index 408029467..54d949249 100644
--- a/pkg/runtest/run.go
+++ b/pkg/runtest/run.go
@@ -153,10 +153,6 @@ func (ctx *Context) Run() error {
}
func (ctx *Context) generatePrograms(progs chan *RunRequest) error {
- files, err := ioutil.ReadDir(ctx.Dir)
- if err != nil {
- return fmt.Errorf("failed to read %v: %v", ctx.Dir, err)
- }
cover := []bool{false}
if ctx.Features[host.FeatureCoverage].Enabled {
cover = append(cover, true)
@@ -166,17 +162,33 @@ func (ctx *Context) generatePrograms(progs chan *RunRequest) error {
sandboxes = append(sandboxes, sandbox)
}
sort.Strings(sandboxes)
+ files, err := progFileList(ctx.Dir, ctx.Tests)
+ if err != nil {
+ return err
+ }
+ for _, file := range files {
+ if err := ctx.generateFile(progs, sandboxes, cover, file); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func progFileList(dir, filter string) ([]string, error) {
+ files, err := ioutil.ReadDir(dir)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read %v: %v", dir, err)
+ }
+ var res []string
for _, file := range files {
if strings.HasSuffix(file.Name(), "~") ||
strings.HasSuffix(file.Name(), ".swp") ||
- !strings.HasPrefix(file.Name(), ctx.Tests) {
+ !strings.HasPrefix(file.Name(), filter) {
continue
}
- if err := ctx.generateFile(progs, sandboxes, cover, file.Name()); err != nil {
- return err
- }
+ res = append(res, file.Name())
}
- return nil
+ return res, nil
}
func (ctx *Context) generateFile(progs chan *RunRequest, sandboxes []string, cover []bool, filename string) error {
@@ -264,11 +276,6 @@ func (ctx *Context) parseProg(filename string) (*prog.Prog, map[string]bool, *ip
return parseProg(ctx.Target, ctx.Dir, filename)
}
-func TestParseProg(target *prog.Target, dir, filename string) error {
- _, _, _, err := parseProg(target, dir, filename)
- return err
-}
-
func parseProg(target *prog.Target, dir, filename string) (*prog.Prog, map[string]bool, *ipc.ProgInfo, error) {
data, err := ioutil.ReadFile(filepath.Join(dir, filename))
if err != nil {
@@ -323,7 +330,7 @@ func parseProg(target *prog.Target, dir, filename string) (*prog.Prog, map[strin
default:
res, ok := errnos[call.Comment]
if !ok {
- return nil, nil, nil, fmt.Errorf("%v: unknown comment %q",
+ return nil, nil, nil, fmt.Errorf("%v: unknown call comment %q",
filename, call.Comment)
}
info.Calls[i].Errno = res
diff --git a/pkg/runtest/run_test.go b/pkg/runtest/run_test.go
index d9fdadfab..29ef57237 100644
--- a/pkg/runtest/run_test.go
+++ b/pkg/runtest/run_test.go
@@ -12,6 +12,7 @@ import (
"github.com/google/syzkaller/pkg/csource"
"github.com/google/syzkaller/pkg/host"
+ "github.com/google/syzkaller/pkg/osutil"
"github.com/google/syzkaller/prog"
"github.com/google/syzkaller/sys/targets"
_ "github.com/google/syzkaller/sys/test/gen" // pull in the test target
@@ -95,3 +96,27 @@ func test(t *testing.T, sysTarget *targets.Target) {
t.Fatal(err)
}
}
+
+func TestParsing(t *testing.T) {
+ for OS, arches := range targets.List {
+ dir := filepath.Join("..", "..", "sys", OS, "test")
+ if !osutil.IsExist(dir) {
+ continue
+ }
+ files, err := progFileList(dir, "")
+ if err != nil {
+ t.Fatal(err)
+ }
+ for arch := range arches {
+ target, err := prog.GetTarget(OS, arch)
+ if err != nil {
+ t.Fatal(err)
+ }
+ for _, file := range files {
+ if _, _, _, err := parseProg(target, dir, file); err != nil {
+ t.Errorf("failed to parse %v/%v for %v: %v", dir, file, arch, err)
+ }
+ }
+ }
+ }
+}