diff --git a/schedule/wsl/wsl_main.yaml b/schedule/wsl/wsl_main.yaml index cb443543a9f1..af1c13e4833a 100644 --- a/schedule/wsl/wsl_main.yaml +++ b/schedule/wsl/wsl_main.yaml @@ -1,11 +1,18 @@ --- -name: wsl_main.yaml +name: wsl_main.yaml description: > WSL smoke test on Windows 10 image +conditional_schedule: + enable_systemd: + WSL_SYSTEMD: + '1': + - wsl/enable_systemd + schedule: - wsl/boot_windows - wsl/prepare_wsl - wsl/install_wsl - wsl/firstrun + - '{{enable_systemd}}' - wsl/wsl_cmd_check diff --git a/tests/wsl/enable_systemd.pm b/tests/wsl/enable_systemd.pm new file mode 100644 index 000000000000..4f6a15dd5d8f --- /dev/null +++ b/tests/wsl/enable_systemd.pm @@ -0,0 +1,43 @@ +# SUSE's openQA tests +# +# Copyright 2012-2023 SUSE LLC +# SPDX-License-Identifier: FSFAP + +# Summary: Configure WSL users +# Maintainer: qa-c + +use Mojo::Base qw(windowsbasetest); +use testapi; +use utils qw(enter_cmd_slow); +use version_utils qw(is_opensuse); +use wsl qw(is_fake_scc_url_needed); + +sub run { + my $self = shift; + + assert_screen(['windows_desktop', 'powershell-as-admin-window']); + $self->open_powershell_as_admin if match_has_tag('windows_desktop'); + # In openSUSE the WSL shell is not root, so there's need to run become_root + # in order to write in the /etc/wsl.conf file + $self->run_in_powershell( + cmd => q(wsl), + code => sub { + become_root if (is_opensuse); + enter_cmd("ps 1 | grep '/init'"); + enter_cmd("stat /init | grep 'init'"); + enter_cmd("echo -e '[boot]\nsystemd=true' > /etc/wsl.conf"); + save_screenshot; + enter_cmd("exit"); + # In openSUSE there's need to exit twice, one from the root and another + # one from the WSL + enter_cmd("exit") if (is_opensuse); + } + ); + $self->run_in_powershell(cmd => q(wsl --shutdown)); + $self->run_in_powershell(cmd => q(wsl /bin/bash -c "ps 1 | grep '/sbin/init'")); + $self->run_in_powershell(cmd => q(wsl /bin/bash -c "stat /sbin/init | grep 'systemd'")); + $self->run_in_powershell(cmd => q(wsl /bin/bash -c "systemctl list-unit-files --type=service | head -n 20")); + $self->run_in_powershell(cmd => q(wsl /bin/bash -c "exit")); +} + +1;