abstract desktop terminal launch, refactor user switch, enable for KDE
This started out as just factoring out the repeated pattern for launching a terminal on the desktop that came in with the i3 tests. But as I worked on desktop_login, which is a major user of it, I noticed some potential cleanups and improvements in the user switching stuff, and also realized we can turn that test back on for KDE now - user switching was re-enabled in KDE a year ago and is advertised to be reliable. I don't think the "switch user from a lock screen" test fully worked before, as we did not verify that we'd really switched back to an existing session rather than starting a new one. Now we do. Using the terminal to verify the logged-in user on all desktops just keeps things simpler than using the kicker menu on KDE (though if typing proves unreliable on KDE I may switch this back). Signed-off-by: Adam Williamson <awilliam@redhat.com>
18
lib/utils.pm
@ -6,7 +6,7 @@ use base 'Exporter';
|
||||
use Exporter;
|
||||
use lockapi;
|
||||
use testapi qw(is_serial_terminal :DEFAULT);
|
||||
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 boot_decrypt check_release menu_launch_type setup_repos repo_setup get_workarounds disable_updates_repos cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop quit_firefox advisory_get_installed_packages acnp_handle_output advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable set_update_notification_timestamp kde_doublek_workaround dm_perform_login/;
|
||||
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 boot_decrypt check_release menu_launch_type setup_repos repo_setup get_workarounds disable_updates_repos cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop quit_firefox advisory_get_installed_packages acnp_handle_output advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable set_update_notification_timestamp kde_doublek_workaround dm_perform_login desktop_launch_terminal/;
|
||||
|
||||
|
||||
# We introduce this global variable to hold the list of applications that have
|
||||
@ -1822,4 +1822,20 @@ sub dm_perform_login {
|
||||
send_key "ret";
|
||||
}
|
||||
|
||||
# launch a terminal from a desktop, using the most efficient/reliable
|
||||
# approach (not appropriate if we really need to test launching it a
|
||||
# specific way)
|
||||
sub desktop_launch_terminal {
|
||||
my $desktop = get_var("DESKTOP");
|
||||
if ($desktop eq "i3") {
|
||||
send_key "alt-ret";
|
||||
}
|
||||
elsif ($desktop eq "kde") {
|
||||
send_key "ctrl-alt-t";
|
||||
}
|
||||
else {
|
||||
menu_launch_type "terminal";
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 41,
|
||||
"type": "match",
|
||||
"ypos": 173,
|
||||
"xpos": 191,
|
||||
"height": 21
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jack"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 18 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 21,
|
||||
"width": 39,
|
||||
"ypos": 165,
|
||||
"type": "match",
|
||||
"xpos": 185
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jack"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 25 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 39,
|
||||
"height": 21,
|
||||
"type": "match",
|
||||
"xpos": 185,
|
||||
"ypos": 165
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jack"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 38 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 15,
|
||||
"type": "match",
|
||||
"ypos": 176,
|
||||
"xpos": 193,
|
||||
"width": 31
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jim"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 17 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 15,
|
||||
"width": 31,
|
||||
"ypos": 168,
|
||||
"xpos": 185,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jim"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 25 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 15,
|
||||
"width": 31,
|
||||
"xpos": 185,
|
||||
"ypos": 168,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jim"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 38 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 15,
|
||||
"xpos": 40,
|
||||
"ypos": 217,
|
||||
"type": "match",
|
||||
"width": 31
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jack"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 59 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"height": 16,
|
||||
"type": "match",
|
||||
"ypos": 200,
|
||||
"width": 31,
|
||||
"xpos": 44
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jack"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 102 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"ypos": 215,
|
||||
"type": "match",
|
||||
"width": 26,
|
||||
"xpos": 39,
|
||||
"height": 17
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jim"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 58 KiB |
@ -1,15 +0,0 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 26,
|
||||
"xpos": 43,
|
||||
"ypos": 199,
|
||||
"type": "match",
|
||||
"height": 17
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"user_confirm_jim"
|
||||
]
|
||||
}
|
Before Width: | Height: | Size: 101 KiB |
@ -115,32 +115,21 @@ sub login_user {
|
||||
|
||||
sub check_user_logged_in {
|
||||
# Performs a check that a correct user has been locked in.
|
||||
my $user = shift;
|
||||
my $exitkey;
|
||||
# In Gnome, the name of the user was accessible through menu
|
||||
# in the upper right corner, but apparently it has been removed.
|
||||
# Reading the login name from the terminal prompt seems to be
|
||||
# the most reliable thing to do.
|
||||
if ($desktop eq "gnome") {
|
||||
menu_launch_type("terminal");
|
||||
wait_still_screen 2;
|
||||
$exitkey = "alt-f4";
|
||||
}
|
||||
elsif ($desktop eq "i3") {
|
||||
send_key("alt-ret");
|
||||
assert_screen("apps_run_terminal");
|
||||
assert_script_run('[ $(whoami) = "' . "$user\" ]");
|
||||
wait_screen_change { send_key("alt-shift-q"); };
|
||||
return;
|
||||
}
|
||||
# With KDE, the user is shown in the main menu, so let us just
|
||||
# open this and see.
|
||||
else {
|
||||
assert_and_click "system_menu_button";
|
||||
$exitkey = "esc";
|
||||
}
|
||||
assert_screen "user_confirm_$user";
|
||||
send_key $exitkey;
|
||||
my %args = @_;
|
||||
$args{termopen} //= 0;
|
||||
$args{keepterm} //= 0;
|
||||
my $user = $args{user};
|
||||
# In Gnome and i3, the current user's name is not easily visible,
|
||||
# so reading the login name from the terminal prompt seems to be
|
||||
# the most reliable thing to do. In KDE we could see it on the
|
||||
# launcher menu, but it keeps things clean if we use the same
|
||||
# approach for all desktops.
|
||||
my $exitkey = "alt-f4";
|
||||
$exitkey = "shift-ctrl-q" if ($desktop eq "i3");
|
||||
desktop_launch_terminal unless ($args{termopen});
|
||||
assert_screen("apps_run_terminal");
|
||||
assert_script_run('[ $(whoami) = "' . "$user\" ]");
|
||||
send_key $exitkey unless ($args{keepterm});
|
||||
wait_still_screen 5;
|
||||
}
|
||||
|
||||
@ -163,7 +152,6 @@ sub logout_user {
|
||||
sub switch_user {
|
||||
# Switch the user, i.e. leave the current user logged in and
|
||||
# log in another user simultaneously.
|
||||
send_key "ret";
|
||||
if (check_screen "locked_screen_switch_user", 5) {
|
||||
assert_and_click "locked_screen_switch_user";
|
||||
}
|
||||
@ -276,7 +264,7 @@ sub run {
|
||||
|
||||
# Log in with the first user account.
|
||||
login_user(user => "jack", password => $jackpass);
|
||||
check_user_logged_in("jack");
|
||||
check_user_logged_in(user => "jack");
|
||||
# Log out the user.
|
||||
logout_user();
|
||||
|
||||
@ -289,7 +277,7 @@ sub run {
|
||||
# If not, we are in KDE and we will log in normally.
|
||||
login_user(user => "jim", password => $jimpass);
|
||||
}
|
||||
check_user_logged_in("jim");
|
||||
check_user_logged_in(user => "jim");
|
||||
# And this time reboot the system using the menu.
|
||||
reboot_system();
|
||||
|
||||
@ -307,7 +295,7 @@ sub run {
|
||||
# only work if we were correctly denied login with the wrong password,
|
||||
# if we were let in with the wrong password it'll fail
|
||||
login_user(user => "jim", password => $jimpass);
|
||||
check_user_logged_in("jim");
|
||||
check_user_logged_in(user => "jim");
|
||||
|
||||
# Lock the screen and unlock again.
|
||||
lock_screen();
|
||||
@ -315,32 +303,29 @@ sub run {
|
||||
login_user(user => "jim", password => $jimpass, method => "unlock");
|
||||
|
||||
# Switch user tests
|
||||
if ($desktop eq "gnome") {
|
||||
# Because KDE at the moment (20200403) is very unreliable concerning switching the users inside
|
||||
# the virtual machine, we will skip this part, until situation is better. Switching users will
|
||||
# be only tested in Gnome.
|
||||
|
||||
unless ($desktop eq "i3") {
|
||||
# Start a terminal session to monitor on which sessions we are, when we start switching users.
|
||||
# This time, we will open the terminal window manually because we want to leave it open later.
|
||||
menu_launch_type "terminal";
|
||||
desktop_launch_terminal;
|
||||
wait_still_screen 2;
|
||||
# Initiate switch user
|
||||
switch_user();
|
||||
# Now, we get a new login screen, so let's do the login into the new session.
|
||||
login_user(user => "jack", password => $jackpass);
|
||||
# Check that it is a new session, the terminal window should not be visible.
|
||||
if (check_screen "user_confirm_jim") {
|
||||
if (check_screen "apps_run_terminal") {
|
||||
die "The session was not switched!";
|
||||
}
|
||||
else {
|
||||
check_user_logged_in("jack");
|
||||
# keep the terminal open so we can check later
|
||||
check_user_logged_in(user => "jack", keepterm => 1);
|
||||
}
|
||||
# Log out the user.
|
||||
logout_user();
|
||||
# Switch again.
|
||||
switch_user();
|
||||
# Now, let us log into the original session, this time, the terminal window
|
||||
# should still be visible.
|
||||
login_user(user => "jim", password => $jimpass);
|
||||
assert_screen "user_confirm_jim";
|
||||
check_user_logged_in(user => "jim", termopen => 1);
|
||||
|
||||
# We will also test another alternative - switching the user from
|
||||
# a locked screen.
|
||||
@ -348,7 +333,9 @@ sub run {
|
||||
send_key "ret";
|
||||
switch_user();
|
||||
login_user(user => "jack", password => $jackpass);
|
||||
check_user_logged_in("jack");
|
||||
# we should be back in the previous 'jack' session so the terminal
|
||||
# we kept open should be there
|
||||
check_user_logged_in(user => "jack", termopen => 1);
|
||||
}
|
||||
# Power off the machine
|
||||
power_off();
|
||||
|