diff --git a/pew.go b/pew.go index b0b34ad..b054687 100644 --- a/pew.go +++ b/pew.go @@ -50,6 +50,7 @@ type PewCmd struct { Endless bool `help:"endless tests"` EndlessTimeout time.Duration `help:"timeout between tests" default:"1m"` + EndlessStress string `help:"endless stress script" type:"existingfile"` db *sql.DB kcfg config.KernelConfig @@ -740,6 +741,16 @@ func (cmd PewCmd) testArtifact(swg *sizedwaitgroup.SizedWaitGroup, slog.Info().Msg("start endless tests") + if cmd.EndlessStress != "" { + slog.Debug().Msg("copy and run endless stress script") + err = q.CopyAndRunAsync("root", cmd.EndlessStress) + if err != nil { + q.Stop() + slog.Fatal().Err(err).Msg("cannot copy/run stress") + return + } + } + for { output, err := q.Command("root", remoteTest) if err != nil { diff --git a/qemu/qemu-kernel.go b/qemu/qemu-kernel.go index 5e9c34e..85193a3 100644 --- a/qemu/qemu-kernel.go +++ b/qemu/qemu-kernel.go @@ -550,6 +550,17 @@ func (q *System) CopyAndRun(user, path string) (output string, err error) { return q.Command(user, "chmod +x "+remotePath+" && "+remotePath) } +// CopyAndRunAsync is copy local file to qemu vm then run it w/o wait for exit +func (q *System) CopyAndRunAsync(user, path string) (err error) { + remotePath := fmt.Sprintf("/tmp/executable_%d", rand.Int()) + err = q.CopyFile(user, path, remotePath) + if err != nil { + return + } + + return q.AsyncCommand(user, "chmod +x "+remotePath+" && "+remotePath) +} + // Debug is for enable qemu debug and set hostname and port for listen func (q *System) Debug(conn string) { q.debug = true