diff --git a/lib/anaconda.pm b/lib/anaconda.pm index 8840a136..63441c6a 100644 --- a/lib/anaconda.pm +++ b/lib/anaconda.pm @@ -9,7 +9,7 @@ use testapi; use utils; use bugzilla; -our @EXPORT = qw/select_disks custom_scheme_select custom_blivet_add_partition custom_blivet_format_partition custom_blivet_resize_partition custom_change_type custom_change_fs custom_change_device custom_delete_part get_full_repo check_help_on_pane get_mirrorlist_url crash_anaconda_text report_bug_text/; +our @EXPORT = qw/select_disks custom_scheme_select custom_add_partition custom_blivet_add_partition custom_blivet_format_partition custom_blivet_resize_partition custom_change_type custom_change_fs custom_change_device custom_delete_part get_full_repo check_help_on_pane get_mirrorlist_url crash_anaconda_text report_bug_text/; sub select_disks { # Handles disk selection. Has one optional argument - number of @@ -175,8 +175,67 @@ sub custom_blivet_add_partition { } } +sub custom_add_partition { + # Used to add partition on Rocky custom-gui partitioning screen + # in Anaconda. Should be called when custom-gui is displayed and free space is selected. + # You can pass device type for partition (needle tagged anaconda_custom_devicetype_$devicetype should exist), size of that partition in MiBs, desired filesystem of that partition + # (anaconda_custom_part_fs_$filesystem should exist) and mountpoint of that partition (e. g. string "/boot"). + my %args = ( + devicetype => "", + raid1 => 0, + size => 0, + filesystem => "", + mountpoint => "", + @_ + ); + $args{devicetype} = "raid" if $args{raid1}; + + assert_and_click "anaconda_custom_part_add"; + + if ($args{mountpoint}) { + assert_and_click "anaconda_custom_mountpoint"; + type_safely $args{mountpoint}; + # esc to dismiss the dropdown that appears when we add a mountpoint + send_key "esc"; + } + if ($args{size}) { + assert_and_click "anaconda_custom_size"; + # size input can contain whole set of different values, so we can't match it with needle + type_safely $args{size}; + } + assert_and_click "anaconda_custom_btn_add_mountpoint"; + +# if ($args{raid1}) { +# # for RAID1, two disks should be selected +# send_key "tab"; +# send_key "down"; +# send_key "spc"; +# assert_screen "anaconda_custom_vdb_selected"; +# +# assert_and_click "anaconda_custom_raidlevel_select"; +# mouse_set(10, 10); +# assert_and_click "anaconda_custom_raidlevel_raid1"; +# } + + # if no devicetype was specified or devicetype is already selected, do nothing + if ($args{devicetype}) && !check_screen("anaconda_custom_part_fs_$args{devicetype}_selected", 5)) { + assert_and_click "anaconda_custom_part_devicetype"; + mouse_set(10, 10); + assert_and_click "anaconda_custom_part_devicetype_$args{devicetype}"; + } + # if no filesystem was specified or filesystem is already selected, do nothing + if ($args{filesystem} && !check_screen("anaconda_custom_part_fs_$args{filesystem}_selected", 5)) { + assert_and_click "anaconda_custom_part_fs"; + assert_and_click "anaconda_custom_part_fs_$args{filesystem}"; + } + # select "free space" in custom-gui if it exists, so we could run this function again to add another partition + if (check_screen("anaconda_custom_free_space", 15)) { + assert_and_click "anaconda_custom_free_space"; + } +} + sub custom_blivet_format_partition { - # This subroutine formats a selected partition. To use it, you must select the + # This subroutine formats a selected partition. To use it, you must select the # partition by other means before you format it using this routine. # You have to create a needle for any non-existing filesystem that is # passed via the $type, such as anaconda_blivet_part_fs_ext4. @@ -202,14 +261,14 @@ sub custom_blivet_format_partition { sub custom_blivet_resize_partition { # This subroutine resizes the selected (active) partition to a given value. Note, that # if the selected value is bigger than the available space, it will only be - # resized to fill up the available space no matter the number. + # resized to fill up the available space no matter the number. # This routine cannot will not be able to select a particular partition!!! my %args = @_; # Start editing the partition and select the Resize option assert_and_click "anaconda_blivet_part_edit"; assert_and_click "anaconda_blivet_part_resize"; # Select the appropriate units. Note, that there must a be needle existing - # for each possible unit that you might want to use, such as + # for each possible unit that you might want to use, such as # "anaconda_blivet_size_unit_gib". assert_and_click "anaconda_blivet_part_drop_select"; assert_and_click "anaconda_blivet_size_unit_$args{units}"; @@ -365,7 +424,7 @@ sub crash_anaconda_text { # This routine uses the Anaconda crash trigger to break the ongoing Anaconda installation to simulate # an Anaconda crash and runs a series of steps that results in creating a bug in Bugzilla. # It is used in the `install_text.pm` test and can be switched on by using the CRASH_REPORT - # variable set to 1. + # variable set to 1. # # First let us navigate to reach the shell window in Anaconda using the alt-f3 combo, # this should take us to another terminal, where we can simulate the crash. @@ -395,7 +454,7 @@ sub report_bug_text { # a textual console. # We will not create a needle for every menu item, and we will fail, # if there will be no positive Bugzilla confirmation shown at the end - # of the process and then we will fail. + # of the process and then we will fail. # # Let us record the time of this test run. Later, we will use it to # limit the Bugzilla search. @@ -419,12 +478,12 @@ sub report_bug_text { type_password $password; type_string "\n"; sleep 10; - # Save the report without changing it. + # Save the report without changing it. # It would need some more tweaking to actually type into the report, but since # it is reported even if unchanged, we leave it as such. type_string ":wq\n"; # Wait until the Crash menu appears again. - # The same screen shows the result of the Bugzilla operation, + # The same screen shows the result of the Bugzilla operation, # so if the needle matches, the bug has been created in Bugzilla. # Bugzilla connection is slow so we need to wait out some time, # therefore let's use a cycle that will check each 10 seconds and @@ -435,7 +494,7 @@ sub report_bug_text { ++$counter; } # Sometimes, Bugzilla throws out a communication error although the bug has been - # created successfully. If this happens, we will softfail and leave the creation + # created successfully. If this happens, we will softfail and leave the creation # check to a later step. if ($counter > 12) { record_soft_failure "Warning: Bugzilla has reported an error which could mean that the bug has not been created correctly, but it probably is not a real problem, if the test has not failed completely. "; @@ -443,7 +502,7 @@ sub report_bug_text { # Now, let us check with Bugzilla directly, if the bug has been created. # First, we shall get a Bugzilla format timestamp to use it in the query. - # The timestamp will limit the list of bugs to those that have been created since + # The timestamp will limit the list of bugs to those that have been created since # the then -> resulting with high probability in the one that this test run # has just created. $timestamp = convert_to_bz_timestamp($timestamp); @@ -455,7 +514,7 @@ sub report_bug_text { else { print("BUGZILLA: The last bug was found: $lastbug\n"); } - # We have found that the bug indeed is in the bugzilla (otherwise + # We have found that the bug indeed is in the bugzilla (otherwise # we would have died already) so now we close it to clean up after this test run. my $result = close_notabug($lastbug, $apikey); unless ($result) { @@ -467,5 +526,5 @@ sub report_bug_text { # Quit anaconda type_string "4\n"; - + } diff --git a/templates.fif.json b/templates.fif.json index 8a245247..3e06dbe7 100644 --- a/templates.fif.json +++ b/templates.fif.json @@ -376,14 +376,14 @@ "USER_LOGIN": "qwerty" } }, - "install_blivet_lvm_ext4": { + "install_custom_gui_lvm_ext4": { "profiles": { "rocky-dvd-iso-aarch64-*-aarch64": 40, "rocky-dvd-iso-x86_64-*-64bit": 40, "rocky-dvd-iso-x86_64-*-uefi": 41 }, "settings": { - "PARTITIONING": "custom_blivet_lvm_ext4", + "PARTITIONING": "custom_gui_lvm_ext4", "POSTINSTALL": "disk_custom_lvm_ext4_postinstall", "ROOT_PASSWORD": "weakpassword" } diff --git a/tests/disk_custom_gui_lvm_ext4.pm b/tests/disk_custom_gui_lvm_ext4.pm new file mode 100644 index 00000000..5c2cf73f --- /dev/null +++ b/tests/disk_custom_gui_lvm_ext4.pm @@ -0,0 +1,43 @@ +use base "anacondatest"; +use strict; +use testapi; +use anaconda; + +sub run { + my $self = shift; + # Go to INSTALLATION DESTINATION and ensure the disk is selected. + # Because PARTITIONING starts with 'custom_', this will select custom. + select_disks(); + assert_and_click "anaconda_spoke_done"; + + if (get_var("UEFI")) { + # if we're running on UEFI, we need esp + custom_add_partition(size => 512, mountpoint => '/boot/efi', filesystem => 'efi_filesystem'); + } + if (get_var("OFW")) { + custom_add_partition(size => 4, filesystem => 'ppc_prep_boot'); + } + + custom_add_partition(size => 512, mountpoint => '/boot', filesystem => 'ext4'); + custom_add_partition(size => 512, mountpoint => 'swap', filesystem => 'swap'); + + # LVM vg already exists, so just add a volume + # add lvm LV with ext4 and mount it as / + custom_add_partition(devicetype => 'lvmlv', filesystem => 'ext4', mountpoint => '/'); + + # Confirm changes + assert_and_click "anaconda_spoke_done"; + assert_and_click "anaconda_part_accept_changes"; + + # Anaconda hub + assert_screen "anaconda_main_hub", 300; # + +} + +sub test_flags { + return { fatal => 1 }; +} + +1; + +# vim: set sw=4 et: