mirror of
https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git
synced 2024-09-12 11:27:21 +00:00
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
|
|
send_key "ctrl-alt-f3";
|
|
}
|
|
console_login(user => "root", timeout => $args{timeout});
|
|
}
|
|
|
|
1;
|
|
|
|
# vim: set sw=4 et:
|