From 09e068419bab826018ea16acb95855c92efa5705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Ferr=C3=A3o?= <2031761+viniciusferrao@users.noreply.github.com> Date: Sun, 6 Sep 2026 11:15:33 -0300 Subject: [PATCH] test(genesis): cover release capability ordering --- t/genesis_openembedded_consumer.t | 2 +- t/genesis_openembedded_release.t | 62 ++++++++++++++++++++++++------- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/t/genesis_openembedded_consumer.t b/t/genesis_openembedded_consumer.t index 0ba1beb..0eb8126 100644 --- a/t/genesis_openembedded_consumer.t +++ b/t/genesis_openembedded_consumer.t @@ -58,7 +58,7 @@ if ($ENV{XCAT_GENESIS_CI}) { } SKIP: { - skip 'RPM repository tools require a root Linux builder', 65 + skip 'RPM repository tools require a root Linux builder', 64 unless $^O eq 'linux' && $> == 0 && command_exists('rpmbuild') diff --git a/t/genesis_openembedded_release.t b/t/genesis_openembedded_release.t index 324934b..bde5201 100644 --- a/t/genesis_openembedded_release.t +++ b/t/genesis_openembedded_release.t @@ -11,6 +11,7 @@ use Test::More; use lib "$FindBin::Bin/../lib"; use lib "$FindBin::Bin/lib"; use XCAT::BuildUtils qw( + capture_command command_exists digest_file read_binary @@ -19,6 +20,7 @@ use XCAT::BuildUtils qw( use XCAT::GenesisRelease qw( architectures deb_package_name + minimum_release_version rpm_package_name validated_release_checksums validate_architecture @@ -60,6 +62,12 @@ is(rpm_package_name('ppc64le'), 'xCAT-genesis-openembedded-ppc64le', 'RPM package keeps ppc64le distinct'); is(deb_package_name('x86_64'), 'xcat-genesis-openembedded-x86-64', 'DEB package uses a legal spelling of x86_64'); +is(minimum_release_version('x86_64'), 1, + 'legacy architectures use release format version 1'); +is(minimum_release_version('x86_64', 's390x'), 2, + 's390x requires release format version 2'); +dies_like(sub { minimum_release_version() }, qr/requires a Genesis architecture/, + 'release format selection requires an architecture'); dies_like(sub { validate_architecture('ppc') }, qr/Unsupported Genesis architecture/, 'legacy ppc alias is rejected'); @@ -276,7 +284,7 @@ dies_like(sub { validate_release($missing_release) }, qr/Genesis release is miss 'incomplete architecture set fails'); SKIP: { - skip 'git is not installed', 9 unless command_exists('git'); + skip 'git is not installed', 13 unless command_exists('git'); my $source = "$tmp/dirty-xcat-core"; my $oe = "$source/xCAT-genesis-builder/oe"; my $capability_marker = "$tmp/capability-query-ran"; @@ -305,10 +313,11 @@ SKIP: { die "Cannot prepare test repository\n" if run_capture("$tmp/git-fixture.log", @{$command}); } + my $previous_revision = capture_command('git', '-C', $source, 'rev-parse', 'HEAD'); my $commit_source = sub { - my ($message) = @_; + my ($path, $message) = @_; for my $command ( - [ 'git', '-C', $source, 'add', 'xCAT-genesis-builder/oe/build' ], + [ 'git', '-C', $source, 'add', $path ], [ 'git', '-C', $source, '-c', 'user.name=xCAT test', '-c', 'user.email=xcat-test@example.invalid', 'commit', '-qm', $message ], ) { @@ -336,22 +345,47 @@ SKIP: { 'dirty source is rejected before its architecture helper runs'); unlink("$source/untracked") or die "Cannot clean the source fixture: $!\n"; + write_binary("$source/revision-marker", "new revision\n"); + $commit_source->('revision-marker', 'advance source revision'); + my $ref_log = "$tmp/ref-mismatch.log"; + { + local $ENV{XCAT_TEST_CAPABILITY_MARKER} = $capability_marker; + isnt( + run_capture( + $ref_log, $builder, '--xcat-source', $source, + '--xcat-ref', $previous_revision, + '--architecture', 's390x', + '--output-dir', "$tmp/ref-mismatch-output", + ), + 0, + 'release builder rejects a mismatched xcat-core revision', + ); + } + like(read_binary($ref_log), qr/xcat-core HEAD .* does not match \Q$previous_revision\E/, + 'revision mismatch failure is explicit'); + ok(!-e $capability_marker, + 'revision mismatch is rejected before the architecture helper runs'); + my $target_log = "$tmp/missing-target.log"; - isnt( - run_capture( - $target_log, $builder, '--xcat-source', $source, - '--architecture', 's390x', - '--output-dir', "$tmp/missing-target-output", - ), - 0, - 'release builder rejects an unsupported xcat-core target', - ); + { + local $ENV{XCAT_TEST_CAPABILITY_MARKER} = $capability_marker; + isnt( + run_capture( + $target_log, $builder, '--xcat-source', $source, + '--architecture', 's390x', + '--output-dir', "$tmp/missing-target-output", + ), + 0, + 'release builder rejects an unsupported xcat-core target', + ); + } like(read_binary($target_log), qr/does not support Genesis architecture s390x/, 'missing target failure identifies the required xcat-core support'); + ok(-e $capability_marker, 'the architecture helper records a successful query'); write_binary("$oe/build", "#!/bin/sh\nexit 23\n"); chmod(0755, "$oe/build") or die "Cannot update fixture build executable: $!"; - $commit_source->('fail capability query'); + $commit_source->('xCAT-genesis-builder/oe/build', 'fail capability query'); my $failed_log = "$tmp/failed-query.log"; isnt( run_capture( @@ -367,7 +401,7 @@ SKIP: { write_binary("$oe/build", "#!/bin/sh\nexit 0\n"); chmod(0755, "$oe/build") or die "Cannot update fixture build executable: $!"; - $commit_source->('empty capability query'); + $commit_source->('xCAT-genesis-builder/oe/build', 'empty capability query'); my $empty_log = "$tmp/empty-query.log"; isnt( run_capture(