package anacondatest; use base 'fedorabase'; # 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 use testapi; sub post_fail_hook { my $self = shift; # if error dialog is shown, it created traceback file my $has_traceback = 0; if (check_screen "anaconda_error", 10) { $has_traceback = 1; } $self->root_console(check=>0); if (check_screen "root_console", 10) { upload_logs "/tmp/X.log"; upload_logs "/tmp/anaconda.log"; upload_logs "/tmp/packaging.log"; upload_logs "/tmp/storage.log"; upload_logs "/tmp/syslog"; upload_logs "/tmp/program.log"; upload_logs "/tmp/dnf.log"; upload_logs "/tmp/dnf.librepo.log"; upload_logs "/tmp/dnf.rpm.log"; 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 script_run "tar czf var_tmp.tar.gz /var/tmp"; upload_logs "/var/tmp/var_tmp.tar.gz"; # Upload /var/log script_run "tar czf /tmp/var_log.tar.gz /var/log"; upload_logs "/tmp/var_log.tar.gz"; } else { save_screenshot; } } sub root_console { my $self = shift; my %args = ( check => 1, # whether to fail when console wasn't reached @_); if (get_var("LIVE")) { send_key "ctrl-alt-f2"; } else { # Working around RHBZ 1222413, no console on tty2 send_key "ctrl-alt-f1"; send_key "ctrl-b"; send_key "2"; } $self->console_login(user=>"root",check=>$args{check}); } sub select_disks { my ($self, $disks) = @_; $disks ||= 1; # Anaconda hub assert_screen "anaconda_main_hub", 300; # # Damn animation delay can cause bad clicks here too - wait for it sleep 1; assert_and_click "anaconda_main_hub_install_destination"; if (get_var('NUMDISKS') > 1) { # Multi-disk case. Select however many disks the test needs. If # $disks is 0, this will do nothing, and 0 disks will be selected. for my $n (1 .. $disks) { assert_and_click "anaconda_install_destination_select_disk_$n"; } } else { # Single disk case. if ($disks == 0) { # Clicking will *de*-select. assert_and_click "anaconda_install_destination_select_disk_1"; } elsif ($disks > 1) { die "Only one disk is connected! Cannot select $disks disks."; } # For exactly 1 disk, we don't need to do anything. } # If this is a custom partitioning test, select custom partitioning. if (get_var('PARTITIONING') =~ /^custom_/) { assert_and_click "anaconda_manual_partitioning"; } } sub custom_scheme_select { my ($self, $scheme) = @_; assert_and_click "anaconda_part_scheme"; # Move the mouse away from the menu mouse_set(10, 10); assert_and_click "anaconda_part_scheme_$scheme"; } sub custom_change_type { my ($self, $type, $part) = @_; $part ||= "root"; assert_and_click "anaconda_part_select_$part"; assert_and_click "anaconda_part_device_type"; # Move the mouse away from the menu mouse_set(10, 10); assert_and_click "anaconda_part_device_type_$type"; assert_and_click "anaconda_part_update_settings"; } sub custom_change_fs { my ($self, $fs, $part) = @_; $part ||= "root"; assert_and_click "anaconda_part_select_$part"; assert_and_click "anaconda_part_fs"; # Move the mouse away from the menu mouse_set(10, 10); assert_and_click "anaconda_part_fs_$fs"; assert_and_click "anaconda_part_update_settings"; } sub custom_delete_part { my ($self, $part) = @_; return if not $part; assert_and_click "anaconda_part_select_$part"; assert_and_click "anaconda_part_delete"; } 1; # vim: set sw=4 et: