Skip to content

Commit

Permalink
Merge pull request #2191 from b10n1k/fix_assert_script_sudo
Browse files Browse the repository at this point in the history
Make assert_script_sudo work properly in serial terminal
  • Loading branch information
mergify[bot] committed Nov 25, 2022
2 parents d886b25 + 4074133 commit d394078
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
29 changes: 29 additions & 0 deletions t/03-testapi.t
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,35 @@ subtest 'script_run' => sub {
is(background_script_run('sleep 10', output => 'foo'), '1234', 'background_script_run with output returns valid PID');
};

sub assert_script_sudo_test () {
my $mock_testapi = Test::MockModule->new('testapi');
$mock_testapi->redefine(_handle_found_needle => sub { return $_[0] });
$mock_testapi->noop(qw(send_key enter_cmd));
$mock_testapi->redefine(hashed_string => 'XXX');
$mock_testapi->redefine(wait_serial => 'XXX-0-');
my $script_sudo = '';
$mock_testapi->redefine(script_sudo => sub { $script_sudo = "$_[0]" });
$mock_testapi->redefine(_set_assert_marker => 'marker');
is assert_script_sudo('echo foo'), undef, 'successful assertion of script_sudo (1)';
is $script_sudo, 'echo foo; marker', 'script_sudo called like expected(1)';
is assert_script_sudo('bash'), undef, 'successful assertion of script_sudo (2)';
is $script_sudo, 'bash; marker', 'script_sudo called like expected(2)';
}

sub set_assert_marker_test ($is_serial_terminal) {
my $mock_testapi = Test::MockModule->new('testapi');
$mock_testapi->redefine(_handle_found_needle => sub { return $_[0] });
$mock_testapi->redefine(is_serial_terminal => $is_serial_terminal);
my $expected_output = $is_serial_terminal ? ' > /dev/null' : '';
is testapi::_set_assert_marker('XXX'), "echo XXX-\$?-$expected_output", 'marker setter returns correct string to the serial';
}

subtest 'assert_script_sudo' => sub {
subtest('_set_assert_marker redirects to serial devices on serial terminal', \&set_assert_marker_test, 0);
subtest('_set_assert_marker returns correct marker on non-serial terminal', \&set_assert_marker_test, 1);
subtest('Test assert_script_sudo', \&assert_script_sudo_test);
};

subtest 'check_assert_screen' => sub {
my $mock_testapi = Test::MockModule->new('testapi');
$mock_testapi->redefine(_handle_found_needle => sub { return $_[0] });
Expand Down
8 changes: 7 additions & 1 deletion testapi.pm
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,11 @@ sub background_script_run { # no:style:signatures
return $distri->background_script_run($cmd, %args);
}

sub _set_assert_marker ($hashed_string) {
my $redirect_to_serial_console = is_serial_terminal() ? " > /dev/$serialdev" : '';
return "echo $hashed_string-\$?-$redirect_to_serial_console";
}

=head2 assert_script_sudo
assert_script_sudo($command [, $wait]);
Expand All @@ -1031,7 +1036,8 @@ C<$serialdev>.
sub assert_script_sudo { # no:style:signatures
my ($cmd, $wait) = @_;
my $str = hashed_string("ASS$cmd");
script_sudo("$cmd; echo $str-\$?- > /dev/$serialdev", 0);
my $marker = _set_assert_marker($str);
script_sudo("$cmd; $marker", 0);
my $ret = wait_serial("$str-\\d+-", $wait);
$ret = ($ret =~ /$str-(\d+)-/)[0] if $ret;
_handle_script_run_ret($ret, $cmd);
Expand Down

0 comments on commit d394078

Please sign in to comment.