mirror of
https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git
synced 2024-12-28 21:23:09 +00:00
e9e967c4bf
Also be a bit more consistent about asserting we saw a terminal and waiting a bit before typing stuff. We can drop the doublek workarounds from the keyring tests as we no longer use the kicker to launch the terminal on KDE (we use ctrl-alt-t shortcut). Signed-off-by: Adam Williamson <awilliam@redhat.com>
179 lines
7.2 KiB
Perl
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
|
|
desktop_launch_terminal;
|
|
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:
|