mirror of
https://github.com/rocky-linux/os-autoinst-distri-rocky.git
synced 2024-12-20 17:58:29 +00:00
181 lines
6.8 KiB
Perl
181 lines
6.8 KiB
Perl
|
package anaconda;
|
||
|
|
||
|
use strict;
|
||
|
|
||
|
use base 'Exporter';
|
||
|
use Exporter;
|
||
|
|
||
|
use testapi;
|
||
|
use utils;
|
||
|
|
||
|
our @EXPORT = qw/select_disks custom_scheme_select custom_change_type custom_change_fs custom_change_device custom_delete_part get_full_repo get_mirrorlist_url/;
|
||
|
|
||
|
sub select_disks {
|
||
|
# Handles disk selection. Has one optional argument - number of
|
||
|
# disks to select. Should be run when main Anaconda hub is
|
||
|
# displayed. Enters disk selection spoke and then ensures that
|
||
|
# required number of disks are selected. Additionally, if
|
||
|
# PARTITIONING variable starts with custom_, selects "custom
|
||
|
# partitioning" checkbox. Example usage:
|
||
|
# after calling `select_disks(2);` from Anaconda main hub,
|
||
|
# installation destination spoke will be displayed and two
|
||
|
# attached disks will be selected for installation.
|
||
|
my %args = (
|
||
|
disks => 1,
|
||
|
iscsi => {},
|
||
|
@_
|
||
|
);
|
||
|
my %iscsi = %{$args{iscsi}};
|
||
|
# 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 .. $args{disks}) {
|
||
|
assert_and_click "anaconda_install_destination_select_disk_$n";
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
# Single disk case.
|
||
|
if ($args{disks} == 0) {
|
||
|
# Clicking will *de*-select.
|
||
|
assert_and_click "anaconda_install_destination_select_disk_1";
|
||
|
}
|
||
|
elsif ($args{disks} > 1) {
|
||
|
die "Only one disk is connected! Cannot select $args{disks} disks.";
|
||
|
}
|
||
|
# For exactly 1 disk, we don't need to do anything.
|
||
|
}
|
||
|
|
||
|
# Handle network disks.
|
||
|
if (%iscsi) {
|
||
|
assert_and_click "anaconda_install_destination_add_network_disk";
|
||
|
foreach my $target (keys %iscsi) {
|
||
|
my $ip = $iscsi{$target}->[0];
|
||
|
my $user = $iscsi{$target}->[1];
|
||
|
my $password = $iscsi{$target}->[2];
|
||
|
assert_and_click "anaconda_install_destination_add_iscsi_target";
|
||
|
wait_still_screen 2;
|
||
|
type_safely $ip;
|
||
|
wait_screen_change { send_key "tab"; };
|
||
|
type_safely $target;
|
||
|
# start discovery - three tabs, enter
|
||
|
type_safely "\t\t\t\n";
|
||
|
if ($user && $password) {
|
||
|
assert_and_click "anaconda_install_destination_target_auth_type";
|
||
|
assert_and_click "anaconda_install_destination_target_auth_type_chap";
|
||
|
send_key "tab";
|
||
|
type_safely $user;
|
||
|
send_key "tab";
|
||
|
type_safely $password;
|
||
|
}
|
||
|
assert_and_click "anaconda_install_destination_target_login";
|
||
|
assert_and_click "anaconda_install_destination_select_target";
|
||
|
}
|
||
|
assert_and_click "anaconda_spoke_done";
|
||
|
}
|
||
|
|
||
|
# 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 {
|
||
|
# Used for setting custom partitioning scheme (such as LVM).
|
||
|
# Should be called when custom partitioning spoke is displayed.
|
||
|
# Pass the name of the partitioning scheme. Needle
|
||
|
# `anaconda_part_scheme_$scheme` should exist. Example usage:
|
||
|
# `custom_scheme_select("btrfs");` uses needle
|
||
|
# `anaconda_part_scheme_btrfs` to set partition scheme to Btrfs.
|
||
|
my ($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 {
|
||
|
# Used to set different device types for specified partition (e.g.
|
||
|
# RAID). Should be called when custom partitioning spoke is
|
||
|
# displayed. Pass it type of partition and name of partition.
|
||
|
# Needles `anaconda_part_select_$part` and
|
||
|
# `anaconda_part_device_type_$type` should exist. Example usage:
|
||
|
# `custom_change_type("raid", "root");` uses
|
||
|
# `anaconda_part_select_root` and `anaconda_part_device_type_raid`
|
||
|
# needles to set RAID for root partition.
|
||
|
my ($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 {
|
||
|
# Used to set different file systems for specified partition.
|
||
|
# Should be called when custom partitioning spoke is displayed.
|
||
|
# Pass filesystem name and name of partition. Needles
|
||
|
# `anaconda_part_select_$part` and `anaconda_part_fs_$fs` should
|
||
|
# exist. Example usage:
|
||
|
# `custom_change_fs("ext3", "root");` uses
|
||
|
# `anaconda_part_select_root` and `anaconda_part_fs_ext3` needles
|
||
|
# to set ext3 file system for root partition.
|
||
|
my ($fs, $part) = @_;
|
||
|
$part ||= "root";
|
||
|
assert_and_click "anaconda_part_select_$part";
|
||
|
# if fs is already set correctly, do nothing
|
||
|
return if (check_screen "anaconda_part_fs_${fs}_selected", 5);
|
||
|
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_change_device {
|
||
|
my ($part, $devices) = @_;
|
||
|
assert_and_click "anaconda_part_select_$part";
|
||
|
assert_and_click "anaconda_part_device_modify";
|
||
|
foreach my $device (split(/ /, $devices)) {
|
||
|
assert_and_click "anaconda_part_device_${device}";
|
||
|
}
|
||
|
assert_and_click "anaconda_part_device_select";
|
||
|
assert_and_click "anaconda_part_update_settings";
|
||
|
}
|
||
|
|
||
|
sub custom_delete_part {
|
||
|
# Used for deletion of previously added partitions in custom
|
||
|
# partitioning spoke. Should be called when custom partitioning
|
||
|
# spoke is displayed. Pass the partition name. Needle
|
||
|
# `anaconda_part_select_$part` should exist. Example usage:
|
||
|
# `custom_delete_part('swap');` uses needle
|
||
|
# `anaconda_part_select_swap` to delete previously added swap
|
||
|
# partition.
|
||
|
my ($part) = @_;
|
||
|
return if not $part;
|
||
|
assert_and_click "anaconda_part_select_$part";
|
||
|
assert_and_click "anaconda_part_delete";
|
||
|
}
|
||
|
|
||
|
sub get_full_repo {
|
||
|
my ($repourl) = @_;
|
||
|
# trivial thing we kept repeating: fill out an HTTP or HTTPS
|
||
|
# repo URL with flavor and arch, leave NFS ones alone (as for
|
||
|
# NFS tests we just use a mounted ISO and the URL is complete)
|
||
|
if ($repourl !~ m/^nfs/) {
|
||
|
$repourl .= "/Everything/".get_var("ARCH")."/os";
|
||
|
}
|
||
|
return $repourl;
|
||
|
}
|
||
|
|
||
|
sub get_mirrorlist_url {
|
||
|
return "mirrors.fedoraproject.org/mirrorlist?repo=fedora-" . lc(get_var("VERSION")) . "&arch=" . get_var('ARCH');
|
||
|
}
|