Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ac884f1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ktest updates from Steven Rostedt:
 "These are various fixes that I have made and never got around to
  pushing. I've been asked to get the upstream repo back up-to-date"

* tag 'ktest-v4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest:
  ktest: Add variable run_command_status to save status of commands executed
  ktest.pl: Powercycle the box on reboot if no connection can be made
  ktest: Add timeout to ssh command
  ktest: Fix child exit code processing
  ktest: Have POST_TEST run after the test has totally completed
parents 08e32dcc 5739438b
Loading
Loading
Loading
Loading
+76 −35
Original line number Original line Diff line number Diff line
@@ -179,6 +179,7 @@ my $localversion;
my $iteration = 0;
my $iteration = 0;
my $successes = 0;
my $successes = 0;
my $stty_orig;
my $stty_orig;
my $run_command_status = 0;


my $bisect_good;
my $bisect_good;
my $bisect_bad;
my $bisect_bad;
@@ -1325,7 +1326,24 @@ sub wait_for_monitor;


sub reboot {
sub reboot {
    my ($time) = @_;
    my ($time) = @_;
    my $powercycle = 0;


    # test if the machine can be connected to within 5 seconds
    my $stat = run_ssh("echo check machine status", 5);
    if (!$stat) {
	doprint("power cycle\n");
	$powercycle = 1;
    }

    if ($powercycle) {
	run_command "$power_cycle";

	start_monitor;
	# flush out current monitor
	# May contain the reboot success line
	wait_for_monitor 1;

    } else {
	# Make sure everything has been written to disk
	# Make sure everything has been written to disk
	run_ssh("sync");
	run_ssh("sync");


@@ -1346,6 +1364,7 @@ sub reboot {
	    # nope? power cycle it.
	    # nope? power cycle it.
	    run_command "$power_cycle";
	    run_command "$power_cycle";
	}
	}
    }


    if (defined($time)) {
    if (defined($time)) {


@@ -1412,6 +1431,10 @@ sub dodie {
	    system("stty $stty_orig");
	    system("stty $stty_orig");
    }
    }


    if (defined($post_test)) {
	run_command $post_test;
    }

    die @_, "\n";
    die @_, "\n";
}
}


@@ -1624,10 +1647,6 @@ sub save_logs {


sub fail {
sub fail {


	if (defined($post_test)) {
		run_command $post_test;
	}

	if ($die_on_failure) {
	if ($die_on_failure) {
		dodie @_;
		dodie @_;
	}
	}
@@ -1660,23 +1679,26 @@ sub fail {
	    save_logs "fail", $store_failures;
	    save_logs "fail", $store_failures;
        }
        }


	if (defined($post_test)) {
		run_command $post_test;
	}

	return 1;
	return 1;
}
}


sub run_command {
sub run_command {
    my ($command, $redirect) = @_;
    my ($command, $redirect, $timeout) = @_;
    my $start_time;
    my $start_time;
    my $end_time;
    my $end_time;
    my $dolog = 0;
    my $dolog = 0;
    my $dord = 0;
    my $dord = 0;
    my $pid;
    my $pid;


    $start_time = time;

    $command =~ s/\$SSH_USER/$ssh_user/g;
    $command =~ s/\$SSH_USER/$ssh_user/g;
    $command =~ s/\$MACHINE/$machine/g;
    $command =~ s/\$MACHINE/$machine/g;


    doprint("$command ... ");
    doprint("$command ... ");
    $start_time = time;


    $pid = open(CMD, "$command 2>&1 |") or
    $pid = open(CMD, "$command 2>&1 |") or
	(fail "unable to exec $command" and return 0);
	(fail "unable to exec $command" and return 0);
@@ -1693,13 +1715,30 @@ sub run_command {
	$dord = 1;
	$dord = 1;
    }
    }


    while (<CMD>) {
    my $hit_timeout = 0;
	print LOG if ($dolog);

	print RD  if ($dord);
    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);
    waitpid($pid, 0);
    my $failed = $?;
    # shift 8 for real exit status
    $run_command_status = $? >> 8;


    close(CMD);
    close(CMD);
    close(LOG) if ($dolog);
    close(LOG) if ($dolog);
@@ -1714,21 +1753,25 @@ sub run_command {
	doprint "[$delta seconds] ";
	doprint "[$delta seconds] ";
    }
    }


    if ($failed) {
    if ($hit_timeout) {
	$run_command_status = 1;
    }

    if ($run_command_status) {
	doprint "FAILED!\n";
	doprint "FAILED!\n";
    } else {
    } else {
	doprint "SUCCESS\n";
	doprint "SUCCESS\n";
    }
    }


    return !$failed;
    return !$run_command_status;
}
}


sub run_ssh {
sub run_ssh {
    my ($cmd) = @_;
    my ($cmd, $timeout) = @_;
    my $cp_exec = $ssh_exec;
    my $cp_exec = $ssh_exec;


    $cp_exec =~ s/\$SSH_COMMAND/$cmd/g;
    $cp_exec =~ s/\$SSH_COMMAND/$cmd/g;
    return run_command "$cp_exec";
    return run_command "$cp_exec", undef , $timeout;
}
}


sub run_scp {
sub run_scp {
@@ -2489,10 +2532,6 @@ sub halt {
sub success {
sub success {
    my ($i) = @_;
    my ($i) = @_;


    if (defined($post_test)) {
	run_command $post_test;
    }

    $successes++;
    $successes++;


    my $name = "";
    my $name = "";
@@ -2517,6 +2556,10 @@ sub success {
	doprint "Reboot and wait $sleep_time seconds\n";
	doprint "Reboot and wait $sleep_time seconds\n";
	reboot_to_good $sleep_time;
	reboot_to_good $sleep_time;
    }
    }

    if (defined($post_test)) {
	run_command $post_test;
    }
}
}


sub answer_bisect {
sub answer_bisect {
@@ -2537,16 +2580,15 @@ sub answer_bisect {
}
}


sub child_run_test {
sub child_run_test {
    my $failed = 0;


    # child should have no power
    # child should have no power
    $reboot_on_error = 0;
    $reboot_on_error = 0;
    $poweroff_on_error = 0;
    $poweroff_on_error = 0;
    $die_on_failure = 1;
    $die_on_failure = 1;


    run_command $run_test, $testlog or $failed = 1;
    run_command $run_test, $testlog;


    exit $failed;
    exit $run_command_status;
}
}


my $child_done;
my $child_done;
@@ -2629,7 +2671,7 @@ sub do_run_test {
    }
    }


    waitpid $child_pid, 0;
    waitpid $child_pid, 0;
    $child_exit = $?;
    $child_exit = $? >> 8;


    my $end_time = time;
    my $end_time = time;
    $test_time = $end_time - $start_time;
    $test_time = $end_time - $start_time;
@@ -3330,7 +3372,6 @@ sub config_bisect {
    save_config \%good_configs, $good_config;
    save_config \%good_configs, $good_config;
    save_config \%bad_configs, $bad_config;
    save_config \%bad_configs, $bad_config;



    if (defined($config_bisect_check) && $config_bisect_check ne "0") {
    if (defined($config_bisect_check) && $config_bisect_check ne "0") {
	if ($config_bisect_check ne "good") {
	if ($config_bisect_check ne "good") {
	    doprint "Testing bad config\n";
	    doprint "Testing bad config\n";