diff --git a/lib/tapnet.pm b/lib/tapnet.pm index 0dfdd225..829a37f6 100644 --- a/lib/tapnet.pm +++ b/lib/tapnet.pm @@ -6,8 +6,12 @@ use base 'Exporter'; use Exporter; use testapi; +use utils; + our @EXPORT = qw/clone_host_file setup_tap_static get_host_dns/; +my $self = shift; + 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 @@ -29,6 +33,17 @@ 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 + + # It is possible on certain tests that this will be running while + # we are inside a graphical session. In this case we need to switch + # to the console before we proceed with the network settings. + my $console = 0; + unless (check_screen("root_console")) { + $console = 1; + send_key("ctrl-alt-f3"); + wait_still_screen(5); + console_login(user => "root"); + } my $ip = shift; my $hostname = shift || ""; if ($hostname) { @@ -53,6 +68,11 @@ sub setup_tap_static { assert_script_run "nmcli con up '$connection'"; # for debugging assert_script_run "nmcli -t con show '$connection'"; + # If we have switched to console from a graphical + # environment, here we come back to it. + if ($console) { + desktop_vt(); + } } sub get_host_dns { diff --git a/needles/gnome/apps/settings/settings_remote_desktop.json b/needles/gnome/apps/settings/settings_remote_desktop.json new file mode 100644 index 00000000..993284f2 --- /dev/null +++ b/needles/gnome/apps/settings/settings_remote_desktop.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_remote_desktop" + ], + "area": [ + { + "xpos": 395, + "ypos": 303, + "width": 113, + "height": 21, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_remote_desktop.png b/needles/gnome/apps/settings/settings_remote_desktop.png new file mode 100644 index 00000000..2066105c Binary files /dev/null and b/needles/gnome/apps/settings/settings_remote_desktop.png differ diff --git a/needles/gnome/apps/settings/settings_remote_login.json b/needles/gnome/apps/settings/settings_remote_login.json new file mode 100644 index 00000000..4352f967 --- /dev/null +++ b/needles/gnome/apps/settings/settings_remote_login.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_remote_login" + ], + "area": [ + { + "xpos": 654, + "ypos": 71, + "width": 121, + "height": 23, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_remote_login.png b/needles/gnome/apps/settings/settings_remote_login.png new file mode 100644 index 00000000..eb6d0608 Binary files /dev/null and b/needles/gnome/apps/settings/settings_remote_login.png differ diff --git a/needles/gnome/apps/settings/settings_remote_password.json b/needles/gnome/apps/settings/settings_remote_password.json new file mode 100644 index 00000000..da3a9151 --- /dev/null +++ b/needles/gnome/apps/settings/settings_remote_password.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_remote_password" + ], + "area": [ + { + "xpos": 366, + "ypos": 590, + "width": 69, + "height": 20, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_remote_password.png b/needles/gnome/apps/settings/settings_remote_password.png new file mode 100644 index 00000000..3fc8d60d Binary files /dev/null and b/needles/gnome/apps/settings/settings_remote_password.png differ diff --git a/needles/gnome/apps/settings/settings_remote_username.json b/needles/gnome/apps/settings/settings_remote_username.json new file mode 100644 index 00000000..25a7896c --- /dev/null +++ b/needles/gnome/apps/settings/settings_remote_username.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_remote_username" + ], + "area": [ + { + "xpos": 366, + "ypos": 535, + "width": 72, + "height": 20, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_remote_username.png b/needles/gnome/apps/settings/settings_remote_username.png new file mode 100644 index 00000000..a19c2127 Binary files /dev/null and b/needles/gnome/apps/settings/settings_remote_username.png differ diff --git a/needles/gnome/apps/settings/settings_switch_remote.json b/needles/gnome/apps/settings/settings_switch_remote.json new file mode 100644 index 00000000..abb9d594 --- /dev/null +++ b/needles/gnome/apps/settings/settings_switch_remote.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_switch_remote" + ], + "area": [ + { + "xpos": 366, + "ypos": 208, + "width": 165, + "height": 22, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_switch_remote.png b/needles/gnome/apps/settings/settings_switch_remote.png new file mode 100644 index 00000000..bd6a4ad7 Binary files /dev/null and b/needles/gnome/apps/settings/settings_switch_remote.png differ diff --git a/needles/gnome/apps/settings/settings_system.json b/needles/gnome/apps/settings/settings_system.json new file mode 100644 index 00000000..0af2c100 --- /dev/null +++ b/needles/gnome/apps/settings/settings_system.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "settings_system" + ], + "area": [ + { + "xpos": 67, + "ypos": 164, + "width": 55, + "height": 20, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/apps/settings/settings_system.png b/needles/gnome/apps/settings/settings_system.png new file mode 100644 index 00000000..7d759a73 Binary files /dev/null and b/needles/gnome/apps/settings/settings_system.png differ diff --git a/needles/gnome/gnome_button_unlock.json b/needles/gnome/gnome_button_unlock.json new file mode 100644 index 00000000..a1ccb712 --- /dev/null +++ b/needles/gnome/gnome_button_unlock.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "gnome_button_unlock" + ], + "area": [ + { + "xpos": 914, + "ypos": 119, + "width": 67, + "height": 19, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/gnome_button_unlock.png b/needles/gnome/gnome_button_unlock.png new file mode 100644 index 00000000..1fad0d6b Binary files /dev/null and b/needles/gnome/gnome_button_unlock.png differ diff --git a/needles/gnome/gnome_reveil_password.json b/needles/gnome/gnome_reveil_password.json new file mode 100644 index 00000000..41da03ca --- /dev/null +++ b/needles/gnome/gnome_reveil_password.json @@ -0,0 +1,15 @@ +{ + "properties": [], + "tags": [ + "gnome_reveil_password" + ], + "area": [ + { + "xpos": 833, + "ypos": 591, + "width": 20, + "height": 20, + "type": "match" + } + ] +} \ No newline at end of file diff --git a/needles/gnome/gnome_reveil_password.png b/needles/gnome/gnome_reveil_password.png new file mode 100644 index 00000000..643aec74 Binary files /dev/null and b/needles/gnome/gnome_reveil_password.png differ diff --git a/templates.fif.json b/templates.fif.json index 82f02218..be64957f 100644 --- a/templates.fif.json +++ b/templates.fif.json @@ -2515,6 +2515,53 @@ "USER_LOGIN": "false" } }, + "remote_desktop_server": { + "profiles": { + "fedora-Workstation-live-iso-x86_64-*-64bit": 35 + }, + "settings": { + "BOOTFROM": "c", + "HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2", + "NICTYPE": "tap", + "POSTINSTALL": "remote_desktop_server", + "POST_STATIC": "172.16.2.177 kaermorhen.test.openqa.fedoraproject.org", + "ROOT_PASSWORD": "weakpassword", + "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%", + "WORKER_CLASS": "tap" + } + }, + "remote_desktop_client": { + "profiles": { + "fedora-Workstation-live-iso-x86_64-*-64bit": 40 + }, + "settings": { + "BOOTFROM": "c", + "HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2", + "NICTYPE": "tap", + "POSTINSTALL": "remote_desktop_client", + "PARALLEL_WITH": "remote_desktop_server", + "POST_STATIC": "172.16.2.179 visimir.test.openqa.fedoraproject.org", + "ROOT_PASSWORD": "weakpassword", + "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%", + "WORKER_CLASS": "tap" + } + }, + "remote_desktop_freerdp": { + "profiles": { + "fedora-Workstation-live-iso-x86_64-*-64bit": 40 + }, + "settings": { + "BOOTFROM": "c", + "HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2", + "NICTYPE": "tap", + "POSTINSTALL": "remote_desktop_freerdp", + "PARALLEL_WITH": "remote_desktop_server", + "POST_STATIC": "172.16.2.178 witcher.test.openqa.fedoraproject.org", + "ROOT_PASSWORD": "weakpassword", + "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%", + "WORKER_CLASS": "tap" + } + }, "rpmostree_overlay": { "profiles": { "fedora-CoreOS-colive-iso-x86_64-*-64bit": 20, diff --git a/tests/remote_desktop_client.pm b/tests/remote_desktop_client.pm new file mode 100644 index 00000000..dcd99499 --- /dev/null +++ b/tests/remote_desktop_client.pm @@ -0,0 +1,57 @@ +use base "installedtest"; +use strict; +use testapi; +use utils; + +# This test uses a Connections application to establish an +# RDP connection to a remote computer running Gnome Workstation. + +sub run { + my $self = shift; + my $password = get_var("USER_PASSWORD", "weakpassword"); + my $rdpuser = "geralt"; + my $rdppass = "ciriofcintra"; + my $ip = "172.16.2.177"; + + # Wait until the RDP server is ready + # and lock parallel connection. + mutex_lock("kaermorhen_opened"); + + # Open the Connections and start the connection. + menu_launch_type("connections"); + wait_still_screen(3); + assert_screen("connections_runs"); + assert_and_click("connections_add_connection"); + type_very_safely($ip); + assert_and_click("gnome_button_connect"); + + # Log onto the system. + assert_screen("connection_authorization"); + assert_and_click("connection_namefield"); + type_very_safely($user); + send_key("tab"); + send_key("tab"); + type_very_safely($password); + assert_and_click("connection_authenticate"); + wait_still_screen(3); + send_key("ret"); + type_very_safely("$syspw\n"); + wait_still_screen(2); + + # Start the terminal + type_very_safely("terminal\n"); + wait_still_screen(3); + + # Check that we are on the correct computer. + # We can tell from the terminal prompt. + assert_screen("freerdp_desktop_connected"); + + # Unlock the parallel connection + mutex_unlock("karemorhen_opened"); +} + +sub test_flags { + return {fatal => 1, milestone => 1}; +} +1; +# vim: set sw=4 et: diff --git a/tests/remote_desktop_freerdp.pm b/tests/remote_desktop_freerdp.pm new file mode 100644 index 00000000..48d26a55 --- /dev/null +++ b/tests/remote_desktop_freerdp.pm @@ -0,0 +1,59 @@ +use base "installedtest"; +use strict; +use testapi; +use utils; +use lockapi; +use mmapi; + +# This test uses a freerdp connection to a remote computer +# running Gnome Workstation. + +sub run { + my $self = shift; + my $rdpuser = "geralt"; + my $rdppass = "ciriofcintra"; + my $ip = "172.16.2.177"; + my $password = get_var("USER_PASSWORD", "weakpassword"); + + # Switch to console and install the necessary packages. + $self->root_console(tty => 3); + assert_script_run("dnf install -y freerdp", timeout => 60); + + # Return to the desktop + desktop_vt(); + + # Wait until the RDP server is ready and lock parallel connection. + mutex_lock("kaermorhen_opened"); + + # Open terminal and make a connection to the remote server. + menu_launch_type("terminal"); + wait_still_screen(3); + enter_cmd("xfreerdp /u:$rdpuser /p:$rdppass /v:$ip"); + + # Check that a connection window has appeared. + assert_screen("connection_window"); + + # Log onto the system. + assert_and_check("connection_login_screen"); + send_key("ret"); + sleep(2); + type_very_safely("$password\n"); + wait_still_screen(2); + + # Start the terminal + type_very_safely("terminal\n"); + wait_still_screen(3); + + # Check that we are on the correct computer. + # We can tell from the terminal prompt. + assert_screen("freerdp_desktop_connected"); + + # Unlock parallel connection. + mutex_unlock("kaermorhen_opened"); +} + +sub test_flags { + return {fatal => 1, milestone => 1}; +} +1; +# vim: set sw=4 et: diff --git a/tests/remote_desktop_server.pm b/tests/remote_desktop_server.pm new file mode 100644 index 00000000..3871c23c --- /dev/null +++ b/tests/remote_desktop_server.pm @@ -0,0 +1,79 @@ +use base "installedtest"; +use strict; +use testapi; +use utils; +use lockapi; +use mmapi; + +sub run { + my $self = shift; + my $user = get_var("USER_LOGIN", "test"); + my $password = get_var("USER_PASSWORD", "weakpassword"); + my $rdpuser = "geralt"; + my $rdppass = "ciriofcintra"; + + $self->root_console(tty => 3); + # Make necessary settings for the RDP server. + # Set SElinux to permissive to workaround a Fedora issue + assert_script_run("setenforce 0"); + # Check that SElinux is in permissive mode + validate_script_output("getenforce", sub { m/Permissive/ }); + + # In Workstation, the RDP port should be opened per se, + # but let's open it explicitely, to make sure it is open. + assert_script_run("firewall-cmd --add-port=3389/tcp"); + + # Change to Desktop + desktop_vt(); + + # Open Settings and navigate to Remote Login + menu_launch_type("Settings"); + send_key("ctrl-f"); + sleep(2); + type_very_safely("system"); + assert_and_click("settings_system"); + assert_and_click("settings_remote_desktop"); + assert_and_click("settings_remote_login"); + assert_and_click("gnome_button_unlock"); + if (check_screen("auth_required_password", timeout => 60)) { + type_very_safely("$password\n"); + } + else { + die("Authentication dialogue is not visible but was expected."); + } + + # Set up remote login in Gnome Settings. + assert_and_click("settings_switch_remote"); + wait_still_screen(3); + assert_and_click("settings_remote_username"); + type_very_safely($rdpuser); + assert_and_click("settings_remote_password"); + type_very_safely($rdppass); + assert_and_click("gnome_reveil_password"); + wait_still_screen(3); + send_key("alt-f4"); + + # RDP does not allow connections when the user is still logged in + # locally, therefore we need to log the user out first. + assert_and_click("system_menu_button"); + assert_and_click("leave_button"); + assert_and_click("log_out_entry"); + assert_and_click("log_out_confirm"); + sleep(10); + + + # Check that the service is running. + $self->root_console(tty => 3); + assert_script_run("ps aux | grep rdp", timeout => 10); + + # Create mutex to synchronise with the children. + mutex_create("kaermorhen_opened"); + wait_for_children(); + +} + +sub test_flags { + return {fatal => 1}; +} +1; +# vim: set sw=4 et: