diff --git a/main.go b/main.go index e65f3d7..b138447 100644 --- a/main.go +++ b/main.go @@ -120,6 +120,9 @@ func main() { dockerRegistryFlag := app.Flag("docker-registry", "Registry for docker") dockerRegistry := dockerRegistryFlag.Default(conf.Docker.Registry).String() + thresholdFlag := app.Flag("threshold", "Reliablity threshold for exit code") + threshold := thresholdFlag.Default("1.00").Float64() + pewCommand := app.Command("pew", "Build, run and test module/exploit") pewMax := pewCommand.Flag("max", "Test no more than X kernels"). @@ -332,7 +335,7 @@ func main() { log.Fatalln(err) } - if somethingFailed { + if successRate(state) < *threshold { os.Exit(1) } } diff --git a/pew.go b/pew.go index 1307126..dd70802 100644 --- a/pew.go +++ b/pew.go @@ -26,7 +26,17 @@ import ( "code.dumpstack.io/tools/out-of-tree/qemu" ) -var somethingFailed = false +type runstate struct { + Overall, Success float64 +} + +var ( + state runstate +) + +func successRate(state runstate) float64 { + return state.Success / state.Overall +} const pathDevNull = "/dev/null" @@ -134,11 +144,12 @@ func testKernelExploit(q *qemu.System, ka config.Artifact, } func genOkFail(name string, ok bool) (aurv aurora.Value) { + state.Overall += 1 if ok { + state.Success += 1 s := " " + name + " SUCCESS " aurv = aurora.BgGreen(aurora.Black(s)) } else { - somethingFailed = true s := " " + name + " FAILURE " aurv = aurora.BgRed(aurora.Gray(aurora.Bold(s))) }