1
0
mirror of https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git synced 2024-11-21 21:43:08 +00:00

Adjust tests for update and workaround repos provided as ISO

I'm attempting a new approach to the update and workaround repos.
Instead of having each update test recreate them for itself -
which is slow and wastes bandwidth - the dispatcher will create
an ISO at test schedule time and pass it as ISO_2. Then the test
just mounts the ISO. This makes the necessary adjustments on the
test side.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
This commit is contained in:
Adam Williamson 2023-06-13 14:48:53 -07:00
parent 7adb698b21
commit 97618193c6
7 changed files with 84 additions and 144 deletions

View File

@ -7,7 +7,7 @@ use Exporter;
use lockapi; use lockapi;
use testapi; use testapi;
our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader boot_decrypt check_release menu_launch_type repo_setup setup_workaround_repo disable_updates_repos cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop download_modularity_tests quit_firefox advisory_get_installed_packages advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable/; our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader boot_decrypt check_release menu_launch_type repo_setup setup_workaround_repo disable_updates_repos mount_update_image umount_update_image cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop download_modularity_tests quit_firefox advisory_get_installed_packages advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable/;
# We introduce this global variable to hold the list of applications that have # We introduce this global variable to hold the list of applications that have
# registered during the apps_startstop_test when they have sucessfully run. # registered during the apps_startstop_test when they have sucessfully run.
@ -445,61 +445,56 @@ sub repos_mirrorlist {
assert_script_run "sed -i -e 's,metalink,mirrorlist,g' ${files}"; assert_script_run "sed -i -e 's,metalink,mirrorlist,g' ${files}";
} }
sub mount_update_image {
# mount the update and workarounds images (whichever are attached)
if (get_var("ISO_2") && script_run "grep updateiso /proc/mounts") {
script_run "mkdir -p /mnt/updateiso";
my $devnode = "/dev/sr0";
$devnode = "/dev/sr1" if (get_var("ISO") || get_var("ISO_1"));
assert_script_run 'echo "' . $devnode . ' /mnt/updateiso iso9660 loop 0 0" >> /etc/fstab';
assert_script_run "mount /mnt/updateiso";
}
if (get_var("ISO_3") && script_run "grep workaroundsiso /proc/mounts") {
script_run "mkdir -p /mnt/workaroundsiso";
my $devnum = 0;
$devnum++ if (get_var("ISO") || get_var("ISO_1"));
$devnum++ if (get_var("ISO_2"));
my $devnode = "/dev/sr${devnum}";
assert_script_run 'echo "' . $devnode . ' /mnt/workaroundsiso iso9660 loop 0 0" >> /etc/fstab';
assert_script_run "mount /mnt/workaroundsiso";
}
}
sub umount_update_image {
# inverse of mount_update_image
assert_script_run "sed -i '/updateiso/d' /etc/fstab";
assert_script_run "sed -i '/workaroundsiso/d' /etc/fstab" if (get_var("ISO_3"));
assert_script_run "umount /mnt/updateiso" unless (script_run "grep updateiso /proc/mounts");
assert_script_run "umount /mnt/workaroundsiso" unless (!get_var("ISO_3") || script_run "grep workaroundsiso /proc/mounts");
}
sub cleanup_workaround_repo { sub cleanup_workaround_repo {
# clean up the workaround repo (see next). # clean up the workaround repo (see next).
script_run "rm -rf /mnt/workarounds_repo";
script_run "rm -f /etc/yum.repos.d/workarounds.repo"; script_run "rm -f /etc/yum.repos.d/workarounds.repo";
} }
sub setup_workaround_repo { sub setup_workaround_repo {
# we periodically need to pull an update from updates-testing in # we periodically need to pull an update from updates-testing in
# to fix some bug or other. so, here's an organized way to do it. # to fix some bug or other. so, here's an organized way to do it.
# we do this here so the workaround packages are in the repo data # the code that builds the image, and the workaround lists, are
# but *not* in the package lists generated above (those should # in fedora_openqa schedule.py. If there are no workarounds, we
# only include packages from the update under test). we'll define # don't get an ISO
# a hash of releases and update IDs. if no workarounds are needed return unless (get_var("ISO_3"));
# for any release, the hash can be empty and this will do nothing
my $version = shift || get_var("VERSION"); my $version = shift || get_var("VERSION");
cleanup_workaround_repo; cleanup_workaround_repo;
script_run "dnf -y install bodhi-client createrepo_c koji", 300; mount_update_image;
# write a repo config file, unless this is the support_server test # write a repo config file, unless this is the support_server test
# and it is running on a different release than the update is for # and it is running on a different release than the update is for
# (in this case we need the repo to exist but do not want to use # (in this case we need the repo to exist but do not want to use
# it on the actual support_server system) # it on the actual support_server system)
unless (get_var("TEST") eq "support_server" && $version ne get_var("CURRREL")) { unless (get_var("TEST") eq "support_server" && $version ne get_var("CURRREL")) {
assert_script_run 'printf "[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workarounds_repo\nenabled=1\nmetadata_expire=1\ngpgcheck=0" > /etc/yum.repos.d/workarounds.repo'; assert_script_run 'printf "[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workaroundsiso/workarounds_repo\nenabled=1\nmetadata_expire=1\ngpgcheck=0" > /etc/yum.repos.d/workarounds.repo';
} }
assert_script_run "mkdir -p /mnt/workarounds_repo";
assert_script_run "pushd /mnt/workarounds_repo";
my %workarounds = (
"37" => [],
"38" => [],
"39" => [],
);
# then we'll download each update for our release:
my $advortasks = $workarounds{$version};
foreach my $advortask (@$advortasks) {
my $cmd = "bodhi updates download --updateid=$advortask";
if ($advortask =~ /^\d+$/) {
my $arch = get_var("ARCH");
$cmd = "koji download-task --arch=$arch --arch=noarch $advortask";
}
my $count = 3;
my $success = 0;
while ($count) {
if (script_run $cmd, 600) {
$count -= 1;
}
else {
$count = 0;
$success = 1;
}
}
die "Workaround update download failed!" unless $success;
}
# and create repo metadata
assert_script_run "createrepo .";
assert_script_run "popd";
} }
sub disable_updates_repos { sub disable_updates_repos {
@ -547,7 +542,10 @@ sub _repo_setup_compose {
sub _repo_setup_updates { sub _repo_setup_updates {
# Appropriate repo setup steps for testing a Bodhi update # Appropriate repo setup steps for testing a Bodhi update
# Check if we already ran, bail if so # Check if we already ran, bail if so
return unless script_run "test -f /mnt/updatepkgs.txt"; return unless script_run "test -f /root/.oqarsurun";
# sanity check
die "_repo_setup_updates called, but ISO_2 is not attached!" unless (get_var("ISO_2"));
mount_update_image;
my $version = get_var("VERSION"); my $version = get_var("VERSION");
my $currrel = get_var("CURRREL", "0"); my $currrel = get_var("CURRREL", "0");
my $arch = get_var("ARCH"); my $arch = get_var("ARCH");
@ -562,19 +560,6 @@ sub _repo_setup_updates {
# installed by one of the tests; by setting up a repo containing the # installed by one of the tests; by setting up a repo containing the
# update and enabling it here, we ensure all later 'dnf install' calls # update and enabling it here, we ensure all later 'dnf install' calls
# will get the packages from the update. # will get the packages from the update.
assert_script_run "mkdir -p /mnt/update_repo";
# if NUMDISKS is above 1, assume we want to put the update repo on
# the other disk (to avoid huge updates exhausting space on the main
# disk)
if (get_var("NUMDISKS") > 1) {
# I think the disk will always be vdb. This creates a single large
# partition.
assert_script_run "echo 'type=83' | sfdisk /dev/vdb";
assert_script_run "mkfs.ext4 /dev/vdb1";
assert_script_run "echo '/dev/vdb1 /mnt/update_repo ext4 defaults 1 2' >> /etc/fstab";
assert_script_run "mount /mnt/update_repo";
}
assert_script_run "cd /mnt/update_repo";
# on CANNED, we need to enter the toolbox at this point # on CANNED, we need to enter the toolbox at this point
if (get_var("CANNED")) { if (get_var("CANNED")) {
type_string "toolbox -y enter\n"; type_string "toolbox -y enter\n";
@ -592,81 +577,14 @@ sub _repo_setup_updates {
} }
# set up the workaround repo # set up the workaround repo
setup_workaround_repo; setup_workaround_repo;
if (get_var("CANNED")) { upload_logs "/mnt/updateiso/updatepkgnames.txt";
# install and use en_US.UTF-8 locale for consistent sort upload_logs "/mnt/updateiso/updatepkgs.txt";
# ordering
assert_script_run "dnf -y install glibc-langpack-en", 300;
assert_script_run "export LC_ALL=en_US.UTF-8";
}
script_run "dnf -y install bodhi-client createrepo_c koji", 300;
# download the packages
if (get_var("ADVISORY_NVRS") || get_var("ADVISORY_NVRS_1")) {
# regular update case
# old style single ADVISORY_NVRS var
my @nvrs = split(/ /, get_var("ADVISORY_NVRS"));
unless (@nvrs) {
# new style chunked ADVISORY_NVRS_N vars
my $count = 1;
while ($count) {
if (get_var("ADVISORY_NVRS_$count")) {
push @nvrs, split(/ /, get_var("ADVISORY_NVRS_$count"));
$count++;
}
else {
$count = 0;
}
}
}
foreach my $nvr (@nvrs) {
my $kojitime = 600;
# texlive has a ridiculous number of subpackages
$kojitime = 1500 if ((rindex $nvr, "texlive", 0) == 0);
if (script_run "koji download-build --arch=$arch --arch=noarch $nvr 2> download.log", $kojitime) {
# if the error was because the build has no packages
# for our arch, that's okay, skip it. otherwise, die
if (script_run "grep 'No .*available for $nvr' download.log") {
die "koji download-build failed!";
}
}
}
}
elsif (get_var("KOJITASK")) {
# Koji task case (KOJITASK will be set)
assert_script_run "koji download-task --arch=$arch --arch=noarch " . get_var("KOJITASK"), 600;
}
else {
die "Neither ADVISORY_NVRS nor KOJITASK set! Don't know what to do";
}
if (script_run 'ls *.rpm') {
# we didn't actually download any packages (as they are all
# for an arch we don't test), so write dummy files
assert_script_run 'touch /mnt/updatepkgnames.txt /mnt/updatepkgs.txt';
}
else {
# log the exact packages in the update at test time, with their
# source packages and epochs. we use /mnt as the path for this
# and similar files because, on ostree-based installs where we
# have to use a toolbox container for part of this, it's common
# to the host system and container
assert_script_run 'rpm -qp *.rpm --qf "%{SOURCERPM} %{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE}\n" | sort -u > /mnt/updatepkgs.txt';
# also log just the binary package names: this is so we can check
# later whether any package from the update *should* have been
# installed, but was not
assert_script_run 'rpm -qp *.rpm --qf "%{NAME} " > /mnt/updatepkgnames.txt';
}
upload_logs "/mnt/updatepkgnames.txt";
upload_logs "/mnt/updatepkgs.txt";
# create the repo metadata
assert_script_run "createrepo .", timeout => 180;
# write a repo config file, unless this is the support_server test # write a repo config file, unless this is the support_server test
# and it is running on a different release than the update is for # and it is running on a different release than the update is for
# (in this case we need the repo to exist but do not want to use # (in this case we need the repo to exist but do not want to use
# it on the actual support_server system) # it on the actual support_server system)
unless (get_var("TEST") eq "support_server" && $version ne get_var("CURRREL")) { unless (get_var("TEST") eq "support_server" && $version ne get_var("CURRREL")) {
assert_script_run 'printf "[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0" > /etc/yum.repos.d/advisory.repo'; assert_script_run 'printf "[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/updateiso/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0" > /etc/yum.repos.d/advisory.repo';
# run an update now, except for upgrade or install tests, # run an update now, except for upgrade or install tests,
# where the updated packages should have been installed # where the updated packages should have been installed
# already and we want to fail if they weren't, or CANNED # already and we want to fail if they weren't, or CANNED
@ -683,6 +601,7 @@ sub _repo_setup_updates {
type_string "exit\n"; type_string "exit\n";
wait_still_screen 5; wait_still_screen 5;
} }
assert_script_run "touch /root/.oqarsurun";
} }
sub repo_setup { sub repo_setup {
@ -1092,18 +1011,21 @@ sub quit_with_shortcut {
# are currently installed. This is here so we can do it both in # are currently installed. This is here so we can do it both in
# _advisory_post and post_fail_hook. # _advisory_post and post_fail_hook.
sub advisory_get_installed_packages { sub advisory_get_installed_packages {
# sanity check
die "advisory_get_installed_packages, but ISO_2 is not attached!" unless (get_var("ISO_2"));
mount_update_image;
# bail out if the file doesn't exist: this is in case we get # 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 # here in the post-fail hook but we failed before creating it
return if script_run "test -f /mnt/updatepkgs.txt"; return if script_run "test -f /mnt/updateiso/updatepkgs.txt";
assert_script_run 'rpm -qa --qf "%{SOURCERPM} %{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE}\n" | sort -u > /tmp/allpkgs.txt', timeout => 90; assert_script_run 'rpm -qa --qf "%{SOURCERPM} %{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE}\n" | sort -u > /tmp/allpkgs.txt', timeout => 90;
# this finds lines which appear in both files # this finds lines which appear in both files
# http://www.unix.com/unix-for-dummies-questions-and-answers/34549-find-matching-lines-between-2-files.html # http://www.unix.com/unix-for-dummies-questions-and-answers/34549-find-matching-lines-between-2-files.html
if (script_run 'comm -12 /tmp/allpkgs.txt /mnt/updatepkgs.txt > /mnt/testedpkgs.txt') { if (script_run 'comm -12 /tmp/allpkgs.txt /mnt/updateiso/updatepkgs.txt > /mnt/testedpkgs.txt') {
# occasionally, for some reason, it's unhappy about sorting; # occasionally, for some reason, it's unhappy about sorting;
# we shouldn't fail the test in this case, just upload the # we shouldn't fail the test in this case, just upload the
# files so we can see why... # files so we can see why...
upload_logs "/tmp/allpkgs.txt", failok => 1; upload_logs "/tmp/allpkgs.txt", failok => 1;
upload_logs "/mnt/updatepkgs.txt", failok => 1; upload_logs "/mnt/updateiso/updatepkgs.txt", failok => 1;
} }
# we'll try and upload the output even if comm 'failed', as it # we'll try and upload the output even if comm 'failed', as it
# does in fact still write it in some cases # does in fact still write it in some cases
@ -1120,16 +1042,19 @@ sub advisory_check_nonmatching_packages {
fatal => 1, fatal => 1,
@_ @_
); );
# sanity check
die "advisory_check_nonmatching_packages called, but ISO_2 is not attached!" unless (get_var("ISO_2"));
mount_update_image;
# bail out if the file doesn't exist: this is in case we get # 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 # here in the post-fail hook but we failed before creating it
return if script_run "test -f /mnt/updatepkgnames.txt"; return if script_run "test -f /mnt/updateiso/updatepkgnames.txt";
# if this fails in advisory_post, we don't want to do it *again* # if this fails in advisory_post, we don't want to do it *again*
# unnecessarily in post_fail_hook # unnecessarily in post_fail_hook
return if (get_var("_ACNMP_DONE")); return if (get_var("_ACNMP_DONE"));
script_run 'touch /tmp/installedupdatepkgs.txt'; script_run 'touch /tmp/installedupdatepkgs.txt';
# this creates /tmp/installedupdatepkgs.txt as a sorted list of installed # 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 # 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 # as /mnt/updateiso/updatepkgs.txt. The '--last | head -1' tries to handle the
# problem of installonly packages like the kernel, where we wind up with # problem of installonly packages like the kernel, where we wind up with
# *multiple* versions installed after the update; the first line of output # *multiple* versions installed after the update; the first line of output
# for any given package with --last is the most recent version, i.e. the # for any given package with --last is the most recent version, i.e. the
@ -1140,15 +1065,15 @@ sub advisory_check_nonmatching_packages {
# (we need four to reach bash, and half of them get eaten by perl or # (we need four to reach bash, and half of them get eaten by perl or
# something along the way). Yes, it only works with *single* quotes. Yes, # something along the way). Yes, it only works with *single* quotes. Yes,
# I hate escaping # I hate escaping
script_run 'for pkg in $(cat /mnt/updatepkgnames.txt); do rpm -q $pkg && rpm -q $pkg --last | head -1 | cut -d" " -f1 | sed -e \'s,\^,\\\\\\\\^,g\' | xargs rpm -q --qf "%{SOURCERPM} %{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE}\n" >> /tmp/installedupdatepkgs.txt; done', timeout => 180; script_run 'for pkg in $(cat /mnt/updateiso/updatepkgnames.txt); do rpm -q $pkg && rpm -q $pkg --last | head -1 | cut -d" " -f1 | sed -e \'s,\^,\\\\\\\\^,g\' | xargs rpm -q --qf "%{SOURCERPM} %{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE}\n" >> /tmp/installedupdatepkgs.txt; done', timeout => 180;
script_run 'sort -u -o /tmp/installedupdatepkgs.txt /tmp/installedupdatepkgs.txt'; script_run 'sort -u -o /tmp/installedupdatepkgs.txt /tmp/installedupdatepkgs.txt';
# for debugging, may as well always upload these, can't hurt anything # for debugging, may as well always upload these, can't hurt anything
upload_logs "/tmp/installedupdatepkgs.txt", failok => 1; upload_logs "/tmp/installedupdatepkgs.txt", failok => 1;
upload_logs "/mnt/updatepkgs.txt", failok => 1; upload_logs "/mnt/updateiso/updatepkgs.txt", failok => 1;
# download the check script and run it # download the check script and run it
assert_script_run 'curl -o updvercheck.py https://pagure.io/fedora-qa/os-autoinst-distri-fedora/raw/main/f/updvercheck.py', timeout => 120; assert_script_run 'curl -o updvercheck.py https://pagure.io/fedora-qa/os-autoinst-distri-fedora/raw/main/f/updvercheck.py', timeout => 120;
my $advisory = get_var("ADVISORY"); my $advisory = get_var("ADVISORY");
my $cmd = 'python3 ./updvercheck.py /mnt/updatepkgs.txt /tmp/installedupdatepkgs.txt'; my $cmd = 'python3 ./updvercheck.py /mnt/updateiso/updatepkgs.txt /tmp/installedupdatepkgs.txt';
$cmd .= " $advisory" if ($advisory); $cmd .= " $advisory" if ($advisory);
my $ret = script_run $cmd; my $ret = script_run $cmd;
# 2 is warnings only, 3 is problems, 1 means the script died in # 2 is warnings only, 3 is problems, 1 means the script died in

View File

@ -382,7 +382,7 @@
}, },
"settings": { "settings": {
"+START_AFTER_TEST": "installer_build@%ARCH_BASE_MACHINE%", "+START_AFTER_TEST": "installer_build@%ARCH_BASE_MACHINE%",
"ADD_REPOSITORY_VARIATION": "nfs://172.16.2.110:/mnt/update_repo", "ADD_REPOSITORY_VARIATION": "nfs://172.16.2.110:/mnt/updateiso/update_repo",
"INSTALL": "1", "INSTALL": "1",
"INSTALL_UNLOCK": "support_ready", "INSTALL_UNLOCK": "support_ready",
"ISO": "%ADVISORY_OR_TASK%-netinst-%ARCH%.iso", "ISO": "%ADVISORY_OR_TASK%-netinst-%ARCH%.iso",

View File

@ -1,6 +1,7 @@
use base "installedtest"; use base "installedtest";
use strict; use strict;
use testapi; use testapi;
use utils;
sub run { sub run {
my $self = shift; my $self = shift;
@ -15,6 +16,9 @@ sub run {
# tests that need to edit boot params will see it. Don't use # tests that need to edit boot params will see it. Don't use
# assert_script_run as this will fail when it's not set # assert_script_run as this will fail when it's not set
script_run("grub2-editenv - unset menu_auto_hide", 0); script_run("grub2-editenv - unset menu_auto_hide", 0);
# similarly, drop the updateiso/workaroundsiso edits to /etc/fstab
# in case the drive is enumerated differently on a follow-up test
umount_update_image if (get_var("ISO_2") || get_var("ISO_3"));
script_run("poweroff", 0); script_run("poweroff", 0);
assert_shutdown 180; assert_shutdown 180;
} }

View File

@ -11,6 +11,8 @@ sub run {
my $repo = $version eq $rawrel ? "fedora-rawhide.repo" : "fedora.repo"; my $repo = $version eq $rawrel ? "fedora-rawhide.repo" : "fedora.repo";
my $advortask = get_var("ADVISORY_OR_TASK"); my $advortask = get_var("ADVISORY_OR_TASK");
my $arch = get_var("ARCH"); my $arch = get_var("ARCH");
# we need the update repo mounted to use it in image creation
mount_update_image;
assert_script_run "dnf -y install lorax", 90; assert_script_run "dnf -y install lorax", 90;
# this 'temporary file cleanup' thing can actually wipe bits of # this 'temporary file cleanup' thing can actually wipe bits of
# the lorax install root while lorax is still running... # the lorax install root while lorax is still running...
@ -23,7 +25,8 @@ sub run {
unless ($version > $currrel) { unless ($version > $currrel) {
$cmd .= " --isfinal --repo=/etc/yum.repos.d/fedora-updates.repo"; $cmd .= " --isfinal --repo=/etc/yum.repos.d/fedora-updates.repo";
} }
$cmd .= " --repo=/etc/yum.repos.d/advisory.repo --repo=/etc/yum.repos.d/workarounds.repo"; $cmd .= " --repo=/etc/yum.repos.d/advisory.repo";
$cmd .= " --repo=/etc/yum.repos.d/workarounds.repo" if (get_var("ISO_3"));
$cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel); $cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel);
$cmd .= " ./results"; $cmd .= " ./results";
assert_script_run $cmd, 2400; assert_script_run $cmd, 2400;

View File

@ -24,6 +24,8 @@ sub run {
my $arch = get_var("ARCH"); my $arch = get_var("ARCH");
my $subv = get_var("SUBVARIANT"); my $subv = get_var("SUBVARIANT");
my $lcsubv = lc($subv); my $lcsubv = lc($subv);
# we need the update repo mounted to use it in image creation
mount_update_image;
if (get_var("NUMDISKS") > 2) { if (get_var("NUMDISKS") > 2) {
# put /var/lib/mock on the third disk, so we don't run out of # put /var/lib/mock on the third disk, so we don't run out of
# space on the main disk. The second disk will have already # space on the main disk. The second disk will have already
@ -40,11 +42,13 @@ sub run {
assert_script_run "echo \"include('/etc/mock/fedora-${version}-${arch}.cfg')\" > /etc/mock/openqa.cfg"; assert_script_run "echo \"include('/etc/mock/fedora-${version}-${arch}.cfg')\" > /etc/mock/openqa.cfg";
# make the side and workarounds repos and the serial device available inside the mock root # 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_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'; assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/updateiso/update_repo\', \'/mnt/updateiso/update_repo\'))" >> /etc/mock/openqa.cfg';
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/workarounds_repo\', \'/mnt/workarounds_repo\'))" >> /etc/mock/openqa.cfg'; assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/mnt/updateiso/workarounds_repo\', \'/mnt/updateiso/workarounds_repo\'))" >> /etc/mock/openqa.cfg' if (get_var("ISO_3"));
assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/dev/' . $serialdev . '\', \'/dev/' . $serialdev . '\'))" >> /etc/mock/openqa.cfg'; assert_script_run 'echo "config_opts[\'plugin_conf\'][\'bind_mount_opts\'][\'dirs\'].append((\'/dev/' . $serialdev . '\', \'/dev/' . $serialdev . '\'))" >> /etc/mock/openqa.cfg';
# add the side repo and workarounds to the config # add the side repo to the config
my $repos = 'config_opts[\'dnf.conf\'] += \"\"\"\n[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n\n[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/workarounds_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n'; my $repos = 'config_opts[\'dnf.conf\'] += \"\"\"\n[advisory]\nname=Advisory repo\nbaseurl=file:///mnt/updateiso/update_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n';
# and the workaround repo if present
$repos .= '\n[workarounds]\nname=Workarounds repo\nbaseurl=file:///mnt/updateiso/workarounds_repo\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n' if (get_var("ISO_3"));
# also the buildroot repo, for Rawhide # also the buildroot repo, for Rawhide
if ($version eq $rawrel) { if ($version eq $rawrel) {
$repos .= '\n[koji-rawhide]\nname=Buildroot repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/\$basearch/\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n'; $repos .= '\n[koji-rawhide]\nname=Buildroot repo\nbaseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/\$basearch/\nenabled=1\nmetadata_expire=3600\ngpgcheck=0\n';
@ -60,9 +64,9 @@ sub run {
assert_script_run 'cd fedora-kickstarts'; assert_script_run 'cd fedora-kickstarts';
assert_script_run "git checkout ${branch}"; assert_script_run "git checkout ${branch}";
# now add the side repo to the appropriate repo ks # now add the side repo to the appropriate repo ks
assert_script_run 'echo "repo --name=advisory --baseurl=file:///mnt/update_repo" >> ' . $repoks; assert_script_run 'echo "repo --name=advisory --baseurl=file:///mnt/updateiso/update_repo" >> ' . $repoks;
# and the workarounds repo # and the workarounds repo
assert_script_run 'echo "repo --name=workarounds --baseurl=file:///mnt/workarounds_repo" >> ' . $repoks; assert_script_run 'echo "repo --name=workarounds --baseurl=file:///mnt/updateiso/workarounds_repo" >> ' . $repoks if (get_var("ISO_3"));
# and the buildroot repo, for Rawhide # and the buildroot repo, for Rawhide
if ($version eq $rawrel) { if ($version eq $rawrel) {
assert_script_run 'echo "repo --name=koji-rawhide --baseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/\$basearch/" >> ' . $repoks; assert_script_run 'echo "repo --name=koji-rawhide --baseurl=https://kojipkgs.fedoraproject.org/repos/rawhide/latest/\$basearch/" >> ' . $repoks;

View File

@ -23,6 +23,8 @@ sub run {
my $arch = get_var("ARCH"); my $arch = get_var("ARCH");
my $subv = get_var("SUBVARIANT"); my $subv = get_var("SUBVARIANT");
my $lcsubv = lc($subv); my $lcsubv = lc($subv);
# we need the update repo mounted to use it in image creation
mount_update_image;
# mount our nice big empty scratch disk as /var/tmp # mount our nice big empty scratch disk as /var/tmp
assert_script_run "rm -rf /var/tmp/*"; assert_script_run "rm -rf /var/tmp/*";
assert_script_run "echo 'type=83' | sfdisk /dev/vdc"; assert_script_run "echo 'type=83' | sfdisk /dev/vdc";
@ -40,10 +42,11 @@ sub run {
assert_script_run "git checkout ${branch}"; assert_script_run "git checkout ${branch}";
# now copy the advisory, workaround repo and koji-rawhide config files # now copy the advisory, workaround repo and koji-rawhide config files
assert_script_run 'cp /etc/yum.repos.d/advisory.repo .'; assert_script_run 'cp /etc/yum.repos.d/advisory.repo .';
assert_script_run 'cp /etc/yum.repos.d/workarounds.repo .'; assert_script_run 'cp /etc/yum.repos.d/workarounds.repo .' if (get_var("ISO_3"));
assert_script_run 'cp /etc/yum.repos.d/koji-rawhide.repo .' if ($version eq $rawrel); assert_script_run 'cp /etc/yum.repos.d/koji-rawhide.repo .' if ($version eq $rawrel);
# and add them to the config file # and add them to the config file
my $repl = 'repos:\n - advisory\n - workarounds'; my $repl = 'repos:\n - advisory';
$repl .= '\n - workarounds' if (get_var("ISO_3"));
$repl .= '\n - koji-rawhide' if ($version eq $rawrel); $repl .= '\n - koji-rawhide' if ($version eq $rawrel);
assert_script_run 'sed -i -e "s,repos:,' . $repl . ',g" fedora-' . $lcsubv . '.yaml'; assert_script_run 'sed -i -e "s,repos:,' . $repl . ',g" fedora-' . $lcsubv . '.yaml';
# change the ref name to a custom one (so we can test rebasing to # change the ref name to a custom one (so we can test rebasing to
@ -91,7 +94,8 @@ sub run {
unless ($version > $currrel) { unless ($version > $currrel) {
$cmd .= " --isfinal --repo=/etc/yum.repos.d/fedora-updates.repo"; $cmd .= " --isfinal --repo=/etc/yum.repos.d/fedora-updates.repo";
} }
$cmd .= " --repo=/etc/yum.repos.d/advisory.repo --repo=/etc/yum.repos.d/workarounds.repo"; $cmd .= " --repo=/etc/yum.repos.d/advisory.repo";
$cmd .= " --repo=/etc/yum.repos.d/workarounds.repo" if (get_var("ISO_3"));
$cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel); $cmd .= " --repo=/etc/yum.repos.d/koji-rawhide.repo" if ($version eq $rawrel);
$cmd .= " ./results"; $cmd .= " ./results";
assert_script_run $cmd, 7000; assert_script_run $cmd, 7000;

View File

@ -135,7 +135,7 @@ sub run {
assert_script_run "curl -o /export/root-user-crypted-net.ks https://fedorapeople.org/groups/qa/kickstarts/root-user-crypted-net.ks"; 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 # for update tests, set up the update repository and export it
if (get_var("ADVISORY_OR_TASK")) { if (get_var("ADVISORY_OR_TASK")) {
assert_script_run "echo '/mnt/update_repo 172.16.2.0/24(ro)' >> /etc/exports"; assert_script_run "echo '/mnt/updateiso/update_repo 172.16.2.0/24(ro)' >> /etc/exports";
} }
# for compose tests, we do all this stuff # for compose tests, we do all this stuff
else { else {