mirror of
https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git
synced 2024-12-12 14:23:09 +00:00
5f702b0be8
This is a surprisingly large change as we want to go back to the console we were previously on after doing it. To do that we need to know what console we were on, and to know *that*, we need to port everything that currently uses (ctrl-)alt-fX to switch consoles to use select_console instead. This is primarily intended to make running setup_repos.py faster when it has to download a lot of packages (as typing in hundreds of package names is quite slow). But it actually makes the whole thing faster, even when only downloading one or two packages. Signed-off-by: Adam Williamson <awilliam@redhat.com>
152 lines
5.7 KiB
Perl
152 lines
5.7 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** FREE **\n" > /dev/' . $serialdev;
|
|
script_run "free -h > /dev/${serialdev} 2>&1";
|
|
script_run 'printf "\n** DF **\n" > /dev/' . $serialdev;
|
|
script_run "df -h > /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;
|
|
}
|
|
|
|
unless (script_run "df -h > /tmp/df.log") {
|
|
upload_logs "/tmp/df.log", failok => 1;
|
|
}
|
|
unless (script_run "free -h > /tmp/free.log") {
|
|
upload_logs "/tmp/free.log", failok => 1;
|
|
}
|
|
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
|
|
select_console "tty3-console";
|
|
}
|
|
console_login(user => "root", timeout => $args{timeout});
|
|
}
|
|
|
|
1;
|
|
|
|
# vim: set sw=4 et:
|