2016-09-07 08:34:54 +00:00
|
|
|
package main_common;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
|
|
|
|
use base 'Exporter';
|
|
|
|
use Exporter;
|
|
|
|
|
|
|
|
use testapi;
|
2016-09-24 19:42:39 +00:00
|
|
|
our @EXPORT = qw/run_with_error_check check_type_string type_safely type_very_safely desktop_vt/;
|
2016-09-07 08:34:54 +00:00
|
|
|
|
|
|
|
sub run_with_error_check {
|
|
|
|
my ($func, $error_screen) = @_;
|
|
|
|
die "Error screen appeared" if (check_screen $error_screen, 5);
|
|
|
|
$func->();
|
|
|
|
die "Error screen appeared" if (check_screen $error_screen, 5);
|
|
|
|
}
|
2016-09-12 17:24:30 +00:00
|
|
|
|
|
|
|
# type the string in sets of characters at a time (default 3), waiting
|
|
|
|
# for a screen change after each set. Intended to be safer when the VM
|
|
|
|
# is busy and regular type_string may overload the input buffer. Args
|
|
|
|
# passed along to `type_string`. Accepts additional args:
|
|
|
|
# `size` - size of character groups (default 3) - set to 1 for extreme
|
|
|
|
# safety (but slower and more screenshotting)
|
|
|
|
sub check_type_string {
|
|
|
|
my ($string, %args) = @_;
|
|
|
|
$args{size} //= 3;
|
|
|
|
|
|
|
|
# split string into an array of pieces of specified size
|
|
|
|
# https://stackoverflow.com/questions/372370
|
|
|
|
my @pieces = unpack("(a$args{size})*", $string);
|
|
|
|
for my $piece (@pieces) {
|
|
|
|
wait_screen_change { type_string($piece, %args); };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# high-level 'type this string quite safely but reasonably fast'
|
|
|
|
# function whose specific implementation may vary
|
|
|
|
sub type_safely {
|
|
|
|
my $string = shift;
|
|
|
|
check_type_string($string, max_interval => 20);
|
|
|
|
wait_still_screen 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
# high-level 'type this string extremely safely and rather slow'
|
|
|
|
# function whose specific implementation may vary
|
|
|
|
sub type_very_safely {
|
|
|
|
my $string = shift;
|
|
|
|
check_type_string($string, size => 1, still => 5, max_interval => 1);
|
|
|
|
wait_still_screen 5;
|
|
|
|
}
|
2016-09-24 19:42:39 +00:00
|
|
|
|
|
|
|
# Figure out what tty the desktop is on, switch to it. Assumes we're
|
|
|
|
# at a root console
|
|
|
|
sub desktop_vt {
|
|
|
|
# use ps to find the tty of Xwayland or Xorg
|
|
|
|
my $xout;
|
|
|
|
# don't fail test if we don't find any process, just guess tty1
|
|
|
|
eval { $xout = script_output 'ps -C Xwayland,Xorg -o tty --no-headers'; };
|
|
|
|
my $tty = 1; # default
|
|
|
|
while ($xout =~ /tty(\d)/g) {
|
|
|
|
$tty = $1; # most recent match is probably best
|
|
|
|
}
|
|
|
|
send_key "ctrl-alt-f${tty}";
|
|
|
|
}
|