From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: "John 'Warthog9' Hawley" <warthog9@kernel.org>
Subject: [for-next][PATCH 3/5] ktest: Add timeout to ssh command
Date: Tue, 07 Feb 2017 15:06:50 -0500 [thread overview]
Message-ID: <20170207201722.409477649@goodmis.org> (raw)
In-Reply-To: 20170207200647.623277817@goodmis.org
[-- Attachment #1: 0003-ktest-Add-timeout-to-ssh-command.patch --]
[-- Type: text/plain, Size: 2251 bytes --]
From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
Add a timeout to performing an ssh command. This will let testing if a
machine is alive or not, or if something else may be amiss. A timeout can be
passed to ssh, where ssh will fail if it does not complete within the given
timeout.
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
tools/testing/ktest/ktest.pl | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index a64da242b824..d9bdd3d6dba6 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -1668,19 +1668,18 @@ sub fail {
}
sub run_command {
- my ($command, $redirect) = @_;
+ my ($command, $redirect, $timeout) = @_;
my $start_time;
my $end_time;
my $dolog = 0;
my $dord = 0;
my $pid;
- $start_time = time;
-
$command =~ s/\$SSH_USER/$ssh_user/g;
$command =~ s/\$MACHINE/$machine/g;
doprint("$command ... ");
+ $start_time = time;
$pid = open(CMD, "$command 2>&1 |") or
(fail "unable to exec $command" and return 0);
@@ -1697,14 +1696,34 @@ sub run_command {
$dord = 1;
}
- while (<CMD>) {
- print LOG if ($dolog);
- print RD if ($dord);
+ my $hit_timeout = 0;
+
+ while (1) {
+ my $fp = \*CMD;
+ if (defined($timeout)) {
+ doprint "timeout = $timeout\n";
+ }
+ my $line = wait_for_input($fp, $timeout);
+ if (!defined($line)) {
+ my $now = time;
+ if (defined($timeout) && (($now - $start_time) >= $timeout)) {
+ doprint "Hit timeout of $timeout, killing process\n";
+ $hit_timeout = 1;
+ kill 9, $pid;
+ }
+ last;
+ }
+ print LOG $line if ($dolog);
+ print RD $line if ($dord);
}
waitpid($pid, 0);
my $failed = $?;
+ if ($hit_timeout) {
+ $failed = 1;
+ }
+
close(CMD);
close(LOG) if ($dolog);
close(RD) if ($dord);
@@ -1728,11 +1747,11 @@ sub run_command {
}
sub run_ssh {
- my ($cmd) = @_;
+ my ($cmd, $timeout) = @_;
my $cp_exec = $ssh_exec;
$cp_exec =~ s/\$SSH_COMMAND/$cmd/g;
- return run_command "$cp_exec";
+ return run_command "$cp_exec", undef , $timeout;
}
sub run_scp {
--
2.10.2
next prev parent reply other threads:[~2017-02-07 20:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-07 20:06 [for-next][PATCH 0/5] ktest: Updates for 4.11 Steven Rostedt
2017-02-07 20:06 ` [for-next][PATCH 1/5] ktest: Have POST_TEST run after the test has totally completed Steven Rostedt
2017-02-07 20:06 ` [for-next][PATCH 2/5] ktest: Fix child exit code processing Steven Rostedt
2017-02-07 20:06 ` Steven Rostedt [this message]
2017-02-07 20:06 ` [for-next][PATCH 4/5] ktest.pl: Powercycle the box on reboot if no connection can be made Steven Rostedt
2017-02-07 20:06 ` [for-next][PATCH 5/5] ktest: Add variable run_command_status to save status of commands executed Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170207201722.409477649@goodmis.org \
--to=rostedt@goodmis.org \
--cc=linux-kernel@vger.kernel.org \
--cc=warthog9@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.