aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/bisect/bisect.go
diff options
context:
space:
mode:
authorZubin Mithra <zsm@chromium.org>2019-10-08 15:57:52 -0700
committerDmitry Vyukov <dvyukov@google.com>2019-10-22 10:09:57 +0200
commita2bdbd8c37841cc507a2ad59f25d90d6467e5858 (patch)
treebc4ad0e738a749c2321b7181e4ea04c5615738e7 /pkg/bisect/bisect.go
parent37dc03de04826cc0d5d1e3699832b0a3113d40af (diff)
pkg/bisect: add initial testing support for cause bisection
(note: incomplete change) Refactor existing code as follows: * Move reusable test utility functions from git_repo_test.go to pkg/vcs/test_util.go and make them exported. * Split Run() into Run()+runImpl(). * Change type of bisect.go:env.inst to `instance.BuilderTester`. Change usage inside syz-testbuild/testbuild.go accordingly. * Move most of linux.PreviousReleaseTags() into vcs/git.go as git.previousReleaseTags(). * Allow build.CompilerIdentity to be mocked. Introduce the following changes: * instance.BuilderTester is an interface with methods BuildSyzkaller() BuildKernel() Test() NewEnv() now returns this interface. * type testEnv implements instance.BuilderTester. * type testBuilder implements builder interface. Add a entry into table inside pkg/build/build.go:getBuilder() to return testBuilder object.
Diffstat (limited to 'pkg/bisect/bisect.go')
-rw-r--r--pkg/bisect/bisect.go27
1 files changed, 20 insertions, 7 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go
index 78cb58bd4..904be4b53 100644
--- a/pkg/bisect/bisect.go
+++ b/pkg/bisect/bisect.go
@@ -55,7 +55,7 @@ type env struct {
repo vcs.Repo
bisecter vcs.Bisecter
head *vcs.Commit
- inst *instance.Env
+ inst instance.BuilderTester
numTests int
buildTime time.Duration
testTime time.Duration
@@ -85,11 +85,30 @@ func Run(cfg *Config) ([]*vcs.Commit, *report.Report, error) {
if !ok {
return nil, nil, fmt.Errorf("bisection is not implemented for %v", cfg.Manager.TargetOS)
}
+ inst, err := instance.NewEnv(&cfg.Manager)
+ if err != nil {
+ return nil, nil, err
+ }
+ if _, err = repo.CheckoutBranch(cfg.Kernel.Repo, cfg.Kernel.Branch); err != nil {
+ return nil, nil, err
+ }
+
+ return runImpl(cfg, repo, bisecter, inst)
+}
+
+func runImpl(cfg *Config, repo vcs.Repo, bisecter vcs.Bisecter, inst instance.BuilderTester) (
+ []*vcs.Commit, *report.Report, error) {
env := &env{
cfg: cfg,
repo: repo,
bisecter: bisecter,
+ inst: inst,
}
+ head, err := repo.HeadCommit()
+ if err != nil {
+ return nil, nil, err
+ }
+ env.head = head
if cfg.Fix {
env.log("bisecting fixing commit since %v", cfg.Kernel.Commit)
} else {
@@ -135,12 +154,6 @@ func Run(cfg *Config) ([]*vcs.Commit, *report.Report, error) {
func (env *env) bisect() ([]*vcs.Commit, *report.Report, error) {
cfg := env.cfg
var err error
- if env.inst, err = instance.NewEnv(&cfg.Manager); err != nil {
- return nil, nil, err
- }
- if env.head, err = env.repo.CheckoutBranch(cfg.Kernel.Repo, cfg.Kernel.Branch); err != nil {
- return nil, nil, err
- }
if err := build.Clean(cfg.Manager.TargetOS, cfg.Manager.TargetVMArch,
cfg.Manager.Type, cfg.Manager.KernelSrc); err != nil {
return nil, nil, fmt.Errorf("kernel clean failed: %v", err)