diff options
Diffstat (limited to 'pkg/codesearch/codesearch_test.go')
| -rw-r--r-- | pkg/codesearch/codesearch_test.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/pkg/codesearch/codesearch_test.go b/pkg/codesearch/codesearch_test.go new file mode 100644 index 000000000..7af509294 --- /dev/null +++ b/pkg/codesearch/codesearch_test.go @@ -0,0 +1,61 @@ +// Copyright 2025 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 codesearch + +import ( + "bytes" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/google/syzkaller/pkg/clangtool/tooltest" + "github.com/google/syzkaller/pkg/osutil" +) + +func TestClangTool(t *testing.T) { + tooltest.TestClangTool[Database](t) +} + +func TestCommands(t *testing.T) { + db := tooltest.LoadOutput[Database](t) + index := &Index{db, []string{"testdata"}} + files, err := filepath.Glob(filepath.Join(osutil.Abs("testdata"), "query*")) + if err != nil { + t.Fatal(err) + } + if len(files) == 0 { + t.Fatal("found no qeury files") + } + covered := make(map[string]bool) + for _, file := range files { + t.Run(filepath.Base(file), func(t *testing.T) { + testCommand(t, index, covered, file) + }) + } + for _, cmd := range Commands { + if !covered[cmd.Name] { + t.Errorf("command %v is not covered, add at least one test", cmd.Name) + } + } +} + +func testCommand(t *testing.T, index *Index, covered map[string]bool, file string) { + data, err := os.ReadFile(file) + if err != nil { + t.Fatal(err) + } + query, _, _ := bytes.Cut(data, []byte{'\n'}) + args := strings.Fields(string(query)) + if len(args) == 0 { + t.Fatal("no command found") + } + result, err := index.Command(args[0], args[1:]) + if err != nil { + t.Fatal(err) + } + got := append([]byte(strings.Join(args, " ")+"\n\n"), result...) + tooltest.CompareGoldenData(t, file, got) + covered[args[0]] = true +} |
