1
0
mirror of https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git synced 2025-10-19 10:08:58 +00:00

Create tests for remote desktop connections.

This adds a test for remote connection. It consists of a server part
in which Gnome RDP connection is set up, enabled, and the server is run,
and the client part that uses Connections as a client to connect to the
server.
The test is considered successful when the connection is established
and the user has logged into the system.

Fixes: https://pagure.io/fedora-qa/os-autoinst-distri-fedora/issue/333
This commit is contained in:
Lukáš Růžička 2024-09-06 14:06:27 +02:00
parent 6d36010207
commit 191772f35f
54 changed files with 596 additions and 0 deletions

View File

@ -6,8 +6,12 @@ use base 'Exporter';
use Exporter; use Exporter;
use testapi; use testapi;
use utils;
our @EXPORT = qw/clone_host_file setup_tap_static get_host_dns/; our @EXPORT = qw/clone_host_file setup_tap_static get_host_dns/;
my $self = shift;
sub clone_host_file { sub clone_host_file {
# copy a given file from the host into the guest. Mainly used # copy a given file from the host into the guest. Mainly used
# for networking config on tap tests. this is pretty crazy, but # 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 # 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 # for the system with a static IP address and possibly a specific
# hostname # 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 $ip = shift;
my $hostname = shift || ""; my $hostname = shift || "";
if ($hostname) { if ($hostname) {
@ -53,6 +68,11 @@ sub setup_tap_static {
assert_script_run "nmcli con up '$connection'"; assert_script_run "nmcli con up '$connection'";
# for debugging # for debugging
assert_script_run "nmcli -t con show '$connection'"; 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 { sub get_host_dns {

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 553,
"ypos": 568,
"width": 99,
"height": 16,
"type": "match"
}
],
"properties": [],
"tags": [
"connection_authenticate"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 373,
"ypos": 391,
"width": 91,
"height": 23,
"type": "match"
}
],
"properties": [],
"tags": [
"connection_username"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 617,
"ypos": 218,
"width": 49,
"height": 20,
"type": "match"
}
],
"properties": [],
"tags": [
"connection_verify"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 13,
"ypos": 44,
"width": 24,
"height": 24,
"type": "match"
}
],
"properties": [],
"tags": [
"connections_add_connection"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 470,
"ypos": 598,
"width": 83,
"height": 19,
"type": "match"
}
],
"properties": [],
"tags": [
"connections_nothanks"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 508,
"ypos": 490,
"width": 168,
"height": 29,
"type": "match"
}
],
"properties": [],
"tags": [
"connections_runs"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -0,0 +1,22 @@
{
"area": [
{
"xpos": 190,
"ypos": 245,
"width": 148,
"height": 20,
"type": "match"
},
{
"xpos": 426,
"ypos": 45,
"width": 173,
"height": 21,
"type": "match"
}
],
"properties": [],
"tags": [
"freerdp_desktop_connected"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 270,
"ypos": 42,
"width": 27,
"height": 28,
"type": "match"
}
],
"properties": [],
"tags": [
"settings_button_back"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 400,
"height": 21,
"type": "match",
"width": 113,
"ypos": 276
}
],
"properties": [],
"tags": [
"settings_remote_desktop"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_remote_desktop"
],
"area": [
{
"xpos": 395,
"ypos": 303,
"width": 113,
"height": 21,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 663,
"width": 121,
"type": "match",
"ypos": 44,
"height": 23
}
],
"properties": [],
"tags": [
"settings_remote_login"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_remote_login"
],
"area": [
{
"xpos": 654,
"ypos": 71,
"width": 121,
"height": 23,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -0,0 +1,19 @@
{
"area": [
{
"type": "match",
"width": 463,
"ypos": 558,
"height": 20,
"xpos": 367,
"click_point": {
"xpos": 443.5,
"ypos": 10
}
}
],
"properties": [],
"tags": [
"settings_remote_password"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_remote_password"
],
"area": [
{
"xpos": 366,
"ypos": 590,
"width": 69,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -0,0 +1,19 @@
{
"area": [
{
"width": 491,
"type": "match",
"ypos": 503,
"height": 20,
"xpos": 371,
"click_point": {
"xpos": 476.5,
"ypos": 9
}
}
],
"properties": [],
"tags": [
"settings_remote_username"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_remote_username"
],
"area": [
{
"xpos": 366,
"ypos": 535,
"width": 72,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -0,0 +1,19 @@
{
"area": [
{
"xpos": 371,
"ypos": 179,
"width": 542,
"type": "match",
"height": 22,
"click_point": {
"xpos": 505,
"ypos": 10
}
}
],
"properties": [],
"tags": [
"settings_switch_remote"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_switch_remote"
],
"area": [
{
"xpos": 366,
"ypos": 208,
"width": 165,
"height": 22,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 49,
"height": 20,
"ypos": 136,
"width": 55,
"type": "match"
}
],
"properties": [],
"tags": [
"settings_system"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"settings_system"
],
"area": [
{
"xpos": 67,
"ypos": 164,
"width": 55,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 311,
"ypos": 312,
"width": 66,
"height": 21,
"type": "match"
}
],
"properties": [],
"tags": [
"gnome_button_connect"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 935,
"ypos": 88,
"width": 69,
"height": 22,
"type": "match"
}
],
"properties": [],
"tags": [
"gnome_button_unlock"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"gnome_button_unlock"
],
"area": [
{
"xpos": 914,
"ypos": 119,
"width": 67,
"height": 19,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

@ -0,0 +1,16 @@
{
"area": [
{
"height": 18,
"ypos": 435,
"type": "match",
"width": 53,
"xpos": 578
}
],
"properties": [],
"tags": [
"DESKTOP-gnome",
"gnome_reboot_confirm"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

View File

@ -0,0 +1,15 @@
{
"properties": [],
"tags": [
"gnome_reveil_password"
],
"area": [
{
"xpos": 833,
"ypos": 591,
"width": 20,
"height": 20,
"type": "match"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -2165,6 +2165,37 @@
"USER_LOGIN": "false" "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"
}
},
"rpmostree_overlay": { "rpmostree_overlay": {
"profile_groups": { "profile_groups": {
"coreos-iot-silverblue": 20 "coreos-iot-silverblue": 20

View File

@ -0,0 +1,67 @@
use base "installedtest";
use strict;
use testapi;
use utils;
use mmapi;
use lockapi;
# 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");
# Unlock the session if it has locked in the meantime.
if (check_screen("panel_screen_locked")) {
send_key("up");
sleep(1);
type_very_safely("$password\n");
}
# Open the Connections and start the connection.
menu_launch_type("connections");
wait_still_screen(3);
assert_screen("connections_runs");
assert_and_click("connections_nothanks");
assert_and_click("connections_add_connection");
type_very_safely($ip);
assert_and_click("gnome_button_connect");
# Log onto the system.
assert_and_click("connection_verify");
assert_and_click("connection_username");
type_very_safely($rdpuser);
send_key("tab");
send_key("tab");
type_very_safely($rdppass);
assert_and_click("connection_authenticate");
wait_still_screen(3);
send_key("ret");
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 the parallel connection
mutex_unlock("karemorhen_opened");
}
sub test_flags {
return {fatal => 1, milestone => 1};
}
1;
# vim: set sw=4 et:

View File

@ -0,0 +1,83 @@
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);
assert_and_click("settings_button_back");
send_key("alt-f4");
# RDP does not allow connections when the user is still logged in
# locally, so let's reboot the machine to start from anew.
assert_and_click("system_menu_button");
assert_and_click("leave_button");
assert_and_click("reboot_entry");
assert_and_click("gnome_reboot_confirm");
assert_screen("graphical_login", 240);
# Check that the service is running. If the service was not running,
# let's record a soft failure and start the RDP service.
$self->root_console(tty => 3);
if (script_run("systemctl status gnome-remote-desktop --no-pager")) {
record_soft_failure("The Gnome Remote Desktop service is not running.");
assert_script_run("systemctl enable --now gnome-remote-desktop");
}
# 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: