Add the graphical upgrade tests.
This PR builds on some elements of the current upgrade process, such as upgrade_boot, upgrade_preinstall, upgrade_postinstall, but replaces the upgrade_run with graphical_upgrade_run to use graphical methods to upgrade the system. This would not be possible without necessary settings, that are performed by graphical_upgrade_prerequisites. Works for both Gnome and KDE.
@ -1355,6 +1355,7 @@ sub menu_launch_type {
|
||||
# Wait for KDE to place focus correctly.
|
||||
sleep 2;
|
||||
send_key 'ret';
|
||||
wait_still_screen(3);
|
||||
}
|
||||
|
||||
sub tell_source {
|
||||
|
9
main.pm
@ -122,7 +122,16 @@ sub load_upgrade_tests() {
|
||||
autotest::loadtest "tests/${pu}.pm";
|
||||
}
|
||||
}
|
||||
# If we want the upgrade run with GUI tools, we need
|
||||
# to load a GUI set of tests
|
||||
if (get_var("GUI_UPGRADE")) {
|
||||
autotest::loadtest("tests/graphical_upgrade_prerequisites.pm");
|
||||
autotest::loadtest("tests/graphical_upgrade_run.pm");
|
||||
}
|
||||
# otherwise go with the CLI variant
|
||||
else {
|
||||
autotest::loadtest "tests/upgrade_run.pm";
|
||||
}
|
||||
# handle additional postinstall tests
|
||||
if (get_var("POSTINSTALL")) {
|
||||
set_var('POSTINSTALL', "upgrade_postinstall " . get_var("POSTINSTALL"));
|
||||
|
15
needles/gnome/desktop_package_tool_restart_upgrade.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 438,
|
||||
"ypos": 277,
|
||||
"width": 143,
|
||||
"height": 20,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_restart_upgrade"
|
||||
]
|
||||
}
|
BIN
needles/gnome/desktop_package_tool_restart_upgrade.png
Normal file
After Width: | Height: | Size: 53 KiB |
22
needles/gnome/desktop_package_tool_updates_available.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_updates_available"
|
||||
],
|
||||
"area": [
|
||||
{
|
||||
"xpos": 331,
|
||||
"ypos": 163,
|
||||
"width": 184,
|
||||
"height": 32,
|
||||
"type": "match"
|
||||
},
|
||||
{
|
||||
"xpos": 561,
|
||||
"ypos": 162,
|
||||
"width": 136,
|
||||
"height": 33,
|
||||
"type": "match"
|
||||
}
|
||||
]
|
||||
}
|
BIN
needles/gnome/desktop_package_tool_updates_available.png
Normal file
After Width: | Height: | Size: 48 KiB |
16
needles/kde/apps/auth_required-20240214.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 334,
|
||||
"ypos": 271,
|
||||
"width": 212,
|
||||
"height": 20,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"auth_required",
|
||||
"auth_required_password"
|
||||
]
|
||||
}
|
BIN
needles/kde/apps/auth_required-20240214.png
Normal file
After Width: | Height: | Size: 277 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 325,
|
||||
"ypos": 690,
|
||||
"width": 133,
|
||||
"height": 22,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_restart_automatically"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 126 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 322,
|
||||
"ypos": 684,
|
||||
"width": 136,
|
||||
"height": 25,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_restart_automatically"
|
||||
]
|
||||
}
|
BIN
needles/kde/desktop_package_tool_restart_automatically-kde.png
Normal file
After Width: | Height: | Size: 198 KiB |
15
needles/kde/desktop_package_tool_update_all-kde.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 878,
|
||||
"ypos": 43,
|
||||
"width": 89,
|
||||
"height": 22,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_update_all"
|
||||
]
|
||||
}
|
BIN
needles/kde/desktop_package_tool_update_all-kde.png
Normal file
After Width: | Height: | Size: 123 KiB |
15
needles/kde/desktop_package_tool_updates_available-kde.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 305,
|
||||
"ypos": 86,
|
||||
"width": 268,
|
||||
"height": 25,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_updates_available"
|
||||
]
|
||||
}
|
BIN
needles/kde/desktop_package_tool_updates_available-kde.png
Normal file
After Width: | Height: | Size: 188 KiB |
15
needles/kde/desktop_package_tool_upgrade_system-kde.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 785,
|
||||
"ypos": 90,
|
||||
"width": 157,
|
||||
"height": 20,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"desktop_package_tool_upgrade_system"
|
||||
]
|
||||
}
|
BIN
needles/kde/desktop_package_tool_upgrade_system-kde.png
Normal file
After Width: | Height: | Size: 188 KiB |
@ -3030,7 +3030,6 @@
|
||||
"ROOT_PASSWORD": "weakpassword",
|
||||
"TEST_TARGET": "COMPOSE",
|
||||
"UPGRADE": "1",
|
||||
"GUI_UPGRADE": "1",
|
||||
"USER_LOGIN": "test",
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
@ -3052,6 +3051,40 @@
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
},
|
||||
"upgrade_desktop_graphical_64bit": {
|
||||
"profiles": {
|
||||
"fedora-universal-x86_64-*-64bit": 30,
|
||||
"fedora-universal-aarch64-*-aarch64": 40
|
||||
},
|
||||
"settings": {
|
||||
"BOOTFROM": "c",
|
||||
"DESKTOP": "gnome",
|
||||
"HDD_1": "disk_f%UP1REL%_desktop_4_%ARCH%.qcow2",
|
||||
"ROOT_PASSWORD": "weakpassword",
|
||||
"TEST_TARGET": "COMPOSE",
|
||||
"UPGRADE": "1",
|
||||
"GUI_UPGRADE": "1",
|
||||
"USER_LOGIN": "test",
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
},
|
||||
"upgrade_2_desktop_graphical_64bit": {
|
||||
"profiles": {
|
||||
"fedora-universal-x86_64-*-64bit": 30,
|
||||
"fedora-universal-aarch64-*-aarch64": 40
|
||||
},
|
||||
"settings": {
|
||||
"BOOTFROM": "c",
|
||||
"DESKTOP": "gnome",
|
||||
"HDD_1": "disk_f%UP2REL%_desktop_4_%ARCH%.qcow2",
|
||||
"ROOT_PASSWORD": "weakpassword",
|
||||
"TEST_TARGET": "COMPOSE",
|
||||
"UPGRADE": "1",
|
||||
"GUI_UPGRADE": "1",
|
||||
"USER_LOGIN": "test",
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
},
|
||||
"upgrade_kde_64bit": {
|
||||
"profiles": {
|
||||
"fedora-universal-x86_64-*-64bit": 30
|
||||
@ -3067,6 +3100,22 @@
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
},
|
||||
"upgrade_kde_graphical_64bit": {
|
||||
"profiles": {
|
||||
"fedora-universal-x86_64-*-64bit": 30
|
||||
},
|
||||
"settings": {
|
||||
"+HDD_1": "disk_f%UP1REL%_kde_4_x86_64.qcow2",
|
||||
"BOOTFROM": "c",
|
||||
"DESKTOP": "kde",
|
||||
"ROOT_PASSWORD": "weakpassword",
|
||||
"TEST_TARGET": "COMPOSE",
|
||||
"UPGRADE": "1",
|
||||
"GUI_UPGRADE": "1",
|
||||
"USER_LOGIN": "test",
|
||||
"USER_PASSWORD": "weakpassword"
|
||||
}
|
||||
},
|
||||
"upgrade_minimal_64bit": {
|
||||
"profiles": {
|
||||
"fedora-universal-aarch64-*-aarch64": 30,
|
||||
|
110
tests/graphical_upgrade_prerequisites.pm
Normal file
@ -0,0 +1,110 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
my $version = get_var("VERSION");
|
||||
my $rawrel = get_var("RAWREL");
|
||||
my $desktop = get_var("DESKTOP");
|
||||
my $user = get_var("USER_LOGIN", "test");
|
||||
my $pword = get_var("USER_PASSWORD", "weakpassword");
|
||||
|
||||
# As this is designed, the 'upgrade_preinstall' test script
|
||||
# runs before this one and ends on the root console. Therefore,
|
||||
# we can assume that we are still on that root console, so
|
||||
# we can safely use script assertions.
|
||||
|
||||
# Make serial console writable for everyone, so that we
|
||||
# can use script assertions for further commands as well.
|
||||
assert_script_run("chmod 666 /dev/${serialdev}");
|
||||
|
||||
if ($desktop eq "gnome") {
|
||||
# Install Gnome specific packages
|
||||
assert_script_run("dnf install -y jq dbus-x11");
|
||||
# Leave the CLI and come back to the login screen.
|
||||
desktop_vt();
|
||||
# Log onto the graphical session
|
||||
send_key("ret");
|
||||
wait_still_screen(1);
|
||||
type_very_safely("$pword\n");
|
||||
handle_welcome_screen();
|
||||
check_desktop();
|
||||
# After the login, let us wait that everything settles
|
||||
# and that we are not too quick on the system.
|
||||
wait_still_screen(5);
|
||||
# According to the ticket, the 'fedora.json' file
|
||||
# which lists the available versions will be created
|
||||
# after the Software starts. Let's start it then on Gnome.
|
||||
menu_launch_type("software");
|
||||
# When Software is started for the first time, it asks whether
|
||||
# a user wants to use Third Party software. We want to Ignore
|
||||
# this and proceed, so if we see that we click on Ignore.
|
||||
if (check_screen("gnome_software_ignore", timeout => 60)) {
|
||||
click_lastmatch();
|
||||
}
|
||||
# Wait a couple of second, just in case the file needs a little
|
||||
# longer to be created.
|
||||
sleep(10);
|
||||
# Close Software
|
||||
send_key("alt-f4");
|
||||
}
|
||||
|
||||
# Switch back to the CLI for further settings.
|
||||
$self->root_console(tty => 3);
|
||||
|
||||
# For Gnome desktop only.
|
||||
if ($desktop eq "gnome") {
|
||||
# Switch to a user account
|
||||
enter_cmd("su -l $user");
|
||||
# Navigate to the version file directory
|
||||
assert_script_run("cd ~/.cache/gnome-software/fedora-pkgdb-collections");
|
||||
|
||||
# Modify the content of the version file if we are on Rawhide and we need
|
||||
# to update the previous release to it:
|
||||
if ($version eq "Rawhide") {
|
||||
# Replace the word 'devel' with the upcoming version number.
|
||||
assert_script_run("jq '(.collections |= map(if .version == \"devel\" then .koji_name = \"f$rawrel\" | .status = \"Active\" | .version = \"$rawrel\" else . end))' fedora.json > fedora-updated.json");
|
||||
# Replace the version file
|
||||
assert_script_run("mv fedora-updated.json fedora.json");
|
||||
}
|
||||
|
||||
# Allow Software to also show pre-release upgrades.
|
||||
assert_script_run("dbus-launch --exit-with-session gsettings set org.gnome.software show-upgrade-prerelease true");
|
||||
|
||||
# Disable blanking the screen on inactivity, because if the screen gets switched off
|
||||
# we will have no way to make it active again.
|
||||
assert_script_run("dbus-launch --exit-with-session gsettings set org.gnome.desktop.screensaver idle-activation-enabled false");
|
||||
assert_script_run("dbus-launch --exit-with-session gsettings set org.gnome.desktop.screensaver lock-enabled false");
|
||||
assert_script_run("dbus-launch --exit-with-session gsettings set org.gnome.desktop.lockdown disable-lock-screen true");
|
||||
# Logout the regular user
|
||||
enter_cmd("exit");
|
||||
}
|
||||
# For KDE desktop only.
|
||||
elsif ($desktop eq "kde") {
|
||||
# Modify the content of the version file if we are on Rawhide and we need
|
||||
# to update the previous release to it.
|
||||
assert_script_run("sed -i '/<release / s/version=\"rawhide\" type=\"development\"/version=\"$rawrel\" type=\"stable\"/' /usr/share/metainfo/org.fedoraproject.fedora.metainfo.xml");
|
||||
# Switch to the regular user.
|
||||
enter_cmd("su -l $user");
|
||||
# Make KDE related settings to allow for Prerelease upgrade
|
||||
assert_script_run("kwriteconfig5 --file discoverrc --group DistroUpdate --key AllowPreRelease true");
|
||||
assert_script_run("kwriteconfig5 --file PlasmaDiscoverUpdates --group Global --key LastNotificationTime --delete");
|
||||
# Disable the screen locker.
|
||||
assert_script_run("kwriteconfig5 --file kscreenlockerrc --group Daemon --key Autolock false qdbus org.freedesktop.ScreenSaver /ScreenSaver configure");
|
||||
# Exit regular user
|
||||
enter_cmd("exit");
|
||||
}
|
||||
|
||||
# Reboot system to load changes
|
||||
enter_cmd("reboot");
|
||||
}
|
||||
|
||||
sub test_flags {
|
||||
return {fatal => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|
103
tests/graphical_upgrade_run.pm
Normal file
@ -0,0 +1,103 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
# This method does the basic login to a DE,
|
||||
# it can distinguish between Gnome and KDE.
|
||||
# We are using it to make the code a little
|
||||
# lighter.
|
||||
sub session_login {
|
||||
my $desktop = shift;
|
||||
my $pword = get_var("USER_PASSWORD") // "weakpassword";
|
||||
if ($desktop eq "gnome") {
|
||||
# For Gnome, we need to press Enter first
|
||||
# to show the password field, then we type
|
||||
# in the password.
|
||||
send_key("ret");
|
||||
wait_still_screen(1);
|
||||
}
|
||||
# For both DEs
|
||||
type_very_safely("$pword\n");
|
||||
}
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
my $rawrel = get_var("RAWREL");
|
||||
my $user = get_var("USER_LOGIN") // "test";
|
||||
my $pword = get_var("USER_PASSWORD") // "weakpassword";
|
||||
my $desktop = get_var("DESKTOP");
|
||||
|
||||
# The previous test, 'graphical_upgrade_prerequsites' reset
|
||||
# the machine, so we will deal with booting it and
|
||||
# login to the $desktop.
|
||||
boot_to_login_screen();
|
||||
session_login($desktop);
|
||||
# If we are on Gnome, we have seen the welcome screen already
|
||||
# in the previous step, so we do not want to repeat this.
|
||||
# However, for KDE we will deal with it.
|
||||
if ($desktop eq "kde") {
|
||||
handle_welcome_screen();
|
||||
}
|
||||
# Let's check, that the desktop is shown.
|
||||
check_desktop();
|
||||
|
||||
# Start the package manager application depending
|
||||
# on which DE we are on.
|
||||
my $pkgmgr = "software";
|
||||
$pkgmgr = "discover" if ($desktop eq "kde");
|
||||
menu_launch_type($pkgmgr);
|
||||
|
||||
# On Gnome, the upgrade is safely visible when
|
||||
# we visit the Update page by clicking on the
|
||||
# Update icon. Let's click on that icon on
|
||||
# both DEs, just to make sure.
|
||||
assert_and_click("desktop_package_tool_update");
|
||||
|
||||
# Check that the new upgrade version is available.
|
||||
assert_screen("desktop_package_tool_updates_available", timeout => 180);
|
||||
|
||||
if ($desktop eq "gnome") {
|
||||
# When a new release is available, there will be a download button,
|
||||
# click on that button to download the upgrade packages.
|
||||
assert_and_click("desktop_package_tool_update_download");
|
||||
|
||||
# Restart the computer to apply upgrades, when the download is complete.
|
||||
# Downloading the upgrade packages may take a long time
|
||||
# so let's check until we find it.
|
||||
assert_and_click("desktop_package_tool_restart_upgrade", timeout => 1200);
|
||||
|
||||
# Type the password to confirm.
|
||||
type_very_safely("$pword\n");
|
||||
|
||||
# Click on the 'restart and install' button
|
||||
# to restart into the upgrade session.
|
||||
assert_and_click("gnome_reboot_confirm");
|
||||
}
|
||||
elsif ($desktop eq "kde") {
|
||||
# There is a button to upgrade to a new major version,
|
||||
# click it.
|
||||
assert_and_click("desktop_package_tool_upgrade_system");
|
||||
# Click on Update all
|
||||
assert_and_click("desktop_package_tool_update_all", timeout => 1200);
|
||||
# Once we click that button, we can check the checkbutton
|
||||
# for restarting the computer automatically.
|
||||
assert_and_click("desktop_package_tool_restart_automatically");
|
||||
# When we still see the 'restart_automatically' tag, we
|
||||
# are still downloading. When it disappears, it means that
|
||||
# the machine gets restarted and we can stop this module.
|
||||
while (!check_screen("auth_required")) {
|
||||
sleep 15;
|
||||
}
|
||||
type_very_safely("$pword\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub test_flags {
|
||||
return {fatal => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|