Implements global timeout
This commit is contained in:
parent
365c9d0e95
commit
104e70f861
@ -18,6 +18,11 @@
|
|||||||
- Support for (distro-specific) custom docker commands that will be
|
- Support for (distro-specific) custom docker commands that will be
|
||||||
executed before the base template.
|
executed before the base template.
|
||||||
|
|
||||||
|
- Parameter for setting up a reliability threshold for exit code.
|
||||||
|
|
||||||
|
- Parameter for setting up global timeout, after which no new tasks
|
||||||
|
will be started.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Spelling in output.
|
- Spelling in output.
|
||||||
|
12
main.go
12
main.go
@ -111,6 +111,9 @@ func main() {
|
|||||||
userKcfgPathEnv := userKcfgPathFlag.Envar("OUT_OF_TREE_KCFG")
|
userKcfgPathEnv := userKcfgPathFlag.Envar("OUT_OF_TREE_KCFG")
|
||||||
userKcfgPath := userKcfgPathEnv.Default(conf.UserKernels).String()
|
userKcfgPath := userKcfgPathEnv.Default(conf.UserKernels).String()
|
||||||
|
|
||||||
|
timeoutFlag := app.Flag("timeout", "Timeout after tool will not spawn new tests")
|
||||||
|
timeout := timeoutFlag.Duration()
|
||||||
|
|
||||||
qemuTimeoutFlag := app.Flag("qemu-timeout", "Timeout for qemu")
|
qemuTimeoutFlag := app.Flag("qemu-timeout", "Timeout for qemu")
|
||||||
qemuTimeout := qemuTimeoutFlag.Default(conf.Qemu.Timeout).Duration()
|
qemuTimeout := qemuTimeoutFlag.Default(conf.Qemu.Timeout).Duration()
|
||||||
|
|
||||||
@ -287,10 +290,15 @@ func main() {
|
|||||||
}
|
}
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
|
stop := time.Time{} // never stop
|
||||||
|
if *timeout != 0 {
|
||||||
|
stop = time.Now().Add(*timeout)
|
||||||
|
}
|
||||||
|
|
||||||
switch kingpin.MustParse(app.Parse(os.Args[1:])) {
|
switch kingpin.MustParse(app.Parse(os.Args[1:])) {
|
||||||
case pewCommand.FullCommand():
|
case pewCommand.FullCommand():
|
||||||
err = pewHandler(kcfg, *path, *pewKernel, *pewBinary,
|
err = pewHandler(kcfg, *path, *pewKernel, *pewBinary,
|
||||||
*pewTest, *pewGuess, *qemuTimeout, *dockerTimeout,
|
*pewTest, *pewGuess, stop, *qemuTimeout, *dockerTimeout,
|
||||||
*pewMax, *pewRuns, *pewDist, *pewTag, *pewThreads, db)
|
*pewMax, *pewRuns, *pewDist, *pewTag, *pewThreads, db)
|
||||||
case kernelListCommand.FullCommand():
|
case kernelListCommand.FullCommand():
|
||||||
err = kernelListHandler(kcfg)
|
err = kernelListHandler(kcfg)
|
||||||
@ -326,7 +334,7 @@ func main() {
|
|||||||
case logMarkdownCommand.FullCommand():
|
case logMarkdownCommand.FullCommand():
|
||||||
err = logMarkdownHandler(db, *path, *logMarkdownTag)
|
err = logMarkdownHandler(db, *path, *logMarkdownTag)
|
||||||
case packCommand.FullCommand():
|
case packCommand.FullCommand():
|
||||||
err = packHandler(db, *path, *dockerRegistry,
|
err = packHandler(db, *path, *dockerRegistry, stop,
|
||||||
conf.Docker.Commands, kcfg, *packAutogen,
|
conf.Docker.Commands, kcfg, *packAutogen,
|
||||||
!*packNoDownload, *packExploitRuns, *packKernelRuns)
|
!*packNoDownload, *packExploitRuns, *packKernelRuns)
|
||||||
}
|
}
|
||||||
|
4
pack.go
4
pack.go
@ -15,7 +15,7 @@ import (
|
|||||||
"code.dumpstack.io/tools/out-of-tree/config"
|
"code.dumpstack.io/tools/out-of-tree/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
func packHandler(db *sql.DB, path, registry string,
|
func packHandler(db *sql.DB, path, registry string, stop time.Time,
|
||||||
commands []config.DockerCommand, kcfg config.KernelConfig,
|
commands []config.DockerCommand, kcfg config.KernelConfig,
|
||||||
autogen, download bool, exploitRuns, kernelRuns int64) (err error) {
|
autogen, download bool, exploitRuns, kernelRuns int64) (err error) {
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ func packHandler(db *sql.DB, path, registry string,
|
|||||||
log.Println(f.Name())
|
log.Println(f.Name())
|
||||||
|
|
||||||
pewHandler(kcfg, workPath, "", "", "", false,
|
pewHandler(kcfg, workPath, "", "", "", false,
|
||||||
dockerTimeout, qemuTimeout,
|
stop, dockerTimeout, qemuTimeout,
|
||||||
kernelRuns, exploitRuns, pathDevNull, tag, threads, db)
|
kernelRuns, exploitRuns, pathDevNull, tag, threads, db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
pew.go
12
pew.go
@ -391,7 +391,8 @@ func shuffleKernels(a []config.KernelInfo) []config.KernelInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func performCI(ka config.Artifact, kcfg config.KernelConfig, binaryPath,
|
func performCI(ka config.Artifact, kcfg config.KernelConfig, binaryPath,
|
||||||
testPath string, qemuTimeout, dockerTimeout time.Duration,
|
testPath string, stop time.Time,
|
||||||
|
qemuTimeout, dockerTimeout time.Duration,
|
||||||
max, runs int64, dist, tag string, threads int,
|
max, runs int64, dist, tag string, threads int,
|
||||||
db *sql.DB) (err error) {
|
db *sql.DB) (err error) {
|
||||||
|
|
||||||
@ -413,6 +414,9 @@ func performCI(ka config.Artifact, kcfg config.KernelConfig, binaryPath,
|
|||||||
found = true
|
found = true
|
||||||
max--
|
max--
|
||||||
for i := int64(0); i < runs; i++ {
|
for i := int64(0); i < runs; i++ {
|
||||||
|
if !stop.IsZero() && time.Now().After(stop) {
|
||||||
|
break
|
||||||
|
}
|
||||||
swg.Add()
|
swg.Add()
|
||||||
go whatever(&swg, ka, kernel, binaryPath,
|
go whatever(&swg, ka, kernel, binaryPath,
|
||||||
testPath, qemuTimeout, dockerTimeout,
|
testPath, qemuTimeout, dockerTimeout,
|
||||||
@ -468,9 +472,10 @@ func genAllKernels() (sk []config.KernelMask, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Now too many parameters, move all of them to some structure
|
||||||
func pewHandler(kcfg config.KernelConfig,
|
func pewHandler(kcfg config.KernelConfig,
|
||||||
workPath, ovrrdKrnl, binary, test string, guess bool,
|
workPath, ovrrdKrnl, binary, test string, guess bool,
|
||||||
qemuTimeout, dockerTimeout time.Duration,
|
stop time.Time, qemuTimeout, dockerTimeout time.Duration,
|
||||||
max, runs int64, dist, tag string, threads int,
|
max, runs int64, dist, tag string, threads int,
|
||||||
db *sql.DB) (err error) {
|
db *sql.DB) (err error) {
|
||||||
|
|
||||||
@ -500,7 +505,8 @@ func pewHandler(kcfg config.KernelConfig,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = performCI(ka, kcfg, binary, test, qemuTimeout, dockerTimeout,
|
err = performCI(ka, kcfg, binary, test,
|
||||||
|
stop, qemuTimeout, dockerTimeout,
|
||||||
max, runs, dist, tag, threads, db)
|
max, runs, dist, tag, threads, db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user