From ed3455a51b0f82fd0970d44df2b09e038eecfbf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Fri, 4 Sep 2026 15:22:30 -0300 Subject: [PATCH] test(genesis): cover version 1 publication --- t/common-repo-gate.t | 30 ++++++++++++++++++++++++++-- t/genesis_openembedded_consumer.t | 33 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/t/common-repo-gate.t b/t/common-repo-gate.t index dca440e..e05e015 100644 --- a/t/common-repo-gate.t +++ b/t/common-repo-gate.t @@ -64,6 +64,22 @@ my $RELEASE = build_package_release( revision => $xcat_revision, epoch => $source_date_epoch, ); +my @version_1_architectures = grep { $_ ne 's390x' } @architectures; +my $VERSION_1_RELEASE = build_package_release( + root => "$tmp/version-1-release-fixture", + format => 'rpm', + architectures => \@version_1_architectures, + packager => $PACKAGER, + version => $xcat_version, + release => $xcat_release, + revision => $xcat_revision, + epoch => $source_date_epoch, +); +write_release_manifest( + $VERSION_1_RELEASE, $xcat_version, $xcat_release, $xcat_revision, + $source_date_epoch, join(',', @version_1_architectures), 'rpm', 1, +); +write_checksums($VERSION_1_RELEASE); # The shipped manifest must describe the shared repo, else nothing can gate it. { @@ -155,10 +171,20 @@ sub run_publish { like($out, qr/\[verify-repo\] common complete/, 'the shared repo is gated against [common]'); } +{ + my ($rc, $out, $common) = run_publish($VERSION_1_RELEASE, 'version-1'); + is($rc, 0, 'a complete version 1 release publishes') or diag($out); + is(scalar(grep { !/\.src\.rpm$/ } glob("$common/*.rpm")), + scalar(@version_1_architectures), + 'the version 1 repository keeps its seven architectures'); + ok(!glob("$common/" . rpm_package_name('s390x') . '-*.rpm'), + 'the version 1 repository does not require s390x'); +} + # ---- an incomplete release is refused, and publishes nothing -------------------------------------- { my $partial = "$tmp/partial-release"; - my $missing_architecture = $architectures[-1]; + my $missing_architecture = 's390x'; my $missing_package = rpm_package_name($missing_architecture); my @partial_architectures = grep { $_ ne $missing_architecture } @architectures; make_path("$partial/rpm", "$partial/srpm"); @@ -183,7 +209,7 @@ sub run_publish { { my $inconsistent = "$tmp/inconsistent-release"; - my $missing_package = rpm_package_name($architectures[-1]); + my $missing_package = rpm_package_name('s390x'); copy_tree($RELEASE, $inconsistent); for my $directory (qw(rpm srpm)) { my @packages = glob("$inconsistent/$directory/$missing_package-*"); diff --git a/t/genesis_openembedded_consumer.t b/t/genesis_openembedded_consumer.t index d07c5c8..aeec525 100644 --- a/t/genesis_openembedded_consumer.t +++ b/t/genesis_openembedded_consumer.t @@ -29,7 +29,9 @@ use XCAT::GenesisRelease qw( use XCAT::GenesisReleaseTest qw( build_package_release run_capture + write_checksums write_forkmanager_stub + write_release_manifest ); my $repo_root = abs_path("$FindBin::Bin/.."); @@ -73,11 +75,12 @@ SKIP: { } SKIP: { - skip 'APT repository tools are not installed', 59 + skip 'APT repository tools are not installed', 62 unless $^O eq 'linux' && command_exists('dpkg-deb') && command_exists('apt-ftparchive'); test_deb_consumer(); + test_version_1_deb_consumer(); test_legacy_deb_consumer(); test_partial_deb_release(); test_publish_lock(); @@ -524,6 +527,34 @@ sub test_deb_consumer { 'pooled package still matches the verified release'); } +sub test_version_1_deb_consumer { + my @release_architectures = grep { $_ ne 's390x' } architectures(); + my $release_root = make_package_release( + "$tmp/deb-version-1", 'deb', @release_architectures, + ); + write_release_manifest( + $release_root, $version, $release, $revision, $epoch, + join(',', @release_architectures), 'deb', 1, + ); + write_checksums($release_root); + + my $apt_root = "$tmp/apt-version-1"; + my $output = "$tmp/deb-version-1-output"; + stage_apt_suites($output, "$tmp/deb-version-1-legacy"); + my $log = "$tmp/deb-version-1.log"; + my $status = run_apt_consumer( + log => $log, output => $output, apt_dir => $apt_root, + extra => [ '--genesis-release', $release_root ], + ); + my $pool = "$apt_root/pool/main/xcat-genesis-openembedded"; + + is($status, 0, 'APT accepts a complete version 1 release'); + is(scalar(genesis_deb_names($pool)), scalar(@release_architectures), + 'the version 1 pool keeps its seven architectures'); + is(scalar(grep { /s390x/ } genesis_deb_names($pool)), 0, + 'the version 1 pool does not require s390x'); +} + sub test_signed_common_rpm_repository { my $release_root = make_package_release("$tmp/rpm-signed", 'rpm'); my $package = "xCAT-genesis-openembedded-x86_64-$version-$release.noarch.rpm";