1
0
mirror of https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git synced 2024-10-22 18:14:21 +00:00
os-autoinst-distri-fedora/tests/desktop_notifications.pm
Lukas Ruzicka 092cc5dd05 Move the content from i3 library to the files.
Over the time, we have changed the test scripts so that the code
in the i3.pm library was no more needed. The only leftover was the
user config subroutine that could be moved to the only file that was
using it and we could get rid of the library file.
2024-09-26 16:06:43 -07:00

179 lines
7.2 KiB
Perl

use base "installedtest";
use strict;
use testapi;
use utils;
use packagetest;
# This test sort of covers QA:Testcase_desktop_update_notification
# and QA:Testcase_desktop_error_checks . If it fails, probably *one*
# of those failed, but we don't know which (deciphering which is
# tricky and involves likely-fragile needles to try and figure out
# what notifications we have).
sub create_user_i3_config {
my %args = @_;
my $login = $args{login};
assert_script_run("mkdir -p /home/$login/.config/i3/");
# ensure that no alias of cp prevents an existing config from being overwritten
assert_script_run("/usr/bin/cp -f /etc/i3/config /home/$login/.config/i3/config");
assert_script_run("sed -i '/i3-config-wizard/d' /home/$login/.config/i3/config");
assert_script_run "chown -R $login:$login /home/$login/.config";
assert_script_run "restorecon -vr /home/$login/.config";
}
sub run {
my $self = shift;
my $desktop = get_var("DESKTOP");
my $relnum = get_release_number;
# for the live image case, handle bootloader here
if (get_var("BOOTFROM")) {
do_bootloader(postinstall => 1, params => '3');
}
else {
do_bootloader(postinstall => 0, params => '3');
}
boot_to_login_screen;
# tty1 is used here for historic reasons, but it's not hurting
# anything and changing it might, so let's leave it...
$self->root_console(tty => 1);
# ensure we actually have some package updates available
prepare_test_packages;
my $user = get_var('USER_LOGIN', 'test');
if ($desktop eq 'gnome') {
# On GNOME, move the clock forward if needed, because it won't
# check for updates before 6am(!)
my $hour = script_output 'date +%H';
if ($hour < 6) {
script_run 'systemctl stop chronyd.service ntpd.service';
script_run 'systemctl disable chronyd.service ntpd.service';
script_run 'systemctl mask chronyd.service ntpd.service';
assert_script_run 'date --set="06:00:00"';
}
if (get_var("BOOTFROM")) {
# Set a bunch of update checking-related timestamps to
# two days ago or two weeks ago to try and make sure we
# get notifications, see:
# https://wiki.gnome.org/Design/Apps/Software/Updates#Tentative_Design
my $now = script_output 'date +%s';
my $yyday = $now - 2 * 24 * 60 * 60;
my $longago = $now - 14 * 24 * 60 * 60;
# have to log in as the user to do this
script_run 'exit', 0;
console_login(user => $user, password => get_var('USER_PASSWORD', 'weakpassword'));
script_run "gsettings set org.gnome.software check-timestamp ${yyday}", 0;
script_run "gsettings set org.gnome.software update-notification-timestamp ${longago}", 0;
script_run "gsettings set org.gnome.software online-updates-timestamp ${longago}", 0;
script_run "gsettings set org.gnome.software upgrade-notification-timestamp ${longago}", 0;
script_run "gsettings set org.gnome.software install-timestamp ${longago}", 0;
wait_still_screen 5;
script_run 'exit', 0;
console_login(user => 'root', password => get_var('ROOT_PASSWORD', 'weakpassword'));
}
}
elsif ($desktop eq 'i3') {
assert_script_run('dnf install -y libnotify');
unless (get_var("BOOTFROM")) {
$user = "liveuser";
}
assert_script_run("usermod -a -G dialout $user");
create_user_i3_config(login => $user);
}
if ($desktop eq 'kde' && get_var("BOOTFROM")) {
# need to login as user for this
script_run 'exit', 0;
console_login(user => get_var('USER_LOGIN', 'test'), password => get_var('USER_PASSWORD', 'weakpassword'));
# unset the 'last time notification was shown' setting in case
# it got shown during install_default_upload:
# https://bugzilla.redhat.com/show_bug.cgi?id=2178311
script_run 'kwriteconfig5 --file PlasmaDiscoverUpdates --group Global --key LastNotificationTime --delete', 0;
wait_still_screen 5;
script_run 'exit', 0;
console_login(user => 'root', password => get_var('ROOT_PASSWORD', 'weakpassword'));
}
# can't use assert_script_run here as long as we're on tty1
# we don't use isolate per:
# https://github.com/systemd/systemd/issues/26364#issuecomment-1424900066
type_string "systemctl start graphical.target\n";
# we trust systemd to switch us to the right tty here
if (get_var("BOOTFROM")) {
my $password = get_var("USER_PASSWORD", "weakpassword");
assert_screen 'graphical_login', 60;
wait_still_screen 10, 30;
dm_perform_login($desktop, $password);
}
check_desktop(timeout => 90);
# now, WE WAIT. this is just an unconditional wait - rather than
# breaking if we see an update notification appear - so we catch
# things that crash a few minutes after startup, etc.
for my $n (1 .. 16) {
sleep 30;
mouse_set 10, 10;
send_key "spc";
mouse_hide;
}
if ($desktop eq 'gnome') {
# click the clock to show notifications. of course, we have no
# idea what'll be in the clock, so we just have to click where
# we know it is
mouse_set 512, 10;
mouse_click;
}
if ($desktop eq 'kde') {
if (get_var("BOOTFROM")) {
# first check the systray update notification is there
assert_screen "desktop_update_notification_systray";
}
# now open the notifications view in the systray
if (check_screen 'desktop_icon_notifications') {
# this is the little bell thing KDE sometimes shows if
# there's been a notification recently...
click_lastmatch;
}
else {
# ...otherwise you have to expand the systray and click
# "Notifications"
assert_and_click 'desktop_expand_systray';
assert_and_click 'desktop_systray_notifications';
}
# In F32+ we may get an 'akonadi did something' message
if (check_screen 'akonadi_migration_notification', 5) {
click_lastmatch;
}
}
if ($desktop eq 'i3') {
# we launch a terminal so that the top of the screen is filled with
# something that we know and can check that it is not covered by a
# notification popup from dunst
send_key('alt-ret');
assert_screen("apps_run_terminal");
assert_script_run('notify-send -t 10000 "foo"');
assert_screen("i3_dunst_foo_notification", timeout => 5);
sleep 11;
if (check_screen("i3_dunst_foo_notification")) {
# The notifications should not be shown any more.
record_soft_fail("i3 shows notifications longer than expected");
}
return;
}
if (get_var("BOOTFROM")) {
# we should see an update notification and no others
assert_screen "desktop_update_notification_only";
}
else {
# for the live case there should be *no* notifications
assert_screen "desktop_no_notifications";
}
}
sub test_flags {
return {fatal => 1};
}
1;
# vim: set sw=4 et: