package cockpit; use strict; use base 'Exporter'; use Exporter; use lockapi; use testapi; use utils; our @EXPORT = qw(start_cockpit select_cockpit_update check_updates); sub start_cockpit { # Starting from a console, get to a browser with Cockpit (running # on localhost) shown. If login is truth-y, also log in. If login # and admin are both truthy, also gain admin privileges. Assumes # X and Firefox are installed. my %args = @_; $args{login} //= 0; $args{admin} //= 1; my $login = shift || 0; # run firefox directly in X as root. never do this, kids! type_string "startx /usr/bin/firefox -width 1024 -height 768 http://localhost:9090\n"; assert_screen "cockpit_login", 60; wait_still_screen(stilltime => 5, similarity_level => 45); if ($args{login}) { type_safely "test"; wait_screen_change { send_key "tab"; }; type_safely get_var("USER_PASSWORD", "weakpassword"); send_key "ret"; if ($args{admin}) { assert_and_click "cockpit_admin_enable"; assert_screen "cockpit_admin_password"; type_safely get_var("USER_PASSWORD", "weakpassword"); send_key "ret"; } assert_screen "cockpit_main"; # wait for any animation or other weirdness # can't use wait_still_screen because of that damn graph sleep 3; } } sub select_cockpit_update { # This method navigates to to the updates screen # From Firefox 100 on, we get 'adaptive scrollbars', which means # the scrollbar is just invisible unless you moved the mouse # recently. So we click in the search box and hit 'up' to scroll # the sidebar to the bottom if necessary assert_screen ["cockpit_software_updates", "cockpit_search"], 120; click_lastmatch; if (match_has_tag "cockpit_search") { send_key "up"; wait_still_screen 2; assert_and_click "cockpit_software_updates"; } # wait for the updates to download assert_screen 'cockpit_updates_check', 300; } sub check_updates { my $logfile = shift; sleep 2; my $checkresult = script_run "dnf check-update > $logfile"; upload_logs "$logfile", failok => 1; return ($checkresult); }