os-autoinst-distri-rocky/lib/anacondatest.pm
Adam Williamson cfb226d3fd Simplify anacondatest root_console to always use tty3
Rawhide KDE lives now have the desktop on tty2, and the installer
environment tty3 now has a shell (in Ye Olde Times it didn't, not
sure when that changed but it's the case at least back to F31).
So let's make our lives simple and just always use tty3 here.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
2020-10-26 09:21:53 -07:00

140 lines
5.3 KiB
Perl

package anacondatest;
use strict;
use base 'basetest';
# base class for all Anaconda (installation) tests
# should be used in tests where Anaconda is running - when it makes sense
# to upload Anaconda logs when something fails. Many tests using this as a
# base likely will also want to `use anaconda` for commonly-used functions.
use testapi;
use utils;
sub post_fail_hook {
my $self = shift;
# if error dialog is shown, click "report" - it then creates directory structure for ABRT
my $has_traceback = 0;
if (check_screen "anaconda_error_report", 10) {
assert_and_click "anaconda_error_report";
$has_traceback = 1;
} elsif (check_screen "anaconda_text_error", 10) { # also for text install
type_string "1\n";
$has_traceback = 1;
}
save_screenshot;
$self->root_console();
# if we're in dracut, do things different
my $dracut = 0;
if (check_screen "root_console_dracut", 0) {
$dracut = 1;
script_run "dhclient";
}
# if we don't have tar or a network connection, we'll try and at
# least send out *some* kinda info via the serial line
my $hostip = testapi::host_ip();
if (script_run "ping -c 2 ${hostip}") {
if ($dracut) {
script_run 'printf "\n** RDSOSREPORT **\n" > /dev/' . $serialdev;
script_run "cat /run/initramfs/rdsosreport.txt > /dev/${serialdev}";
return;
}
script_run 'printf "\n** IP ADDR **\n" > /dev/' . $serialdev;
script_run "ip addr > /dev/${serialdev} 2>&1";
script_run 'printf "\n** IP ROUTE **\n" > /dev/' . $serialdev;
script_run "ip route > /dev/${serialdev} 2>&1";
script_run 'printf "\n** NETWORKMANAGER.SERVICE STATUS **\n" > /dev/' . $serialdev;
script_run "systemctl --no-pager -l status NetworkManager.service > /dev/${serialdev} 2>&1";
script_run 'printf "\n** X.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/X.log > /dev/${serialdev}";
script_run 'printf "\n** ANACONDA.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/anaconda.log > /dev/${serialdev}";
script_run 'printf "\n** PACKAGING.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/packaging.log > /dev/${serialdev}";
script_run 'printf "\n** STORAGE.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/storage.log > /dev/${serialdev}";
script_run 'printf "\n** SYSLOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/syslog > /dev/${serialdev}";
script_run 'printf "\n** PROGRAM.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/program.log > /dev/${serialdev}";
script_run 'printf "\n** DNF.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/dnf.log > /dev/${serialdev}";
script_run 'printf "\n** DNF.LIBREPO.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/dnf.librepo.log > /dev/${serialdev}";
script_run 'printf "\n** DNF.RPM.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/dnf.rpm.log > /dev/${serialdev}";
script_run 'printf "\n** DBUS.LOG **\n" > /dev/' . $serialdev;
script_run "cat /tmp/dbus.log > /dev/${serialdev}";
return;
}
if ($dracut) {
upload_logs "/run/initramfs/rdsosreport.txt", failok=>1;
# that's all that's really useful, so...
return;
}
upload_logs "/tmp/X.log", failok=>1;
upload_logs "/tmp/anaconda.log", failok=>1;
upload_logs "/tmp/packaging.log", failok=>1;
upload_logs "/tmp/storage.log", failok=>1;
upload_logs "/tmp/syslog", failok=>1;
upload_logs "/tmp/program.log", failok=>1;
upload_logs "/tmp/dnf.log", failok=>1;
upload_logs "/tmp/dnf.librepo.log", failok=>1;
upload_logs "/tmp/dnf.rpm.log", failok=>1;
upload_logs "/tmp/dbus.log", failok=>1;
if ($has_traceback) {
# Upload Anaconda traceback logs
script_run "tar czf /tmp/anaconda_tb.tar.gz /tmp/anaconda-tb-*";
upload_logs "/tmp/anaconda_tb.tar.gz";
}
# Upload all ABRT logs (if there are any)
unless (script_run 'test -n "$(ls -A /var/tmp)" && tar czf /var/tmp/var_tmp.tar.gz /var/tmp') {
upload_logs "/var/tmp/var_tmp.tar.gz";
}
# Upload /var/log
unless (script_run "tar czf /tmp/var_log.tar.gz /var/log") {
upload_logs "/tmp/var_log.tar.gz";
}
# Upload anaconda core dump, if there is one
unless (script_run "ls /tmp/anaconda.core.* && tar czf /tmp/anaconda.core.tar.gz /tmp/anaconda.core.*") {
upload_logs "/tmp/anaconda.core.tar.gz";
}
}
sub root_console {
# Switch to an appropriate TTY and log in as root.
my $self = shift;
my %args = (
# 0 means use console_login's default, non-zero values
# passed to console_login
timeout => 0,
@_);
if (get_var("SERIAL_CONSOLE")) {
# select first virtio terminal, we rely on anaconda having run
# a root shell on it for us
select_console("virtio-console");
# as we don't have any live image serial install tests, we
# know we don't need to login
return;
}
else {
# tty3 has a shell on all f31+ installer and live images
send_key "ctrl-alt-f3";
}
console_login(user=>"root", timeout=>$args{timeout});
}
1;
# vim: set sw=4 et: