diff --git a/lib/utils.pm b/lib/utils.pm index 90337a70..7a1318aa 100644 --- a/lib/utils.pm +++ b/lib/utils.pm @@ -570,13 +570,24 @@ sub setup_repos { ); my $arch = get_var("ARCH"); my $tag = get_var("TAG"); - # write the tag repo config if appropriate - assert_script_run 'printf "[openqa-testtag]\nname=openqa-testtag\nbaseurl=https://kojipkgs.fedoraproject.org/repos/' . "$tag/latest/$arch" . '/\ncost=2000\nenabled=1\ngpgcheck=0\n" > /etc/yum.repos.d/openqa-testtag.repo' if ($tag && !$args{waonly}); + my $copr = get_var("COPR"); + if (($tag || $copr) && !$args{waonly}) { + # write a side tag or COPR repo config, enabled or disabled + # according to the 'configs' arg + assert_script_run 'printf "[openqa-testtag]\nname=openqa-testtag\nbaseurl=' . get_var("UPDATE_OR_TAG_REPO") . '/\ncost=2000\nenabled=' . $args{configs} . '\ngpgcheck=0\npriority=1\n" > /etc/yum.repos.d/openqa-testtag.repo'; + # write out the info files + assert_script_run 'dnf --disablerepo=* --enablerepo=openqa-testtag repoquery --qf "%{SOURCERPM} %{NAME} %{EPOCH} %{VERSION} %{RELEASE}" | sort -u > /mnt/updatepkgs.txt'; + # the | xargs here is a wacky trick that converts newlines to + # spaces - unlike rpm, dnf always puts every package on a new + # line, which we don't want here + # https://unix.stackexchange.com/a/110759 + assert_script_run 'dnf --disablerepo=* --enablerepo=openqa-testtag repoquery --qf "%{NAME} " | xargs > /mnt/updatepkgnames.txt'; + } my @was = get_workarounds($args{version}); # bail if there are no workarounds: # * if we're in workarounds-only mode - # * if we're testing a side tag (so no packages to dl) - if ($args{waonly} || $tag) { + # * if we're testing a side tag or COPR (so no packages to dl) + if ($args{waonly} || $tag || $copr) { return unless (@was); } # if we got this far, we're definitely downloading *something* @@ -619,14 +630,14 @@ sub setup_repos { die "Neither ADVISORY_NVRS nor KOJITASK set! Don't know what to do" unless ($args{waonly}); } my $cmd = "/usr/local/bin/setup_repos.py"; - # don't download updates if we're in workarounds-only mode or testing a tag - $cmd .= " -u $udstring" unless ($args{waonly} || $tag); + # don't download updates if we're in workarounds-only mode or testing a tag or COPR + $cmd .= " -u $udstring" unless ($args{waonly} || $tag || $copr); $cmd .= " -w $wastring" if (@was); # write repo config files if asked $cmd .= " -c" if ($args{configs}); $cmd .= " $arch"; assert_script_run $cmd, $timeout; - unless ($args{waonly} || $tag) { + unless ($args{waonly} || $tag || $copr) { upload_logs "/mnt/updatepkgnames.txt"; upload_logs "/mnt/updatepkgs.txt"; } @@ -635,8 +646,9 @@ sub setup_repos { sub _repo_setup_updates { # Appropriate repo setup steps for testing a Bodhi update my $tag = get_var("TAG"); + my $copr = get_var("COPR"); # Check if we already ran, bail if so - if ($tag) { + if ($tag || $copr) { # for TAG case, check for the repo file return unless script_run "test -f /etc/yum.repos.d/openqa-testtag.repo"; } @@ -670,8 +682,8 @@ sub _repo_setup_updates { select_console("virtio-console"); console_login(); # prepare the directory the packages will be downloaded to, unless we're - # testing a side tag - _prepare_update_mount() unless ($tag); + # testing a side tag or COPR + _prepare_update_mount() unless ($tag || $copr); # on CANNED, we need to enter the toolbox at this point if (get_var("CANNED")) { @@ -829,7 +841,6 @@ sub gnome_initial_setup { @_ ); my $relnum = get_release_number; - my $advortask = get_var("ADVISORY_OR_TASK"); # note: when 'language' is "skipped", it's turned into a 'welcome' # page, which has a "Start Setup" button, not a "Next" button @@ -1203,8 +1214,6 @@ sub quit_with_shortcut { # are currently installed. This is here so we can do it both in # _advisory_post and post_fail_hook. sub advisory_get_installed_packages { - # can't do anything useful when testing a side tag - return if (get_var("TAG")); # bail out if the file doesn't exist: this is in case we get # here in the post-fail hook but we failed before creating it return if script_run "test -f /mnt/updatepkgs.txt"; @@ -1234,8 +1243,6 @@ sub advisory_check_nonmatching_packages { wrapper => "", @_ ); - # can't do anything useful when testing a side tag - return if (get_var("TAG")); # bail out if the file doesn't exist: this is in case we get # here in the post-fail hook but we failed before creating it return if script_run "test -f /mnt/updatepkgnames.txt"; @@ -1245,9 +1252,13 @@ sub advisory_check_nonmatching_packages { script_run 'touch /tmp/installedupdatepkgs.txt'; my $rpmcmd = "rpm"; my $timeout = 180; + # longer if we have a lot of packages + my $pkgs = script_output "wc -l /mnt/updatepkgs.txt"; + $timeout *= 2 if ($pkgs > 100); + $timeout *= 2 if ($pkgs > 400); my $wrapper = $args{wrapper}; $rpmcmd = "$wrapper rpm" if ($wrapper); - $timeout = 360 if ($wrapper); + $timeout *= 2 if ($wrapper); # this creates /tmp/installedupdatepkgs.txt as a sorted list of installed # packages with the same name as packages from the update, in the same form # as /mnt/updatepkgs.txt. The '--last | head -1' tries to handle the diff --git a/templates.fif.json b/templates.fif.json index 3c162ebc..94930f0d 100644 --- a/templates.fif.json +++ b/templates.fif.json @@ -20,6 +20,8 @@ "backend": "qemu", "settings": { "ARCH_BASE_MACHINE": "aarch64", + "INSECURE_PFLASH_CODE": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw", + "INSECURE_PFLASH_VARS": "/usr/share/edk2/aarch64/vars-template-pflash.raw", "PART_TABLE_TYPE": "gpt", "QEMU": "aarch64", "QEMUCPU": "host", @@ -56,6 +58,8 @@ "backend": "qemu", "settings": { "ARCH_BASE_MACHINE": "64bit", + "INSECURE_PFLASH_CODE": "/usr/share/edk2/ovmf/OVMF_CODE.fd", + "INSECURE_PFLASH_VARS": "/usr/share/edk2/ovmf/OVMF_VARS.fd", "PART_TABLE_TYPE": "gpt", "QEMUCPU": "Nehalem", "QEMUCPUS": "2", diff --git a/tests/_container_build_kiwi.pm b/tests/_container_build_kiwi.pm index 2dfe8541..2b1db6d5 100644 --- a/tests/_container_build_kiwi.pm +++ b/tests/_container_build_kiwi.pm @@ -33,6 +33,7 @@ sub run { } my $arch = get_var("ARCH"); my $tag = get_var("TAG"); + my $copr = get_var("COPR"); my $workarounds = get_workarounds; if (get_var("NUMDISKS") > 2) { # put /var/lib/mock on the third disk, so we don't run out of @@ -50,13 +51,13 @@ sub run { assert_script_run "echo \"include('/etc/mock/fedora-${mockver}-${arch}.cfg')\" > /etc/mock/openqa.cfg"; # make the side and workarounds repos and the serial device available inside the mock root assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_enable\'] = True" >> /etc/mock/openqa.cfg'; - assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/update_repo\', \'/mnt/update_repo\'))" >> /etc/mock/openqa.cfg' unless ($tag); + assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/update_repo\', \'/mnt/update_repo\'))" >> /etc/mock/openqa.cfg' unless ($tag || $copr); assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/workarounds_repo\', \'/mnt/workarounds_repo\'))" >> /etc/mock/openqa.cfg' if ($workarounds); assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/dev/' . $serialdev . '\', \'/dev/' . $serialdev . '\'))" >> /etc/mock/openqa.cfg'; my $repos = 'config_opts[\'dnf.conf\'] += \"\"\"\n'; - # add the update repo or tag repo to the config - $repos .= '[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' unless ($tag); - $repos .= '[openqa-testtag]\nname=Tag test repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/' . "${tag}/latest/${arch}" . '\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ($tag); + # add the update, tag or COPR repo to the config + $repos .= '[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' unless ($tag || $copr); + $repos .= '[openqa-testtag]\nname=Tag test repo\nbaseurl=' . get_var("UPDATE_OR_TAG_REPO") . '\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\npriority=1\n' if ($tag || $copr); # and the workaround repo $repos .= '\n[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workarounds_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ($workarounds); # also the buildroot repo, for Rawhide @@ -86,8 +87,8 @@ sub run { assert_script_run 'sed -i -e "s,dnf-yum,yum,g" teams/cloud/vagrant.xml'; } # now add the side repo or tag repo to the appropriate repo XML - assert_script_run 'printf "$(head -n -1 ' . $repoxml . ')\n \n \n \n\n" > ' . $repoxml unless ($tag); - assert_script_run 'printf "$(head -n -1 ' . $repoxml . ')\n \n \n \n\n" > ' . $repoxml if ($tag); + assert_script_run 'printf "$(head -n -1 ' . $repoxml . ')\n \n \n \n\n" > ' . $repoxml unless ($tag || $copr); + assert_script_run 'printf "$(head -n -1 ' . $repoxml . ')\n \n \n \n\n" > ' . $repoxml if ($tag || $copr); # and the workarounds repo assert_script_run 'printf "$(head -n -1 ' . $repoxml . ')\n \n \n \n\n" > ' . $repoxml if ($workarounds); # and the buildroot repo, for Rawhide diff --git a/tests/_installer_build.pm b/tests/_installer_build.pm index fda9f84d..3b368dbc 100644 --- a/tests/_installer_build.pm +++ b/tests/_installer_build.pm @@ -27,8 +27,8 @@ sub run { } $cmd .= " --repo=/etc/yum.repos.d/workarounds.repo" if (get_workarounds); $cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel); - $cmd .= " --repo=/etc/yum.repos.d/advisory.repo" unless (get_var("TAG")); - $cmd .= " --repo=/etc/yum.repos.d/openqa-testtag.repo" if (get_var("TAG")); + $cmd .= " --repo=/etc/yum.repos.d/advisory.repo" unless (get_var("TAG") || get_var("COPR")); + $cmd .= " --repo=/etc/yum.repos.d/openqa-testtag.repo" if (get_var("TAG") || get_var("COPR")); $cmd .= " ./results"; assert_script_run $cmd, 2400; # good to have the log around for checks diff --git a/tests/_live_build.pm b/tests/_live_build.pm index 02dbde44..f94a3e92 100644 --- a/tests/_live_build.pm +++ b/tests/_live_build.pm @@ -28,6 +28,7 @@ sub run { my $subv = get_var("SUBVARIANT"); my $lcsubv = lc($subv); my $tag = get_var("TAG"); + my $copr = get_var("COPR"); my $workarounds = get_workarounds; if (get_var("NUMDISKS") > 2) { # put /var/lib/mock on the third disk, so we don't run out of @@ -45,13 +46,13 @@ sub run { assert_script_run "echo \"include('/etc/mock/fedora-${mockver}-${arch}.cfg')\" > /etc/mock/openqa.cfg"; # make the side and workarounds repos and the serial device available inside the mock root assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_enable\'] = True" >> /etc/mock/openqa.cfg'; - assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/update_repo\', \'/mnt/update_repo\'))" >> /etc/mock/openqa.cfg' unless ($tag); + assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/update_repo\', \'/mnt/update_repo\'))" >> /etc/mock/openqa.cfg' unless ($tag || $copr); assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/workarounds_repo\', \'/mnt/workarounds_repo\'))" >> /etc/mock/openqa.cfg' if ($workarounds); assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/dev/' . $serialdev . '\', \'/dev/' . $serialdev . '\'))" >> /etc/mock/openqa.cfg'; my $repos = 'config_opts[\'dnf.conf\'] += \"\"\"\n'; - # add the update repo or tag repo to the config - $repos .= '[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' unless ($tag); - $repos .= '[openqa-testtag]\nname=Tag test repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/' . "${tag}/latest/${arch}" . '\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ($tag); + # add the update, tag or COPR repo to the config + $repos .= '[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' unless ($tag || $copr); + $repos .= '[openqa-testtag]\nname=Tag test repo\nbaseurl=' . get_var("UPDATE_OR_TAG_REPO") . '/\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\npriority=1\n' if ($tag || $copr); # and the workaround repo $repos .= '\n[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workarounds_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if ($workarounds); # also the buildroot repo, for Rawhide @@ -68,9 +69,9 @@ sub run { assert_script_run 'git clone https://pagure.io/fedora-kickstarts.git'; assert_script_run 'cd fedora-kickstarts'; assert_script_run "git checkout ${branch}"; - # now add the side repo or tag repo to the appropriate repo ks - assert_script_run 'echo "repo --name=advisory --baseurl=file:///mnt/update_repo" >> ' . $repoks unless ($tag); - assert_script_run 'echo "repo --name=openqa-testtag --baseurl=https://kojipkgs.fedoraproject.org/repos/' . "${tag}/latest/${arch}" . '" >> ' . $repoks if ($tag); + # now add the side, tag or COPR repo to the appropriate repo ks + assert_script_run 'echo "repo --name=advisory --baseurl=file:///mnt/update_repo" >> ' . $repoks unless ($tag || $copr); + assert_script_run 'echo "repo --name=openqa-testtag --baseurl=' . get_var("UPDATE_OR_TAG_REPO") . '" >> ' . $repoks if ($tag || $copr); # and the workarounds repo assert_script_run 'echo "repo --name=workarounds --baseurl=file:///mnt/workarounds_repo" >> ' . $repoks if ($workarounds); # and the buildroot repo, for Rawhide diff --git a/tests/_ostree_build.pm b/tests/_ostree_build.pm index 0aef1c5b..e8327b83 100644 --- a/tests/_ostree_build.pm +++ b/tests/_ostree_build.pm @@ -10,20 +10,18 @@ sub run { my $rawrel = get_var("RAWREL"); my $repo = $version eq $rawrel ? "fedora-rawhide.repo" : "fedora.repo"; my $branch; - my $releasever; if ($version eq $rawrel) { $branch = "main"; - $releasever = "Rawhide"; } else { $branch = "f${version}"; - $releasever = $version; } my $advortask = get_var("ADVISORY_OR_TASK"); my $arch = get_var("ARCH"); my $subv = get_var("SUBVARIANT"); my $lcsubv = lc($subv); my $tag = get_var("TAG"); + my $copr = get_var("COPR"); my $workarounds = get_workarounds; # mount our nice big empty scratch disk as /var/tmp assert_script_run "rm -rf /var/tmp/*"; @@ -43,14 +41,14 @@ sub run { # now copy the advisory, workaround repo and koji-rawhide config files assert_script_run 'cp /etc/yum.repos.d/workarounds.repo .' if ($workarounds); assert_script_run 'cp /etc/yum.repos.d/koji-rawhide.repo .' if ($version eq $rawrel); - assert_script_run 'cp /etc/yum.repos.d/advisory.repo .' unless ($tag); - assert_script_run 'cp /etc/yum.repos.d/openqa-testtag.repo .' if ($tag); + assert_script_run 'cp /etc/yum.repos.d/advisory.repo .' unless ($tag || $copr); + assert_script_run 'cp /etc/yum.repos.d/openqa-testtag.repo .' if ($tag || $copr); # and add them to the config file my $repl = 'repos:'; $repl .= '\n - workarounds' if ($workarounds); $repl .= '\n - koji-rawhide' if ($version eq $rawrel); - $repl .= '\n - advisory' unless ($tag); - $repl .= '\n - openqa-testtag' if ($tag); + $repl .= '\n - advisory' unless ($tag || $copr); + $repl .= '\n - openqa-testtag' if ($tag || $copr); # Up to Fedora 39, repo definitions are in the subvariant config... assert_script_run 'sed -i -e "s,repos:,' . $repl . ',g" fedora-' . $lcsubv . '.yaml'; # From Fedora 40 onwards, they're in the common config. Let's just @@ -106,8 +104,8 @@ sub run { } $cmd .= " --repo=/etc/yum.repos.d/workarounds.repo" if ($workarounds); $cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel); - $cmd .= " --repo=/etc/yum.repos.d/advisory.repo" unless ($tag); - $cmd .= " --repo=/etc/yum.repos.d/openqa-testtag.repo" if ($tag); + $cmd .= " --repo=/etc/yum.repos.d/advisory.repo" unless ($tag || $copr); + $cmd .= " --repo=/etc/yum.repos.d/openqa-testtag.repo" if ($tag || $copr); $cmd .= " ./results"; assert_script_run $cmd, 9000; # good to have the log around for checks diff --git a/tests/_support_server.pm b/tests/_support_server.pm index 0d812f97..417fa180 100644 --- a/tests/_support_server.pm +++ b/tests/_support_server.pm @@ -133,9 +133,11 @@ sub run { assert_script_run "mkdir -p /export"; # get the kickstart assert_script_run "curl -o /export/root-user-crypted-net.ks https://fedorapeople.org/groups/qa/kickstarts/root-user-crypted-net.ks"; - # for update tests, set up the update repository and export it - if (get_var("ADVISORY_OR_TASK") && !get_var("TAG")) { - assert_script_run "echo '/mnt/update_repo 172.16.2.0/24(ro)' >> /etc/exports"; + # for update tests, set up the update repository and export it, + # if we have one (for tag and copr tests we don't really need to + # be here at all so we'll just sit here being useless) + if (get_var("ADVISORY_OR_TASK")) { + assert_script_run "echo '/mnt/update_repo 172.16.2.0/24(ro)' >> /etc/exports" if (!get_var("TAG") && !get_var("COPR")); } # for compose tests, we do all this stuff else {