aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-07-07 09:06:48 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-07-07 10:40:55 +0200
commitf7b01f08a31f0ab533410a3ba3b74f781674e059 (patch)
tree1c5789396db89c50ee301c12743f2f72da3734ae /pkg
parente419f4e6d851d09202e550ac2a5975ef68fd6935 (diff)
pkg/vcs: fix config bisection tests more
config-bisect.pl uses bash-isms and can't run on non-linux. It also silently ignores all errors which made failures very obscure -- the script happily succeeds in presence of any errors. So the test failed later reading .config. Use "set -eu" to not fail silently. Also trace all config-bisect.pl invocations and output. good/bad decisions are important and we always log them in the normal bisection.
Diffstat (limited to 'pkg')
-rw-r--r--pkg/vcs/linux.go2
-rw-r--r--pkg/vcs/linux_test.go7
-rwxr-xr-xpkg/vcs/testdata/linux/config-bisect.pl4
3 files changed, 11 insertions, 2 deletions
diff --git a/pkg/vcs/linux.go b/pkg/vcs/linux.go
index 3509c361a..a9a823621 100644
--- a/pkg/vcs/linux.go
+++ b/pkg/vcs/linux.go
@@ -273,6 +273,7 @@ func (ctx *linux) Minimize(original, baseline []byte, trace io.Writer,
if err != nil {
return nil, fmt.Errorf("config bisect failed: %v", err)
}
+ fmt.Fprintf(trace, "# config-bisect.pl -r:\n%s", output)
for {
config, err := ioutil.ReadFile(filepath.Join(ctx.git.dir, ".config"))
if err != nil {
@@ -293,6 +294,7 @@ func (ctx *linux) Minimize(original, baseline []byte, trace io.Writer,
output1, err := osutil.RunCmd(time.Hour, "", configBisect,
"-l", ctx.git.dir, "-b", ctx.git.dir, kernelBaselineConfig, kernelConfig, verdict)
+ fmt.Fprintf(trace, "# config-bisect.pl %v:\n%s", verdict, output1)
output = append(output, output1...)
if err != nil {
if verr, ok := err.(*osutil.VerboseError); ok && verr.ExitCode == 2 {
diff --git a/pkg/vcs/linux_test.go b/pkg/vcs/linux_test.go
index a249dc6c9..bacf89edb 100644
--- a/pkg/vcs/linux_test.go
+++ b/pkg/vcs/linux_test.go
@@ -8,6 +8,7 @@ import (
"fmt"
"io/ioutil"
"os"
+ "runtime"
"strings"
"testing"
@@ -24,6 +25,10 @@ type MinimizationTest struct {
}
func TestConfigMinimizer(t *testing.T) {
+ if runtime.GOOS != "linux" {
+ // The test config-bisect.pl uses bash-isms and can't run on OS that don't have bash.
+ t.Skipf("skipping on non-linux")
+ }
t.Parallel()
tests := []MinimizationTest{
{
@@ -67,6 +72,7 @@ func TestConfigMinimizer(t *testing.T) {
trace := new(bytes.Buffer)
outConfig, err := minimizer.Minimize([]byte(test.config),
[]byte(test.baselineConfig), trace, pred)
+ t.Log(trace.String())
if test.passing && err != nil {
t.Fatalf("failed to run Minimize: %v", err)
} else if test.passing && !strings.Contains(string(outConfig),
@@ -74,7 +80,6 @@ func TestConfigMinimizer(t *testing.T) {
t.Fatalf("output is not expected %v vs. %v", string(outConfig),
test.expectedConfig)
}
- t.Log(trace.String())
})
}
}
diff --git a/pkg/vcs/testdata/linux/config-bisect.pl b/pkg/vcs/testdata/linux/config-bisect.pl
index 3388e3da0..29a488e58 100755
--- a/pkg/vcs/testdata/linux/config-bisect.pl
+++ b/pkg/vcs/testdata/linux/config-bisect.pl
@@ -1,8 +1,10 @@
-#!/bin/sh
+#!/bin/bash
# Copyright 2020 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.
# config-bisect.pl -l ctx.git.dir -r -b ctx.git.dir kernelBaselineConfig kernelConfig
+set -eu
+
if [ "$3" == "-r" ]
then
baseline=`cat $6`