mirror of
https://github.com/rocky-linux/os-autoinst-distri-rocky.git
synced 2024-12-22 18:58:30 +00:00
ddc91efeff
use 'ps' output for Xorg and Xwayland. We'd need some new openQA var to get this right by 'guessing', as it's vt1 for Workstation when running live - so long as autologin worked - but vt2 after install. We'd need a var or some other thing to detect which case we're running in. LIVE doesn't do it, it's set even when running a post-install test from a live image. So instead let's just do it a bit more cleverly. This also gives us a bit of insurance against changes in GDM, SDDM etc. behaviour, so long as Xwayland or Xorg is running (and we can add additional processes to the list, like gnome-shell, if needed/appropriate). We assume the *final* listed process - i.e. the most recently-started one - will be the desktop; this covers gdm's behaviour of starting up on vt1 then running the user session on vt2. We can make this function more complex and add args if we ever get to the point where we have multi- user tests running or anything (e.g. allow to pass a username and only look for that user's processes). Landing without review as this broke the live variant of the test on Workstation in production (kinda not sure why it worked in testing, or I didn't notice that it failed, but never mind). I've tested it on staging.
65 lines
2.1 KiB
Perl
65 lines
2.1 KiB
Perl
package main_common;
|
|
|
|
use strict;
|
|
|
|
use base 'Exporter';
|
|
use Exporter;
|
|
|
|
use testapi;
|
|
our @EXPORT = qw/run_with_error_check check_type_string type_safely type_very_safely desktop_vt/;
|
|
|
|
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);
|
|
}
|
|
|
|
# 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;
|
|
}
|
|
|
|
# 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}";
|
|
}
|