mirror of
https://github.com/rocky-linux/os-autoinst-distri-rocky.git
synced 2024-11-25 06:31:26 +00:00
Move all remaining utility functions into exporter modules
Summary: This adds a couple of new exporter modules, renames main_common to utils (this is a better name: openSUSE's main_common is functions used in main.pm, utils is what they call their module full of miscellaneous commonly-used functions), and moves a bunch of utility functions that were previously needlessly implemented as instance methods in base classes into the exporter modules. That means we can get rid of all the annoying $self-> syntax for calling them. We get rid of `fedorabase` entirely, as it's no longer useful for anything. Other base classes keep the 'standard' methods (like `post_fail_hook`) and methods which actually need to be methods (like `root_console`, whose behaviour is different in anacondatest and installedtest). Test Plan: Do a full test suite run and check everything lines up. There should be no functional differences from before at all, this is just a re-org. Reviewers: jskladan, garretraziel_but_actually_jsedlak_who_uses_stupid_nicknames Reviewed By: garretraziel_but_actually_jsedlak_who_uses_stupid_nicknames Subscribers: tflink Differential Revision: https://phab.qa.fedoraproject.org/D1080
This commit is contained in:
parent
a091185af1
commit
b67f604894
@ -59,14 +59,13 @@ After installation is finished and installed system is fully booted, you can run
|
|||||||
|
|
||||||
### Test inheritance
|
### Test inheritance
|
||||||
|
|
||||||
Your test can inherit from `basetest`, `fedorabase`, `installedtest` or `anacondatest`. Each provides relevant methods that are documented in-line, so read the files (`lib/basetest.pm`, `lib/fedorabase.pm` etc.) for information on these.
|
Your test can inherit from `basetest`, `installedtest` or `anacondatest`. Each provides relevant methods that are documented in-line, so read the files (`lib/anacondatest.pm`, `lib/installedtest.pm`) for information on these.
|
||||||
|
|
||||||
- `basetest`: A base class provided by os-autoinst - it has empty `post_fail_hook()` and doesn't set any flags.
|
- `basetest`: A base class provided by os-autoinst - it has empty `post_fail_hook()` and doesn't set any flags.
|
||||||
- `fedorabase`: doesn't set flags and does nothing in `post_fail_hook()`, but provides some basic methods that will be useful during testing Fedora. It should be used when no other, more specific class can be used.
|
|
||||||
- `anacondatest`: should be used in tests where Anaconda is running. It uploads Anaconda logs (for example `anaconda.log` or `packaging.log`) in `post_fail_hook()`.
|
- `anacondatest`: should be used in tests where Anaconda is running. It uploads Anaconda logs (for example `anaconda.log` or `packaging.log`) in `post_fail_hook()`.
|
||||||
- `installedtest`: should be used in tests that are running on installed system (either in postinstall phase or in upgrade tests).
|
- `installedtest`: should be used in tests that are running on installed system (either in postinstall phase or in upgrade tests).
|
||||||
|
|
||||||
There are also several modules that export utility functions, currently `main_common`, `freeipa`, and `packagetest`. Your test can `use` any of these modules and then directly call the functions they export. Again, the functions are documented in-line.
|
There are also several modules that export utility functions, currently `utils`, `anaconda`, `freeipa`, `packagetest` and `tapnet`. Your test can `use` any of these modules and then directly call the functions they export. Again, the functions are documented in-line.
|
||||||
|
|
||||||
### New test development workflow
|
### New test development workflow
|
||||||
|
|
||||||
|
180
lib/anaconda.pm
Normal file
180
lib/anaconda.pm
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
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');
|
||||||
|
}
|
@ -1,13 +1,14 @@
|
|||||||
package anacondatest;
|
package anacondatest;
|
||||||
use base 'fedorabase';
|
use base 'basetest';
|
||||||
|
|
||||||
# base class for all Anaconda (installation) tests
|
# base class for all Anaconda (installation) tests
|
||||||
|
|
||||||
# should be used in tests where Anaconda is running - when it makes sense
|
# should be used in tests where Anaconda is running - when it makes sense
|
||||||
# to upload Anaconda logs when something fails
|
# 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 testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub post_fail_hook {
|
sub post_fail_hook {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -74,176 +75,6 @@ sub root_console {
|
|||||||
console_login(user=>"root");
|
console_login(user=>"root");
|
||||||
}
|
}
|
||||||
|
|
||||||
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 `$self->select_disks(2);` from Anaconda main hub,
|
|
||||||
# installation destination spoke will be displayed and two
|
|
||||||
# attached disks will be selected for installation.
|
|
||||||
my $self = shift;
|
|
||||||
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:
|
|
||||||
# `$self->custom_scheme_select("btrfs");` uses needle
|
|
||||||
# `anaconda_part_scheme_btrfs` to set partition scheme to Btrfs.
|
|
||||||
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 {
|
|
||||||
# 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:
|
|
||||||
# `$self->custom_change_type("raid", "root");` uses
|
|
||||||
# `anaconda_part_select_root` and `anaconda_part_device_type_raid`
|
|
||||||
# needles to set RAID for root partition.
|
|
||||||
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 {
|
|
||||||
# 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:
|
|
||||||
# `$self->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 ($self, $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 ($self, $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:
|
|
||||||
# `$self->custom_delete_part('swap');` uses
|
|
||||||
# `anaconda_part_select_swap` to delete previously added swap
|
|
||||||
# partition.
|
|
||||||
my ($self, $part) = @_;
|
|
||||||
return if not $part;
|
|
||||||
assert_and_click "anaconda_part_select_$part";
|
|
||||||
assert_and_click "anaconda_part_delete";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub get_full_repo {
|
|
||||||
my ($self, $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')
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
# vim: set sw=4 et:
|
# vim: set sw=4 et:
|
||||||
|
@ -1,142 +0,0 @@
|
|||||||
package fedorabase;
|
|
||||||
use base 'basetest';
|
|
||||||
use lockapi;
|
|
||||||
|
|
||||||
# base class for all Fedora tests
|
|
||||||
|
|
||||||
# use this class when using other base class doesn't make sense
|
|
||||||
|
|
||||||
use testapi;
|
|
||||||
|
|
||||||
sub do_bootloader {
|
|
||||||
# Handle bootloader screen. 'bootloader' is syslinux or grub.
|
|
||||||
# 'uefi' is whether this is a UEFI install, will get_var UEFI if
|
|
||||||
# not explicitly set. 'postinstall' is whether we're on an
|
|
||||||
# installed system or at the installer (this matters for how many
|
|
||||||
# times we press 'down' to find the kernel line when typing args).
|
|
||||||
# 'args' is a string of extra kernel args, if desired. 'mutex' is
|
|
||||||
# a parallel test mutex lock to wait for before proceeding, if
|
|
||||||
# desired. 'first' is whether to hit 'up' a couple of times to
|
|
||||||
# make sure we boot the first menu entry. 'timeout' is how long to
|
|
||||||
# wait for the bootloader screen.
|
|
||||||
my $self = shift;
|
|
||||||
my %args = (
|
|
||||||
postinstall => 0,
|
|
||||||
params => "",
|
|
||||||
mutex => "",
|
|
||||||
first => 1,
|
|
||||||
timeout => 30,
|
|
||||||
uefi => get_var("UEFI"),
|
|
||||||
@_
|
|
||||||
);
|
|
||||||
# if not postinstall and not UEFI, syslinux
|
|
||||||
$args{bootloader} //= ($args{uefi} || $args{postinstall}) ? "grub" : "syslinux";
|
|
||||||
if ($args{uefi}) {
|
|
||||||
# we use the firmware-type specific tags because we want to be
|
|
||||||
# sure we actually did a UEFI boot
|
|
||||||
assert_screen "bootloader_uefi", $args{timeout};
|
|
||||||
} else {
|
|
||||||
assert_screen "bootloader_bios", $args{timeout};
|
|
||||||
}
|
|
||||||
if ($args{mutex}) {
|
|
||||||
# cancel countdown
|
|
||||||
send_key "left";
|
|
||||||
mutex_lock $args{mutex};
|
|
||||||
mutex_unlock $args{mutex};
|
|
||||||
}
|
|
||||||
if ($args{first}) {
|
|
||||||
# press up a couple of times to make sure we're at first entry
|
|
||||||
send_key "up";
|
|
||||||
send_key "up";
|
|
||||||
}
|
|
||||||
if ($args{params}) {
|
|
||||||
if ($args{bootloader} eq "syslinux") {
|
|
||||||
send_key "tab";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
send_key "e";
|
|
||||||
# ternary: 13 'downs' to reach the kernel line for installed
|
|
||||||
# system, 2 for UEFI installer
|
|
||||||
my $presses = $args{postinstall} ? 13 : 2;
|
|
||||||
foreach my $i (1..$presses) {
|
|
||||||
send_key "down";
|
|
||||||
}
|
|
||||||
send_key "end";
|
|
||||||
}
|
|
||||||
type_string " $args{params}";
|
|
||||||
}
|
|
||||||
# ctrl-X boots from grub editor mode
|
|
||||||
send_key "ctrl-x";
|
|
||||||
# return boots all other cases
|
|
||||||
send_key "ret";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub get_milestone {
|
|
||||||
my $self = shift;
|
|
||||||
# FIXME: we don't know how to do this with Pungi 4 yet.
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub clone_host_file {
|
|
||||||
# copy a given file from the host into the guest. Mainly used
|
|
||||||
# for networking config on tap tests. this is pretty crazy, but
|
|
||||||
# SUSE do almost the same thing...
|
|
||||||
my $self = shift;
|
|
||||||
my $file = shift;
|
|
||||||
my $text = '';
|
|
||||||
open(my $fh, '<', $file);
|
|
||||||
while (<$fh>) {
|
|
||||||
$text .= $_;
|
|
||||||
}
|
|
||||||
# escape any ' characters in the text...
|
|
||||||
$text =~ s/"/\\"/g;
|
|
||||||
assert_script_run "printf \"$text\" > $file";
|
|
||||||
# for debugging...
|
|
||||||
assert_script_run "cat $file";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub setup_tap_static {
|
|
||||||
# this is a common thing for tap tests, where we set up networking
|
|
||||||
# for the system with a static IP address and possibly a specific
|
|
||||||
# hostname
|
|
||||||
my $self = shift;
|
|
||||||
my $ip = shift;
|
|
||||||
my $hostname = shift || "";
|
|
||||||
if ($hostname) {
|
|
||||||
# assigning output of split to a single-item array gives us just
|
|
||||||
# the first split
|
|
||||||
my ($short) = split(/\./, $hostname);
|
|
||||||
# set hostname
|
|
||||||
assert_script_run "hostnamectl set-hostname $hostname";
|
|
||||||
# add entry to /etc/hosts
|
|
||||||
assert_script_run "echo '$ip $hostname $short' >> /etc/hosts";
|
|
||||||
}
|
|
||||||
# bring up network. DEFROUTE is *vital* here
|
|
||||||
assert_script_run "printf 'DEVICE=eth0\nBOOTPROTO=none\nIPADDR=$ip\nGATEWAY=10.0.2.2\nPREFIX=24\nDEFROUTE=yes' > /etc/sysconfig/network-scripts/ifcfg-eth0";
|
|
||||||
script_run "systemctl restart NetworkManager.service";
|
|
||||||
}
|
|
||||||
|
|
||||||
sub get_host_dns {
|
|
||||||
# get DNS server addresses from the host
|
|
||||||
my @forwards;
|
|
||||||
open(FH, '<', "/etc/resolv.conf");
|
|
||||||
while (<FH>) {
|
|
||||||
if ($_ =~ m/^nameserver +(.+)/) {
|
|
||||||
push @forwards, $1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return @forwards;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub boot_decrypt {
|
|
||||||
# decrypt storage during boot; arg is timeout (in seconds)
|
|
||||||
my $self = shift;
|
|
||||||
my $timeout = shift || 60;
|
|
||||||
assert_screen "boot_enter_passphrase", $timeout; #
|
|
||||||
type_string get_var("ENCRYPT_PASSWORD");
|
|
||||||
send_key "ret";
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
|
||||||
|
|
||||||
# vim: set sw=4 et:
|
|
@ -6,7 +6,7 @@ use base 'Exporter';
|
|||||||
use Exporter;
|
use Exporter;
|
||||||
|
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
our @EXPORT = qw/add_user start_webui/;
|
our @EXPORT = qw/add_user start_webui/;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
package installedtest;
|
package installedtest;
|
||||||
use base 'fedorabase';
|
use base 'basetest';
|
||||||
|
|
||||||
# base class for tests that run on installed system
|
# base class for tests that run on installed system
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ use base 'fedorabase';
|
|||||||
# of upgrade tests, postinstall phases...
|
# of upgrade tests, postinstall phases...
|
||||||
|
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub root_console {
|
sub root_console {
|
||||||
# Switch to a default or specified TTY and log in as root.
|
# Switch to a default or specified TTY and log in as root.
|
||||||
@ -45,68 +45,6 @@ sub post_fail_hook {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub check_release {
|
|
||||||
# Checks whether the installed release matches a given value. E.g.
|
|
||||||
# `check_release(23)` checks whether the installed system is
|
|
||||||
# Fedora 23. The value can be 'Rawhide' or a Fedora release
|
|
||||||
# number; often you will want to use `get_var('VERSION')`. Expects
|
|
||||||
# a console prompt to be active when it is called.
|
|
||||||
my $self = shift;
|
|
||||||
my $release = shift;
|
|
||||||
my $check_command = "grep SUPPORT_PRODUCT_VERSION /usr/lib/os.release.d/os-release-fedora";
|
|
||||||
validate_script_output $check_command, sub { $_ =~ m/REDHAT_SUPPORT_PRODUCT_VERSION=$release/ };
|
|
||||||
}
|
|
||||||
|
|
||||||
sub menu_launch_type {
|
|
||||||
# Launch an application in a graphical environment, by opening a
|
|
||||||
# launcher, typing the specified string and hitting enter. Pass
|
|
||||||
# the string to be typed to launch whatever it is you want.
|
|
||||||
my $self = shift;
|
|
||||||
my $app = shift;
|
|
||||||
# super does not work on KDE, because fml
|
|
||||||
send_key 'alt-f1';
|
|
||||||
# srsly KDE y u so slo
|
|
||||||
wait_still_screen 3;
|
|
||||||
type_very_safely $app;
|
|
||||||
send_key 'ret';
|
|
||||||
}
|
|
||||||
|
|
||||||
sub start_cockpit {
|
|
||||||
# Starting from a console, get to a browser with Cockpit (running
|
|
||||||
# on localhost) shown. If $login is truth-y, also log in. Assumes
|
|
||||||
# X and Firefox are installed.
|
|
||||||
my $self = shift;
|
|
||||||
my $login = shift || 0;
|
|
||||||
# run firefox directly in X as root. never do this, kids!
|
|
||||||
type_string "startx /usr/bin/firefox -width 1024 -height 768 http://localhost:9090\n";
|
|
||||||
assert_screen "cockpit_login";
|
|
||||||
wait_still_screen 5;
|
|
||||||
if ($login) {
|
|
||||||
type_safely "root";
|
|
||||||
wait_screen_change { send_key "tab"; };
|
|
||||||
type_safely get_var("ROOT_PASSWORD", "weakpassword");
|
|
||||||
send_key "ret";
|
|
||||||
assert_screen "cockpit_main";
|
|
||||||
# wait for any animation or other weirdness
|
|
||||||
# can't use wait_still_screen because of that damn graph
|
|
||||||
sleep 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub repo_setup {
|
|
||||||
# disable updates-testing and updates and use the compose location
|
|
||||||
# as the target for fedora and rawhide rather than mirrorlist, so
|
|
||||||
# tools see only packages from the compose under test
|
|
||||||
my $location = get_var("LOCATION");
|
|
||||||
assert_script_run 'dnf config-manager --set-disabled updates-testing updates';
|
|
||||||
# we use script_run here as the rawhide repo file won't always exist
|
|
||||||
# and we don't want to bother testing or predicting its existence;
|
|
||||||
# assert_script_run doesn't buy you much with sed anyway as it'll
|
|
||||||
# return 0 even if it replaced nothing
|
|
||||||
script_run "sed -i -e 's,^metalink,#metalink,g' -e 's,^#baseurl.*basearch,baseurl=${location}/Everything/\$basearch,g' /etc/yum.repos.d/{fedora,fedora-rawhide}.repo", 0;
|
|
||||||
script_run "cat /etc/yum.repos.d/{fedora,fedora-rawhide}.repo", 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
# vim: set sw=4 et:
|
# vim: set sw=4 et:
|
||||||
|
62
lib/tapnet.pm
Normal file
62
lib/tapnet.pm
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
package tapnet;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use base 'Exporter';
|
||||||
|
use Exporter;
|
||||||
|
|
||||||
|
use testapi;
|
||||||
|
our @EXPORT = qw/clone_host_file setup_tap_static get_host_dns/;
|
||||||
|
|
||||||
|
sub clone_host_file {
|
||||||
|
# copy a given file from the host into the guest. Mainly used
|
||||||
|
# for networking config on tap tests. this is pretty crazy, but
|
||||||
|
# SUSE do almost the same thing...
|
||||||
|
my $file = shift;
|
||||||
|
my $text = '';
|
||||||
|
open(my $fh, '<', $file);
|
||||||
|
while (<$fh>) {
|
||||||
|
$text .= $_;
|
||||||
|
}
|
||||||
|
# escape any " characters in the text...
|
||||||
|
$text =~ s/"/\\"/g;
|
||||||
|
assert_script_run "printf \"$text\" > $file";
|
||||||
|
# for debugging...
|
||||||
|
assert_script_run "cat $file";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub setup_tap_static {
|
||||||
|
# this is a common thing for tap tests, where we set up networking
|
||||||
|
# for the system with a static IP address and possibly a specific
|
||||||
|
# hostname
|
||||||
|
my $ip = shift;
|
||||||
|
my $hostname = shift || "";
|
||||||
|
if ($hostname) {
|
||||||
|
# assigning output of split to a single-item array gives us just
|
||||||
|
# the first split
|
||||||
|
my ($short) = split(/\./, $hostname);
|
||||||
|
# set hostname
|
||||||
|
assert_script_run "hostnamectl set-hostname $hostname";
|
||||||
|
# add entry to /etc/hosts
|
||||||
|
assert_script_run "echo '$ip $hostname $short' >> /etc/hosts";
|
||||||
|
}
|
||||||
|
# bring up network. DEFROUTE is *vital* here
|
||||||
|
assert_script_run "printf 'DEVICE=eth0\nBOOTPROTO=none\nIPADDR=$ip\nGATEWAY=10.0.2.2\nPREFIX=24\nDEFROUTE=yes' > /etc/sysconfig/network-scripts/ifcfg-eth0";
|
||||||
|
script_run "systemctl restart NetworkManager.service";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_host_dns {
|
||||||
|
# get DNS server addresses from the host
|
||||||
|
my @forwards;
|
||||||
|
open(FH, '<', "/etc/resolv.conf");
|
||||||
|
while (<FH>) {
|
||||||
|
if ($_ =~ m/^nameserver +(.+)/) {
|
||||||
|
push @forwards, $1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return @forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
# vim: set sw=4 et:
|
@ -1,12 +1,13 @@
|
|||||||
package main_common;
|
package utils;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use base 'Exporter';
|
use base 'Exporter';
|
||||||
use Exporter;
|
use Exporter;
|
||||||
|
|
||||||
|
use lockapi;
|
||||||
use testapi;
|
use testapi;
|
||||||
our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us/;
|
our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader get_milestone boot_decrypt check_release menu_launch_type start_cockpit repo_setup/;
|
||||||
|
|
||||||
sub run_with_error_check {
|
sub run_with_error_check {
|
||||||
my ($func, $error_screen) = @_;
|
my ($func, $error_screen) = @_;
|
||||||
@ -162,3 +163,141 @@ sub console_loadkeys_us {
|
|||||||
script_run "loqdkeys us", 0;
|
script_run "loqdkeys us", 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub do_bootloader {
|
||||||
|
# Handle bootloader screen. 'bootloader' is syslinux or grub.
|
||||||
|
# 'uefi' is whether this is a UEFI install, will get_var UEFI if
|
||||||
|
# not explicitly set. 'postinstall' is whether we're on an
|
||||||
|
# installed system or at the installer (this matters for how many
|
||||||
|
# times we press 'down' to find the kernel line when typing args).
|
||||||
|
# 'args' is a string of extra kernel args, if desired. 'mutex' is
|
||||||
|
# a parallel test mutex lock to wait for before proceeding, if
|
||||||
|
# desired. 'first' is whether to hit 'up' a couple of times to
|
||||||
|
# make sure we boot the first menu entry. 'timeout' is how long to
|
||||||
|
# wait for the bootloader screen.
|
||||||
|
my %args = (
|
||||||
|
postinstall => 0,
|
||||||
|
params => "",
|
||||||
|
mutex => "",
|
||||||
|
first => 1,
|
||||||
|
timeout => 30,
|
||||||
|
uefi => get_var("UEFI"),
|
||||||
|
@_
|
||||||
|
);
|
||||||
|
# if not postinstall and not UEFI, syslinux
|
||||||
|
$args{bootloader} //= ($args{uefi} || $args{postinstall}) ? "grub" : "syslinux";
|
||||||
|
if ($args{uefi}) {
|
||||||
|
# we use the firmware-type specific tags because we want to be
|
||||||
|
# sure we actually did a UEFI boot
|
||||||
|
assert_screen "bootloader_uefi", $args{timeout};
|
||||||
|
} else {
|
||||||
|
assert_screen "bootloader_bios", $args{timeout};
|
||||||
|
}
|
||||||
|
if ($args{mutex}) {
|
||||||
|
# cancel countdown
|
||||||
|
send_key "left";
|
||||||
|
mutex_lock $args{mutex};
|
||||||
|
mutex_unlock $args{mutex};
|
||||||
|
}
|
||||||
|
if ($args{first}) {
|
||||||
|
# press up a couple of times to make sure we're at first entry
|
||||||
|
send_key "up";
|
||||||
|
send_key "up";
|
||||||
|
}
|
||||||
|
if ($args{params}) {
|
||||||
|
if ($args{bootloader} eq "syslinux") {
|
||||||
|
send_key "tab";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
send_key "e";
|
||||||
|
# ternary: 13 'downs' to reach the kernel line for installed
|
||||||
|
# system, 2 for UEFI installer
|
||||||
|
my $presses = $args{postinstall} ? 13 : 2;
|
||||||
|
foreach my $i (1..$presses) {
|
||||||
|
send_key "down";
|
||||||
|
}
|
||||||
|
send_key "end";
|
||||||
|
}
|
||||||
|
type_string " $args{params}";
|
||||||
|
}
|
||||||
|
# ctrl-X boots from grub editor mode
|
||||||
|
send_key "ctrl-x";
|
||||||
|
# return boots all other cases
|
||||||
|
send_key "ret";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_milestone {
|
||||||
|
# FIXME: we don't know how to do this with Pungi 4 yet.
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub boot_decrypt {
|
||||||
|
# decrypt storage during boot; arg is timeout (in seconds)
|
||||||
|
my $timeout = shift || 60;
|
||||||
|
assert_screen "boot_enter_passphrase", $timeout; #
|
||||||
|
type_string get_var("ENCRYPT_PASSWORD");
|
||||||
|
send_key "ret";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub check_release {
|
||||||
|
# Checks whether the installed release matches a given value. E.g.
|
||||||
|
# `check_release(23)` checks whether the installed system is
|
||||||
|
# Fedora 23. The value can be 'Rawhide' or a Fedora release
|
||||||
|
# number; often you will want to use `get_var('VERSION')`. Expects
|
||||||
|
# a console prompt to be active when it is called.
|
||||||
|
my $self = shift;
|
||||||
|
my $release = shift;
|
||||||
|
my $check_command = "grep SUPPORT_PRODUCT_VERSION /usr/lib/os.release.d/os-release-fedora";
|
||||||
|
validate_script_output $check_command, sub { $_ =~ m/REDHAT_SUPPORT_PRODUCT_VERSION=$release/ };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub menu_launch_type {
|
||||||
|
# Launch an application in a graphical environment, by opening a
|
||||||
|
# launcher, typing the specified string and hitting enter. Pass
|
||||||
|
# the string to be typed to launch whatever it is you want.
|
||||||
|
my $self = shift;
|
||||||
|
my $app = shift;
|
||||||
|
# super does not work on KDE, because fml
|
||||||
|
send_key 'alt-f1';
|
||||||
|
# srsly KDE y u so slo
|
||||||
|
wait_still_screen 3;
|
||||||
|
type_very_safely $app;
|
||||||
|
send_key 'ret';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub start_cockpit {
|
||||||
|
# Starting from a console, get to a browser with Cockpit (running
|
||||||
|
# on localhost) shown. If $login is truth-y, also log in. Assumes
|
||||||
|
# X and Firefox are installed.
|
||||||
|
my $self = shift;
|
||||||
|
my $login = shift || 0;
|
||||||
|
# run firefox directly in X as root. never do this, kids!
|
||||||
|
type_string "startx /usr/bin/firefox -width 1024 -height 768 http://localhost:9090\n";
|
||||||
|
assert_screen "cockpit_login";
|
||||||
|
wait_still_screen 5;
|
||||||
|
if ($login) {
|
||||||
|
type_safely "root";
|
||||||
|
wait_screen_change { send_key "tab"; };
|
||||||
|
type_safely get_var("ROOT_PASSWORD", "weakpassword");
|
||||||
|
send_key "ret";
|
||||||
|
assert_screen "cockpit_main";
|
||||||
|
# wait for any animation or other weirdness
|
||||||
|
# can't use wait_still_screen because of that damn graph
|
||||||
|
sleep 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub repo_setup {
|
||||||
|
# disable updates-testing and updates and use the compose location
|
||||||
|
# as the target for fedora and rawhide rather than mirrorlist, so
|
||||||
|
# tools see only packages from the compose under test
|
||||||
|
my $location = get_var("LOCATION");
|
||||||
|
assert_script_run 'dnf config-manager --set-disabled updates-testing updates';
|
||||||
|
# we use script_run here as the rawhide repo file won't always exist
|
||||||
|
# and we don't want to bother testing or predicting its existence;
|
||||||
|
# assert_script_run doesn't buy you much with sed anyway as it'll
|
||||||
|
# return 0 even if it replaced nothing
|
||||||
|
script_run "sed -i -e 's,^metalink,#metalink,g' -e 's,^#baseurl.*basearch,baseurl=${location}/Everything/\$basearch,g' /etc/yum.repos.d/{fedora,fedora-rawhide}.repo", 0;
|
||||||
|
script_run "cat /etc/yum.repos.d/{fedora,fedora-rawhide}.repo", 0;
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -15,7 +16,7 @@ sub run {
|
|||||||
# Construct inst.repo arg for REPOSITORY_VARIATION
|
# Construct inst.repo arg for REPOSITORY_VARIATION
|
||||||
my $repourl = get_var("REPOSITORY_VARIATION");
|
my $repourl = get_var("REPOSITORY_VARIATION");
|
||||||
if ($repourl) {
|
if ($repourl) {
|
||||||
$params .= "inst.repo=" . $self->get_full_repo($repourl) . " ";
|
$params .= "inst.repo=" . get_full_repo($repourl) . " ";
|
||||||
}
|
}
|
||||||
$params .= "inst.text " if get_var("ANACONDA_TEXT");
|
$params .= "inst.text " if get_var("ANACONDA_TEXT");
|
||||||
# inst.debug enables memory use tracking
|
# inst.debug enables memory use tracking
|
||||||
@ -27,7 +28,7 @@ sub run {
|
|||||||
my $mutex = get_var("INSTALL_UNLOCK");
|
my $mutex = get_var("INSTALL_UNLOCK");
|
||||||
|
|
||||||
# call do_bootloader with postinstall=0, the params, and the mutex
|
# call do_bootloader with postinstall=0, the params, and the mutex
|
||||||
$self->do_bootloader(postinstall=>0, params=>$params, mutex=>$mutex);
|
do_bootloader(postinstall=>0, params=>$params, mutex=>$mutex);
|
||||||
|
|
||||||
# proceed to installer
|
# proceed to installer
|
||||||
if (get_var("KICKSTART")) {
|
if (get_var("KICKSTART")) {
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $repourl;
|
my $repourl;
|
||||||
if (get_var("MIRRORLIST_GRAPHICAL")) {
|
if (get_var("MIRRORLIST_GRAPHICAL")) {
|
||||||
$repourl = $self->get_mirrorlist_url();
|
$repourl = get_mirrorlist_url();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$repourl = get_var("REPOSITORY_VARIATION", get_var("REPOSITORY_GRAPHICAL"));
|
$repourl = get_var("REPOSITORY_VARIATION", get_var("REPOSITORY_GRAPHICAL"));
|
||||||
$repourl = $self->get_full_repo($repourl);
|
$repourl = get_full_repo($repourl);
|
||||||
}
|
}
|
||||||
|
|
||||||
# check that the repo was used
|
# check that the repo was used
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use main_common;
|
use utils;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "fedorabase";
|
use base "basetest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "fedorabase";
|
use base "basetest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -11,7 +11,7 @@ sub run {
|
|||||||
|
|
||||||
# handle bootloader, if requested
|
# handle bootloader, if requested
|
||||||
if (get_var("GRUB_POSTINSTALL")) {
|
if (get_var("GRUB_POSTINSTALL")) {
|
||||||
$self->do_bootloader(postinstall=>1, params=>get_var("GRUB_POSTINSTALL"), timeout=>$wait_time);
|
do_bootloader(postinstall=>1, params=>get_var("GRUB_POSTINSTALL"), timeout=>$wait_time);
|
||||||
$wait_time = 180;
|
$wait_time = 180;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub type_user_password {
|
sub type_user_password {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
# check both layouts are available at the desktop; here,
|
# check both layouts are available at the desktop; here,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
use tapnet;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -19,7 +20,7 @@ sub run {
|
|||||||
# move to DNS servers
|
# move to DNS servers
|
||||||
type_safely "\n\t\t\t";
|
type_safely "\n\t\t\t";
|
||||||
# set DNS from host
|
# set DNS from host
|
||||||
type_safely join(',', $self->get_host_dns());
|
type_safely join(',', get_host_dns());
|
||||||
type_safely "\t\t\t\t\t\n";
|
type_safely "\t\t\t\t\t\n";
|
||||||
# can take a bit of time as it seems to wait for all the pending
|
# can take a bit of time as it seems to wait for all the pending
|
||||||
# DHCP requests to time out before applying the static config
|
# DHCP requests to time out before applying the static config
|
||||||
|
@ -3,16 +3,17 @@ use strict;
|
|||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
use mmapi;
|
use mmapi;
|
||||||
|
use tapnet;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
# clone host's /etc/hosts (for phx2 internal routing to work)
|
# clone host's /etc/hosts (for phx2 internal routing to work)
|
||||||
# must come *before* setup_tap_static or else it would overwrite
|
# must come *before* setup_tap_static or else it would overwrite
|
||||||
# its changes
|
# its changes
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.110", "support.domain.local");
|
setup_tap_static("10.0.2.110", "support.domain.local");
|
||||||
$self->clone_host_file("/etc/resolv.conf");
|
clone_host_file("/etc/resolv.conf");
|
||||||
|
|
||||||
## DNS / DHCP (dnsmasq)
|
## DNS / DHCP (dnsmasq)
|
||||||
# create config
|
# create config
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -2,19 +2,21 @@ use base "installedtest";
|
|||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
|
use tapnet;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
# clone host's /etc/hosts (for phx2 internal routing to work)
|
# clone host's /etc/hosts (for phx2 internal routing to work)
|
||||||
# must come *before* setup_tap_static or else it would overwrite
|
# must come *before* setup_tap_static or else it would overwrite
|
||||||
# its changes
|
# its changes
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.105", "dbclient.domain.local");
|
setup_tap_static("10.0.2.105", "dbclient.domain.local");
|
||||||
# clone host's resolv.conf to get name resolution
|
# clone host's resolv.conf to get name resolution
|
||||||
$self->clone_host_file("/etc/resolv.conf");
|
clone_host_file("/etc/resolv.conf");
|
||||||
# use compose repo, disable u-t, etc.
|
# use compose repo, disable u-t, etc.
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
# install postgresql
|
# install postgresql
|
||||||
assert_script_run "dnf -y install postgresql", 120;
|
assert_script_run "dnf -y install postgresql", 120;
|
||||||
# wait for the server to be ready
|
# wait for the server to be ready
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
# we are very paranoid with waits and typing speed in this test
|
# we are very paranoid with waits and typing speed in this test
|
||||||
# because the system can be very busy; it's effectively first boot of
|
# because the system can be very busy; it's effectively first boot of
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
use packagetest;
|
use packagetest;
|
||||||
|
|
||||||
# This test sort of covers QA:Testcase_desktop_update_notification
|
# This test sort of covers QA:Testcase_desktop_update_notification
|
||||||
@ -15,10 +15,10 @@ sub run {
|
|||||||
my $desktop = get_var("DESKTOP");
|
my $desktop = get_var("DESKTOP");
|
||||||
# for the live image case, handle bootloader here
|
# for the live image case, handle bootloader here
|
||||||
if (get_var("BOOTFROM")) {
|
if (get_var("BOOTFROM")) {
|
||||||
$self->do_bootloader(postinstall=>1, params=>'3');
|
do_bootloader(postinstall=>1, params=>'3');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$self->do_bootloader(postinstall=>0, params=>'3');
|
do_bootloader(postinstall=>0, params=>'3');
|
||||||
}
|
}
|
||||||
boot_to_login_screen;
|
boot_to_login_screen;
|
||||||
$self->root_console(tty=>3);
|
$self->root_console(tty=>3);
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
assert_screen 'graphical_desktop_clean';
|
assert_screen 'graphical_desktop_clean';
|
||||||
$self->menu_launch_type('terminal');
|
menu_launch_type('terminal');
|
||||||
wait_still_screen 5;
|
wait_still_screen 5;
|
||||||
# need to be root
|
# need to be root
|
||||||
my $rootpass = get_var("ROOT_PASSWORD", "weakpassword");
|
my $rootpass = get_var("ROOT_PASSWORD", "weakpassword");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
use packagetest;
|
use packagetest;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
@ -22,7 +22,7 @@ sub run {
|
|||||||
else {
|
else {
|
||||||
# this launches GNOME Software on GNOME, dunno for any other
|
# this launches GNOME Software on GNOME, dunno for any other
|
||||||
# desktop yet
|
# desktop yet
|
||||||
$self->menu_launch_type('update');
|
menu_launch_type('update');
|
||||||
}
|
}
|
||||||
# GNOME Software has a welcome screen, get rid of it if it shows
|
# GNOME Software has a welcome screen, get rid of it if it shows
|
||||||
# up (but don't fail if it doesn't, we're not testing that)
|
# up (but don't fail if it doesn't, we're not testing that)
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed. Select BTRFS
|
# Manual partitioning spoke should be displayed. Select BTRFS
|
||||||
# partitioning scheme
|
# partitioning scheme
|
||||||
$self->custom_scheme_select("btrfs");
|
custom_scheme_select("btrfs");
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
assert_and_click "anaconda_part_accept_changes";
|
assert_and_click "anaconda_part_accept_changes";
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed. Select Standard
|
# Manual partitioning spoke should be displayed. Select Standard
|
||||||
# Partition scheme
|
# Partition scheme
|
||||||
$self->custom_scheme_select("standard");
|
custom_scheme_select("standard");
|
||||||
# Do 'automatic' partition creation
|
# Do 'automatic' partition creation
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
# Change root partition to ext3
|
# Change root partition to ext3
|
||||||
$self->custom_change_fs("ext3");
|
custom_change_fs("ext3");
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
assert_and_click "anaconda_part_accept_changes";
|
assert_and_click "anaconda_part_accept_changes";
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -10,15 +11,15 @@ sub run {
|
|||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one regular disk
|
# Go to INSTALLATION DESTINATION and ensure one regular disk
|
||||||
# and the iscsi target are selected.
|
# and the iscsi target are selected.
|
||||||
$self->select_disks(iscsi=>\%iscsi);
|
select_disks(iscsi=>\%iscsi);
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
# now we're at custom part. let's use standard partitioning for
|
# now we're at custom part. let's use standard partitioning for
|
||||||
# simplicity
|
# simplicity
|
||||||
$self->custom_scheme_select("standard");
|
custom_scheme_select("standard");
|
||||||
# Do 'automatic' partition creation
|
# Do 'automatic' partition creation
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
# Make sure / is on the iSCSI target (which appears as sda)
|
# Make sure / is on the iSCSI target (which appears as sda)
|
||||||
$self->custom_change_device("root", "sda");
|
custom_change_device("root", "sda");
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
assert_and_click "anaconda_part_accept_changes";
|
assert_and_click "anaconda_part_accept_changes";
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed. Select LVM Thin
|
# Manual partitioning spoke should be displayed. Select LVM Thin
|
||||||
# Partitioning scheme
|
# Partitioning scheme
|
||||||
$self->custom_scheme_select("lvmthin");
|
custom_scheme_select("lvmthin");
|
||||||
# Do 'automatic' partition creation
|
# Do 'automatic' partition creation
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed
|
# Manual partitioning spoke should be displayed
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
$self->custom_delete_part('swap');
|
custom_delete_part('swap');
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
# Deleting swap shows a warning and requires a second click to confirm
|
# Deleting swap shows a warning and requires a second click to confirm
|
||||||
# Wait a sec first, otherwise sometimes we click too fast
|
# Wait a sec first, otherwise sometimes we click too fast
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure two disks are selected.
|
# Go to INSTALLATION DESTINATION and ensure two disks are selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks(disks=>2);
|
select_disks(disks=>2);
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed
|
# Manual partitioning spoke should be displayed
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
$self->custom_change_type("raid");
|
custom_change_type("raid");
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
assert_and_click "anaconda_part_accept_changes";
|
assert_and_click "anaconda_part_accept_changes";
|
||||||
|
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure the disk is selected.
|
||||||
# Because PARTITIONING starts with 'custom_', this will select custom.
|
# Because PARTITIONING starts with 'custom_', this will select custom.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Manual partitioning spoke should be displayed. Select Standard
|
# Manual partitioning spoke should be displayed. Select Standard
|
||||||
# Partition scheme
|
# Partition scheme
|
||||||
$self->custom_scheme_select("standard");
|
custom_scheme_select("standard");
|
||||||
# Do 'automatic' partition creation
|
# Do 'automatic' partition creation
|
||||||
assert_and_click "anaconda_part_automatic";
|
assert_and_click "anaconda_part_automatic";
|
||||||
# Change root partition to xfs
|
# Change root partition to xfs
|
||||||
$self->custom_change_fs("xfs");
|
custom_change_fs("xfs");
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
assert_and_click "anaconda_part_accept_changes";
|
assert_and_click "anaconda_part_accept_changes";
|
||||||
|
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# the only provided disk should be automatically selected and full
|
# the only provided disk should be automatically selected and full
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# the only provided disk should be automatically selected and full
|
# the only provided disk should be automatically selected and full
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
|
|
||||||
# updates.img tests work by changing the appearance of the INSTALLATION
|
# updates.img tests work by changing the appearance of the INSTALLATION
|
||||||
# DESTINATION screen, so check that if needed.
|
# DESTINATION screen, so check that if needed.
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
|
|
||||||
# check "encrypt data" checkbox
|
# check "encrypt data" checkbox
|
||||||
assert_and_click "anaconda_install_destination_encrypt_data";
|
assert_and_click "anaconda_install_destination_encrypt_data";
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and select only one disk.
|
# Go to INSTALLATION DESTINATION and select only one disk.
|
||||||
$self->select_disks(disks=>1);
|
select_disks(disks=>1);
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and select two disks.
|
# Go to INSTALLATION DESTINATION and select two disks.
|
||||||
$self->select_disks(disks=>2);
|
select_disks(disks=>2);
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use anaconda;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# Anaconda hub
|
# Anaconda hub
|
||||||
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
# Go to INSTALLATION DESTINATION and ensure one disk is selected.
|
||||||
$self->select_disks();
|
select_disks();
|
||||||
assert_and_click "anaconda_spoke_done";
|
assert_and_click "anaconda_spoke_done";
|
||||||
|
|
||||||
# the only provided disk should be automatically selected and full
|
# the only provided disk should be automatically selected and full
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
use freeipa;
|
use freeipa;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
use freeipa;
|
use freeipa;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
use anaconda;
|
||||||
use Time::HiRes qw( usleep );
|
use Time::HiRes qw( usleep );
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
@ -40,14 +41,14 @@ sub run {
|
|||||||
# if either MIRRORLIST_GRAPHICAL or REPOSITORY_GRAPHICAL is set, type this into
|
# if either MIRRORLIST_GRAPHICAL or REPOSITORY_GRAPHICAL is set, type this into
|
||||||
# the repository url input
|
# the repository url input
|
||||||
if (get_var("MIRRORLIST_GRAPHICAL")) {
|
if (get_var("MIRRORLIST_GRAPHICAL")) {
|
||||||
$repourl = $self->get_mirrorlist_url();
|
$repourl = get_mirrorlist_url();
|
||||||
type_safely $repourl;
|
type_safely $repourl;
|
||||||
|
|
||||||
# select as mirror list
|
# select as mirror list
|
||||||
assert_and_click "anaconda_install_source_repo_select_mirrorlist";
|
assert_and_click "anaconda_install_source_repo_select_mirrorlist";
|
||||||
}
|
}
|
||||||
elsif (get_var("REPOSITORY_GRAPHICAL")) {
|
elsif (get_var("REPOSITORY_GRAPHICAL")) {
|
||||||
$repourl = $self->get_full_repo(get_var("REPOSITORY_GRAPHICAL"));
|
$repourl = get_full_repo(get_var("REPOSITORY_GRAPHICAL"));
|
||||||
# strip the 'nfs:' for typing here
|
# strip the 'nfs:' for typing here
|
||||||
$repourl =~ s/^nfs://;
|
$repourl =~ s/^nfs://;
|
||||||
type_safely $repourl;
|
type_safely $repourl;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "anacondatest";
|
use base "anacondatest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -2,16 +2,17 @@ use base "installedtest";
|
|||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
use tapnet;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# clone host's /etc/hosts (for phx2 internal routing to work)
|
# clone host's /etc/hosts (for phx2 internal routing to work)
|
||||||
# must come *before* setup_tap_static or else it would overwrite
|
# must come *before* setup_tap_static or else it would overwrite
|
||||||
# its changes
|
# its changes
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.102", "client002.domain.local");
|
setup_tap_static("10.0.2.102", "client002.domain.local");
|
||||||
# use FreeIPA server as DNS server
|
# use FreeIPA server as DNS server
|
||||||
assert_script_run "printf 'search domain.local\nnameserver 10.0.2.100' > /etc/resolv.conf";
|
assert_script_run "printf 'search domain.local\nnameserver 10.0.2.100' > /etc/resolv.conf";
|
||||||
# wait for the server to be ready (do it now just to make sure name
|
# wait for the server to be ready (do it now just to make sure name
|
||||||
@ -22,7 +23,7 @@ sub run {
|
|||||||
# note: we can't use wait_screen_change, wait_still_screen or
|
# note: we can't use wait_screen_change, wait_still_screen or
|
||||||
# check_type_string in cockpit because of that fucking constantly
|
# check_type_string in cockpit because of that fucking constantly
|
||||||
# scrolling graph
|
# scrolling graph
|
||||||
$self->start_cockpit(1);
|
start_cockpit(1);
|
||||||
assert_and_click "cockpit_join_domain_button";
|
assert_and_click "cockpit_join_domain_button";
|
||||||
assert_screen "cockpit_join_domain";
|
assert_screen "cockpit_join_domain";
|
||||||
send_key "tab";
|
send_key "tab";
|
||||||
|
@ -2,15 +2,17 @@ use base "installedtest";
|
|||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
|
use tapnet;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
# clone host's /etc/hosts (for phx2 internal routing to work)
|
# clone host's /etc/hosts (for phx2 internal routing to work)
|
||||||
# must come *before* setup_tap_static or else it would overwrite
|
# must come *before* setup_tap_static or else it would overwrite
|
||||||
# its changes
|
# its changes
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.103", "client003.domain.local");
|
setup_tap_static("10.0.2.103", "client003.domain.local");
|
||||||
# use FreeIPA server as DNS server
|
# use FreeIPA server as DNS server
|
||||||
assert_script_run "printf 'search domain.local\nnameserver 10.0.2.100' > /etc/resolv.conf";
|
assert_script_run "printf 'search domain.local\nnameserver 10.0.2.100' > /etc/resolv.conf";
|
||||||
# wait for the server to be ready (do it now just to make sure name
|
# wait for the server to be ready (do it now just to make sure name
|
||||||
@ -18,7 +20,7 @@ sub run {
|
|||||||
mutex_lock "freeipa_ready";
|
mutex_lock "freeipa_ready";
|
||||||
mutex_unlock "freeipa_ready";
|
mutex_unlock "freeipa_ready";
|
||||||
# use compose repo, disable u-t, etc.
|
# use compose repo, disable u-t, etc.
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
# do the enrolment
|
# do the enrolment
|
||||||
assert_script_run "echo 'monkeys123' | realm join --user=admin ipa001.domain.local", 300;
|
assert_script_run "echo 'monkeys123' | realm join --user=admin ipa001.domain.local", 300;
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,18 @@ use strict;
|
|||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
use mmapi;
|
use mmapi;
|
||||||
|
use tapnet;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.104", "db.domain.local");
|
setup_tap_static("10.0.2.104", "db.domain.local");
|
||||||
# clone host's resolv.conf to get name resolution
|
# clone host's resolv.conf to get name resolution
|
||||||
$self->clone_host_file("/etc/resolv.conf");
|
clone_host_file("/etc/resolv.conf");
|
||||||
# use compose repo, disable u-t, etc.
|
# use compose repo, disable u-t, etc.
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
# deploy the database server role
|
# deploy the database server role
|
||||||
assert_script_run 'echo \'{"database":"openqa","owner":"openqa","password":"correcthorse"}\' | rolectl deploy databaseserver --settings-stdin', 300;
|
assert_script_run 'echo \'{"database":"openqa","owner":"openqa","password":"correcthorse"}\' | rolectl deploy databaseserver --settings-stdin', 300;
|
||||||
# check the role status, should be 'running'
|
# check the role status, should be 'running'
|
||||||
|
@ -3,6 +3,8 @@ use strict;
|
|||||||
use testapi;
|
use testapi;
|
||||||
use lockapi;
|
use lockapi;
|
||||||
use mmapi;
|
use mmapi;
|
||||||
|
use tapnet;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -11,20 +13,20 @@ sub run {
|
|||||||
# clone host's /etc/hosts (for phx2 internal routing to work)
|
# clone host's /etc/hosts (for phx2 internal routing to work)
|
||||||
# must come *before* setup_tap_static or else it would overwrite
|
# must come *before* setup_tap_static or else it would overwrite
|
||||||
# its changes
|
# its changes
|
||||||
$self->clone_host_file("/etc/hosts");
|
clone_host_file("/etc/hosts");
|
||||||
# set up networking
|
# set up networking
|
||||||
$self->setup_tap_static("10.0.2.100", "ipa001.domain.local");
|
setup_tap_static("10.0.2.100", "ipa001.domain.local");
|
||||||
# clone host's resolv.conf to get name resolution
|
# clone host's resolv.conf to get name resolution
|
||||||
$self->clone_host_file("/etc/resolv.conf");
|
clone_host_file("/etc/resolv.conf");
|
||||||
# use compose repo, disable u-t, etc.
|
# use compose repo, disable u-t, etc.
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
# we need a lot of entropy for this, and we don't care how good
|
# we need a lot of entropy for this, and we don't care how good
|
||||||
# it is, so let's use haveged
|
# it is, so let's use haveged
|
||||||
assert_script_run 'dnf -y install haveged', 300;
|
assert_script_run 'dnf -y install haveged', 300;
|
||||||
assert_script_run 'systemctl start haveged.service';
|
assert_script_run 'systemctl start haveged.service';
|
||||||
# read DNS server IPs from host's /etc/resolv.conf for passing to
|
# read DNS server IPs from host's /etc/resolv.conf for passing to
|
||||||
# rolectl
|
# rolectl
|
||||||
my @forwards = $self->get_host_dns();
|
my @forwards = get_host_dns();
|
||||||
# we are now gonna work around a stupid bug in rolekit. we want to
|
# we are now gonna work around a stupid bug in rolekit. we want to
|
||||||
# pass it a list of ipv4 DNS forwarders and have no ipv6 DNS
|
# pass it a list of ipv4 DNS forwarders and have no ipv6 DNS
|
||||||
# forwarders. but it won't allow you to have a dns_forwarders array
|
# forwarders. but it won't allow you to have a dns_forwarders array
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self=shift;
|
my $self=shift;
|
||||||
# run firefox and login to cockpit
|
# run firefox and login to cockpit
|
||||||
$self->start_cockpit(1);
|
start_cockpit(1);
|
||||||
# go to the logs screen
|
# go to the logs screen
|
||||||
assert_and_click "cockpit_logs";
|
assert_and_click "cockpit_logs";
|
||||||
# the date dropdown changes and messes with the button locations, so wait
|
# the date dropdown changes and messes with the button locations, so wait
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -9,11 +10,11 @@ sub run {
|
|||||||
assert_script_run 'systemctl is-active cockpit.socket';
|
assert_script_run 'systemctl is-active cockpit.socket';
|
||||||
assert_script_run 'firewall-cmd --query-service cockpit';
|
assert_script_run 'firewall-cmd --query-service cockpit';
|
||||||
# use compose repo, disable u-t, etc.
|
# use compose repo, disable u-t, etc.
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
# install a desktop and firefox so we can actually try it
|
# install a desktop and firefox so we can actually try it
|
||||||
assert_script_run 'dnf -y groupinstall "base-x"', 300;
|
assert_script_run 'dnf -y groupinstall "base-x"', 300;
|
||||||
assert_script_run 'dnf -y install firefox', 120;
|
assert_script_run 'dnf -y install firefox', 120;
|
||||||
$self->start_cockpit(0);
|
start_cockpit(0);
|
||||||
# quit firefox (return to console)
|
# quit firefox (return to console)
|
||||||
send_key "ctrl-q";
|
send_key "ctrl-q";
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# try to login, check whether target release is installed
|
# try to login, check whether target release is installed
|
||||||
$self->root_console(tty=>3);
|
$self->root_console(tty=>3);
|
||||||
$self->check_release(lc(get_var('VERSION')));
|
check_release(lc(get_var('VERSION')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
use main_common;
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use base "installedtest";
|
use base "installedtest";
|
||||||
use strict;
|
use strict;
|
||||||
use testapi;
|
use testapi;
|
||||||
|
use utils;
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -9,7 +10,7 @@ sub run {
|
|||||||
script_run "setterm -blank 0";
|
script_run "setterm -blank 0";
|
||||||
|
|
||||||
# use compose repo
|
# use compose repo
|
||||||
$self->repo_setup();
|
repo_setup();
|
||||||
my $params = "-y --releasever=${release}";
|
my $params = "-y --releasever=${release}";
|
||||||
if ($release eq "rawhide") {
|
if ($release eq "rawhide") {
|
||||||
$params .= " --nogpgcheck";
|
$params .= " --nogpgcheck";
|
||||||
|
Loading…
Reference in New Issue
Block a user