mirror of
https://github.com/xcat2/xcat-core.git
synced 2026-09-26 17:54:05 +00:00
test: reuse repository file helpers
This commit is contained in:
@@ -2,27 +2,24 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Cwd qw(realpath);
|
||||
use File::Path qw(make_path);
|
||||
use File::Spec;
|
||||
use File::Temp qw(tempdir);
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# copycd publishes the grub2 UEFI image of the installation media so that nodes
|
||||
# of an architecture xCAT builds no boot loader for -- riscv64 -- can net boot
|
||||
# without a further step. An image the management node already has is never
|
||||
# replaced, and the media of every other architecture is left alone.
|
||||
|
||||
my $repo_root = realpath( File::Spec->catdir( $FindBin::Bin, '..', '..' ) );
|
||||
my $plugin = File::Spec->catfile( $repo_root, 'xCAT-server', 'lib', 'xcat', 'plugins', 'anaconda.pm' );
|
||||
my $plugin = repo_path('xCAT-server/lib/xcat/plugins/anaconda.pm');
|
||||
plan skip_all => "$plugin not found" unless -r $plugin;
|
||||
|
||||
my $source = do {
|
||||
open( my $fh, '<', $plugin ) or die "Unable to read $plugin: $!";
|
||||
local $/;
|
||||
<$fh>;
|
||||
};
|
||||
my $source = slurp_repo_file('xCAT-server/lib/xcat/plugins/anaconda.pm');
|
||||
|
||||
# anaconda.pm needs a database to load, so take just the loader publication out
|
||||
# of it, the way the other unit tests here isolate a shipped sub.
|
||||
|
||||
@@ -3,23 +3,22 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
use FindBin;
|
||||
use File::Spec;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# The ISC dhcpd subnet block in dhcp.pm maps DHCP option 93 (client system
|
||||
# architecture) to a boot file. The block is rendered inside a large
|
||||
# database-backed subroutine, so this pins the shipped source text: every
|
||||
# architecture branch must appear before the catch-all that hands unknown
|
||||
# clients /yaboot, otherwise the branch is unreachable.
|
||||
|
||||
my $repo_root = File::Spec->catdir( $FindBin::Bin, '..', '..' );
|
||||
my $plugin = File::Spec->catfile( $repo_root, 'xCAT-server', 'lib', 'xcat', 'plugins', 'dhcp.pm' );
|
||||
my $plugin = repo_path('xCAT-server/lib/xcat/plugins/dhcp.pm');
|
||||
|
||||
plan skip_all => "$plugin not found" unless -r $plugin;
|
||||
|
||||
open( my $fh, '<', $plugin ) or die "Unable to read $plugin: $!";
|
||||
my $source = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
my $source = slurp_repo_file('xCAT-server/lib/xcat/plugins/dhcp.pm');
|
||||
|
||||
my %branch = (
|
||||
aarch64 => qr/client-architecture = 00:0b \{[^\n]*\n\s*push \@netent, "\s*filename \\"boot\/grub2\/grub2\.aarch64\\";/,
|
||||
|
||||
@@ -3,13 +3,15 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
use FindBin;
|
||||
use File::Spec;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
use lib "$FindBin::Bin/../../perl-xCAT";
|
||||
use lib "$FindBin::Bin/../../xCAT-server/lib/perl";
|
||||
use lib "$FindBin::Bin/../../xCAT-server/share/xcat/netboot/imgutils";
|
||||
use imgutils;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# EL riscv64 media and diskless images: the installer kernel/initrd live under
|
||||
# images/pxeboot like x86 and aarch64 media, and riscv64 diskless images need
|
||||
# their own default network drivers and lib64 resolver libraries. The
|
||||
@@ -17,21 +19,19 @@ use imgutils;
|
||||
# conditions are asserted in the shipped source and the resolver block is
|
||||
# extracted and evaluated directly.
|
||||
|
||||
my $repo_root = File::Spec->catdir( $FindBin::Bin, '..', '..' );
|
||||
|
||||
sub slurp {
|
||||
my ($relative) = @_;
|
||||
my $path = File::Spec->catfile( $repo_root, split( m{/}, $relative ) );
|
||||
my @source_files = (
|
||||
'xCAT-server/lib/xcat/plugins/anaconda.pm',
|
||||
'xCAT-server/lib/xcat/plugins/geninitrd.pm',
|
||||
'xCAT-server/share/xcat/netboot/rh/genimage',
|
||||
);
|
||||
foreach my $relative (@source_files) {
|
||||
my $path = repo_path($relative);
|
||||
plan skip_all => "$path not found" unless -r $path;
|
||||
open( my $fh, '<', $path ) or die "Unable to read $path: $!";
|
||||
my $content = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
return $content;
|
||||
}
|
||||
|
||||
my $anaconda = slurp('xCAT-server/lib/xcat/plugins/anaconda.pm');
|
||||
my $geninitrd = slurp('xCAT-server/lib/xcat/plugins/geninitrd.pm');
|
||||
my $genimage = slurp('xCAT-server/share/xcat/netboot/rh/genimage');
|
||||
my $anaconda = slurp_repo_file($source_files[0]);
|
||||
my $geninitrd = slurp_repo_file($source_files[1]);
|
||||
my $genimage = slurp_repo_file($source_files[2]);
|
||||
|
||||
# anaconda.pm: stateful install kernel/initrd discovery
|
||||
like(
|
||||
|
||||
@@ -2,27 +2,20 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Cwd qw(realpath);
|
||||
use File::Spec;
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# EL10 riscv64 kickstart installs: the EL10 anaconda has no RISC-V EFI
|
||||
# platform, so the riscv64 templates tolerate its x86 boot loader package
|
||||
# request, pull grub2-efi-riscv64/efibootmgr in through the riscv64 package
|
||||
# lists, and run a %post that points the UEFI boot entry at grubriscv64.efi
|
||||
# and places the removable-media fallback loader.
|
||||
|
||||
my $repo_root = realpath( File::Spec->catdir( $FindBin::Bin, '..', '..' ) );
|
||||
my $install = File::Spec->catdir( $repo_root, 'xCAT-server', 'share', 'xcat', 'install' );
|
||||
|
||||
sub slurp {
|
||||
my ($path) = @_;
|
||||
open( my $fh, '<', $path ) or die "Unable to read $path: $!";
|
||||
my $content = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
return $content;
|
||||
}
|
||||
my $install = File::Spec->catdir( 'xCAT-server', 'share', 'xcat', 'install' );
|
||||
|
||||
for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
my ( $dir, $osbase ) = @$family;
|
||||
@@ -30,9 +23,9 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
my $tmpl = File::Spec->catfile( $install, $dir, "$profile.$osbase.riscv64.tmpl" );
|
||||
my $pkglist = File::Spec->catfile( $install, $dir, "$profile.$osbase.riscv64.pkglist" );
|
||||
my $base = File::Spec->catfile( $install, $dir, "$profile.$osbase.tmpl" );
|
||||
ok( -r $tmpl, "$dir/$profile.$osbase.riscv64.tmpl exists" );
|
||||
ok( -r $pkglist, "$dir/$profile.$osbase.riscv64.pkglist exists" );
|
||||
my $t = slurp($tmpl);
|
||||
ok( -r repo_path($tmpl), "$dir/$profile.$osbase.riscv64.tmpl exists" );
|
||||
ok( -r repo_path($pkglist), "$dir/$profile.$osbase.riscv64.pkglist exists" );
|
||||
my $t = slurp_repo_file($tmpl);
|
||||
like( $t, qr/^%packages --ignoremissing$/m, "$dir/$profile.$osbase riscv64 template tolerates anaconda's x86 boot loader package request" );
|
||||
like( $t, qr/^#INCLUDE_DEFAULT_PKGLIST#$/m, "$dir/$profile.$osbase riscv64 template still includes the default package list" );
|
||||
like( $t, qr{^#INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/post\.rhels10\.riscv64#$}m, "$dir/$profile.$osbase riscv64 template runs the riscv64 UEFI boot entry fix-up" );
|
||||
@@ -43,7 +36,7 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
like( $t, qr/^rootpw --iscrypted #CRYPT:passwd:key=system,username=root:password#$/m, "$dir/$profile.$osbase riscv64 template keeps the shared root password directive" );
|
||||
|
||||
# the riscv64 template is the shared one plus the riscv64 changes
|
||||
my $b = slurp($base);
|
||||
my $b = slurp_repo_file($base);
|
||||
( my $t_norm = $t ) =~ s/^# riscv64:.*\n(?:#.*\n)*%addon com_redhat_kdump --disable\n%end\n\n//m;
|
||||
$t_norm =~ s/^# riscv64:.*\n(?:#.*\n)*//m;
|
||||
$t_norm =~ s/^%packages --ignoremissing$/%packages/m;
|
||||
@@ -51,11 +44,13 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
$t_norm =~ s/\n# --ignoremissing above.*?\n%post --erroronfail.*?\n%end\n//s;
|
||||
is( $t_norm, $b, "$dir/$profile.$osbase riscv64 template only differs from the shared template in the riscv64 changes" );
|
||||
|
||||
my $p = slurp($pkglist);
|
||||
my $p = slurp_repo_file($pkglist);
|
||||
like( $p, qr/^grub2-efi-riscv64$/m, "$dir/$profile.$osbase riscv64 package list installs grub2-efi-riscv64" );
|
||||
like( $p, qr/^efibootmgr$/m, "$dir/$profile.$osbase riscv64 package list installs efibootmgr" );
|
||||
unlike( $p, qr/shim|grub2-efi-x64|grub2-efi-aa64/, "$dir/$profile.$osbase riscv64 package list asks for no other architecture's boot loader" );
|
||||
my $shared = slurp( File::Spec->catfile( $install, $dir, "$profile.$osbase.pkglist" ) );
|
||||
my $shared = slurp_repo_file(
|
||||
File::Spec->catfile( $install, $dir, "$profile.$osbase.pkglist" )
|
||||
);
|
||||
( my $p_norm = $p ) =~ s/^grub2-efi-riscv64\n//m;
|
||||
$p_norm =~ s/^efibootmgr\n//m;
|
||||
s/\s+\z/\n/ for ( $p_norm, $shared );
|
||||
@@ -69,7 +64,9 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
my ( $dir, $osbase ) = @$family;
|
||||
for my $profile (qw(compute service)) {
|
||||
my $t = slurp( File::Spec->catfile( $install, $dir, "$profile.$osbase.riscv64.tmpl" ) );
|
||||
my $t = slurp_repo_file(
|
||||
File::Spec->catfile( $install, $dir, "$profile.$osbase.riscv64.tmpl" )
|
||||
);
|
||||
my ($section) = $t =~ /^(%post\b.*?)^%end/ms;
|
||||
ok( $section, "$dir/$profile.$osbase riscv64 template has a %post section" )
|
||||
or next;
|
||||
@@ -78,7 +75,9 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
ok( defined $index, "$dir/$profile.$osbase riscv64 template includes the fix-up in the %post section" )
|
||||
or next;
|
||||
for my $earlier ( @scripts[ 0 .. $index - 1 ] ) {
|
||||
my $body = slurp( File::Spec->catfile( $install, 'scripts', $earlier ) );
|
||||
my $body = slurp_repo_file(
|
||||
File::Spec->catfile( $install, 'scripts', $earlier )
|
||||
);
|
||||
unlike( $body, qr/^\s*exit\b/m,
|
||||
"$dir/$profile.$osbase runs $earlier before the riscv64 fix-up, and $earlier does not end the %post" );
|
||||
}
|
||||
@@ -86,10 +85,11 @@ for my $family ( [ 'rocky', 'rocky10' ], [ 'rh', 'rhels10' ] ) {
|
||||
}
|
||||
|
||||
my $post = File::Spec->catfile( $install, 'scripts', 'post.rhels10.riscv64' );
|
||||
ok( -r $post, 'post.rhels10.riscv64 exists' );
|
||||
my $bash = `bash -n $post 2>&1`;
|
||||
my $post_path = repo_path($post);
|
||||
ok( -r $post_path, 'post.rhels10.riscv64 exists' );
|
||||
my $bash = `bash -n $post_path 2>&1`;
|
||||
is( $bash, '', 'post.rhels10.riscv64 parses as bash' );
|
||||
my $s = slurp($post);
|
||||
my $s = slurp_repo_file($post);
|
||||
like( $s, qr/\[ "\$\(uname -m\)" = "riscv64" \]/, 'the fix-up only acts on riscv64' );
|
||||
like( $s, qr{/boot/efi/EFI/\*/grubriscv64\.efi}, 'the fix-up locates the distro grub2 UEFI image on the ESP' );
|
||||
like( $s, qr{cp -f "\$grubefi" /boot/efi/EFI/BOOT/BOOTRISCV64\.EFI}, 'the fix-up installs the removable-media fallback loader' );
|
||||
|
||||
@@ -3,9 +3,11 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
use FindBin;
|
||||
use File::Spec;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# riscv64 nodes boot through UEFI and grub2 only. This test pins the three
|
||||
# places that declare which noderes.netboot values an architecture accepts:
|
||||
# xCAT::Utils::lookupNetboot (used by nodeset/rinstall validation), the
|
||||
@@ -16,25 +18,16 @@ use Test::More;
|
||||
# time, so the shipped subroutines are extracted from the source and evaluated
|
||||
# directly instead of loading the whole modules.
|
||||
|
||||
my $repo_root = File::Spec->catdir( $FindBin::Bin, '..', '..' );
|
||||
my $utils_pm = File::Spec->catfile( $repo_root, 'perl-xCAT', 'xCAT', 'Utils.pm' );
|
||||
my $pnu_pm = File::Spec->catfile( $repo_root, 'perl-xCAT', 'xCAT', 'ProfiledNodeUtils.pm' );
|
||||
my $utils_pm = repo_path('perl-xCAT/xCAT/Utils.pm');
|
||||
my $pnu_pm = repo_path('perl-xCAT/xCAT/ProfiledNodeUtils.pm');
|
||||
|
||||
plan skip_all => "$utils_pm not found" unless -r $utils_pm;
|
||||
plan skip_all => "$pnu_pm not found" unless -r $pnu_pm;
|
||||
|
||||
sub slurp {
|
||||
my ($path) = @_;
|
||||
open( my $fh, '<', $path ) or die "Unable to read $path: $!";
|
||||
my $source = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
return $source;
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# xCAT::Utils::lookupNetboot
|
||||
# ---------------------------------------------------------------------------
|
||||
my $utils_source = slurp($utils_pm);
|
||||
my $utils_source = slurp_repo_file('perl-xCAT/xCAT/Utils.pm');
|
||||
my ($lookup_sub) = $utils_source =~ m{^(sub lookupNetboot \{.*?^\})}ms;
|
||||
ok( $lookup_sub, 'lookupNetboot was located in xCAT::Utils' )
|
||||
or BAIL_OUT('Utils.pm no longer matches the expected lookupNetboot shape');
|
||||
@@ -69,7 +62,7 @@ is( Test::LookupNetboot::lookupNetboot( 'xCAT::Utils', 'rocky10.2', 'riscv64', '
|
||||
# ---------------------------------------------------------------------------
|
||||
# xCAT::ProfiledNodeUtils netboot rule table + cal_netboot
|
||||
# ---------------------------------------------------------------------------
|
||||
my $pnu_source = slurp($pnu_pm);
|
||||
my $pnu_source = slurp_repo_file('perl-xCAT/xCAT/ProfiledNodeUtils.pm');
|
||||
my ($netboot_dict) = $pnu_source =~ m{^(\s*my %netboot_dict = \(.*?^\s*\);)}ms;
|
||||
ok( $netboot_dict, 'the profiled-node netboot rule table was located' )
|
||||
or BAIL_OUT('ProfiledNodeUtils.pm no longer matches the expected %netboot_dict shape');
|
||||
@@ -102,7 +95,7 @@ is( Test::ProfiledNetboot::cal_netboot( $rule_table, [ 'aarch64', 'rhels', '9',
|
||||
# ---------------------------------------------------------------------------
|
||||
SKIP: {
|
||||
skip 'xCAT::Schema is not loadable here', 3
|
||||
unless eval { require lib; lib->import( File::Spec->catdir( $repo_root, 'perl-xCAT' ) ); require xCAT::Schema; 1 };
|
||||
unless eval { require lib; lib->import( repo_path('perl-xCAT') ); require xCAT::Schema; 1 };
|
||||
|
||||
like( $xCAT::Schema::tabspec{nodetype}{descriptions}{arch}, qr/\briscv64\b/,
|
||||
'nodetype.arch documents riscv64 as a valid value' );
|
||||
|
||||
@@ -4,9 +4,11 @@ use warnings;
|
||||
## no critic (Modules::RequireFilenameMatchesPackage, TestingAndDebugging::ProhibitNoStrict, TestingAndDebugging::ProhibitNoWarnings)
|
||||
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use File::Path qw(make_path);
|
||||
use File::Temp qw(tempdir);
|
||||
use Test::More;
|
||||
use XCAT::Test::File qw(repo_path);
|
||||
|
||||
BEGIN {
|
||||
package xCAT::Utils;
|
||||
@@ -50,12 +52,8 @@ BEGIN {
|
||||
$INC{'xCAT/NodeRange.pm'} = __FILE__;
|
||||
}
|
||||
|
||||
my $source_mknb_plugin = "$FindBin::Bin/../../xCAT-server/lib/xcat/plugins/mknb.pm";
|
||||
if (-f $source_mknb_plugin) {
|
||||
require $source_mknb_plugin;
|
||||
} else {
|
||||
require xCAT_plugin::mknb;
|
||||
}
|
||||
my $source_mknb_plugin = repo_path('xCAT-server/lib/xcat/plugins/mknb.pm');
|
||||
require $source_mknb_plugin;
|
||||
|
||||
my ($legacy, $selected) = xCAT_plugin::mknb::_select_network_addresses(
|
||||
{
|
||||
|
||||
@@ -4,10 +4,12 @@ use warnings;
|
||||
## no critic (Modules::RequireFilenameMatchesPackage)
|
||||
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use File::Spec;
|
||||
use Cwd qw(realpath);
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# EL10 riscv64 diskless and service profiles are plain data files resolved by
|
||||
# imgutils::get_profile_def_filename (osver.arch first, then osbase.arch, then
|
||||
# the arch-less fallbacks). Pin that the riscv64 files exist, win the lookup
|
||||
@@ -35,20 +37,15 @@ BEGIN {
|
||||
$INC{'xCAT/SvrUtils.pm'} = __FILE__;
|
||||
}
|
||||
|
||||
my $repo_root = realpath( File::Spec->catdir( $FindBin::Bin, '..', '..' ) );
|
||||
my $share = File::Spec->catdir( $repo_root, 'xCAT-server', 'share', 'xcat' );
|
||||
my $imgutils = File::Spec->catfile( $share, 'netboot', 'imgutils', 'imgutils.pm' );
|
||||
my $share_relative = File::Spec->catdir( 'xCAT-server', 'share', 'xcat' );
|
||||
my $share = repo_path($share_relative);
|
||||
my $imgutils_relative = File::Spec->catfile(
|
||||
$share_relative, 'netboot', 'imgutils', 'imgutils.pm'
|
||||
);
|
||||
my $imgutils = repo_path($imgutils_relative);
|
||||
plan skip_all => "$imgutils not found" unless -r $imgutils;
|
||||
require $imgutils;
|
||||
|
||||
sub slurp {
|
||||
my ($path) = @_;
|
||||
open( my $fh, '<', $path ) or die "Unable to read $path: $!";
|
||||
my $content = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
return $content;
|
||||
}
|
||||
|
||||
my @families = (
|
||||
[ 'rocky', 'rocky10', 'rocky10.2' ],
|
||||
[ 'rh', 'rhels10', 'rhels10.2' ],
|
||||
@@ -56,6 +53,7 @@ my @families = (
|
||||
|
||||
for my $family (@families) {
|
||||
my ( $dir, $osbase, $osver ) = @$family;
|
||||
my $base_relative = File::Spec->catdir( $share_relative, 'netboot', $dir );
|
||||
my $base = File::Spec->catdir( $share, 'netboot', $dir );
|
||||
|
||||
for my $profile (qw(compute service)) {
|
||||
@@ -68,34 +66,49 @@ for my $family (@families) {
|
||||
"$osver riscv64 $profile $ext resolves to the riscv64 file",
|
||||
);
|
||||
}
|
||||
my $x86 = slurp( File::Spec->catfile( $base, "$profile.$osbase.x86_64.pkglist" ) );
|
||||
my $rv = slurp( File::Spec->catfile( $base, "$profile.$osbase.riscv64.pkglist" ) );
|
||||
my $x86 = slurp_repo_file(
|
||||
File::Spec->catfile( $base_relative, "$profile.$osbase.x86_64.pkglist" )
|
||||
);
|
||||
my $rv = slurp_repo_file(
|
||||
File::Spec->catfile( $base_relative, "$profile.$osbase.riscv64.pkglist" )
|
||||
);
|
||||
s/\s+\z/\n/ for ( $x86, $rv );
|
||||
is( $rv, $x86, "$dir/$profile.$osbase riscv64 pkglist matches the x86_64 list (no arch-specific packages)" );
|
||||
unlike( $rv, qr/^(?:microcode_ctl|grub2-efi-x64|shim-x64|syslinux|xnba)/m, "$dir/$profile.$osbase riscv64 pkglist has no x86-only packages" );
|
||||
|
||||
my $exlist = slurp( File::Spec->catfile( $base, "$profile.$osbase.riscv64.exlist" ) );
|
||||
my $exlist = slurp_repo_file(
|
||||
File::Spec->catfile( $base_relative, "$profile.$osbase.riscv64.exlist" )
|
||||
);
|
||||
like( $exlist, qr{^\./lib/kbd/keymaps/include\*$}m, "$dir/$profile.$osbase riscv64 exlist excludes the kbd keymap includes" );
|
||||
unlike( $exlist, qr{^\./lib/kdb/}m, "$dir/$profile.$osbase riscv64 exlist has no kdb typo" );
|
||||
is( scalar( () = $exlist =~ m{^\./usr/share/man\*$}mg ), 1, "$dir/$profile.$osbase riscv64 exlist lists usr/share/man once" );
|
||||
|
||||
my $postinstall = slurp( File::Spec->catfile( $base, "$profile.$osbase.riscv64.postinstall" ) );
|
||||
my $postinstall = slurp_repo_file(
|
||||
File::Spec->catfile( $base_relative, "$profile.$osbase.riscv64.postinstall" )
|
||||
);
|
||||
like( $postinstall, qr/^#!\/bin\/sh/, "$dir/$profile.$osbase riscv64 postinstall is a shell script" );
|
||||
like( $postinstall, qr/SELINUX=disabled/, "$dir/$profile.$osbase riscv64 postinstall disables SELinux in the image" );
|
||||
}
|
||||
|
||||
my $otherpkgs = File::Spec->catfile( $base, "service.$osbase.riscv64.otherpkgs.pkglist" );
|
||||
my $otherpkgs_relative = File::Spec->catfile(
|
||||
$base_relative, "service.$osbase.riscv64.otherpkgs.pkglist"
|
||||
);
|
||||
is(
|
||||
imgutils::get_profile_def_filename( $osver, 'service', 'riscv64', $base, 'otherpkgs.pkglist' ),
|
||||
$otherpkgs,
|
||||
"$osver riscv64 service otherpkgs resolves to the riscv64 file",
|
||||
);
|
||||
like( slurp($otherpkgs), qr{^xcat/xcat-dep/rh10/riscv64/goconserver$}m, "$dir netboot service otherpkgs pulls goconserver from the riscv64 EL10 dep repo" );
|
||||
like( slurp_repo_file($otherpkgs_relative), qr{^xcat/xcat-dep/rh10/riscv64/goconserver$}m, "$dir netboot service otherpkgs pulls goconserver from the riscv64 EL10 dep repo" );
|
||||
|
||||
my $install_otherpkgs = File::Spec->catfile( $share, 'install', $dir, "service.$osbase.riscv64.otherpkgs.pkglist" );
|
||||
my $install_otherpkgs_relative = File::Spec->catfile(
|
||||
$share_relative, 'install', $dir,
|
||||
"service.$osbase.riscv64.otherpkgs.pkglist"
|
||||
);
|
||||
my $install_otherpkgs = repo_path($install_otherpkgs_relative);
|
||||
ok( -r $install_otherpkgs, "install/$dir/service.$osbase.riscv64.otherpkgs.pkglist exists" );
|
||||
like( slurp($install_otherpkgs), qr{^xcat/xcat-dep/rh10/riscv64/goconserver$}m, "$dir install service otherpkgs pulls goconserver from the riscv64 EL10 dep repo" );
|
||||
like( slurp($install_otherpkgs), qr{^xcat/xcat-core/xCATsn$}m, "$dir install service otherpkgs installs xCATsn" );
|
||||
like( slurp_repo_file($install_otherpkgs_relative), qr{^xcat/xcat-dep/rh10/riscv64/goconserver$}m, "$dir install service otherpkgs pulls goconserver from the riscv64 EL10 dep repo" );
|
||||
like( slurp_repo_file($install_otherpkgs_relative), qr{^xcat/xcat-core/xCATsn$}m, "$dir install service otherpkgs installs xCATsn" );
|
||||
}
|
||||
|
||||
# an architecture without its own files still falls back to the arch-less ones
|
||||
|
||||
@@ -4,9 +4,11 @@ use warnings;
|
||||
## no critic (Modules::RequireFilenameMatchesPackage)
|
||||
|
||||
use FindBin;
|
||||
use File::Spec;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# nodediscover sets noderes.netboot for a freshly discovered node when the
|
||||
# admin did not pick a method that fits the reported architecture. The ladder
|
||||
# lives in _default_netboot() so it can be checked without a database: stub
|
||||
@@ -31,8 +33,7 @@ BEGIN {
|
||||
$INC{'xCAT/DiscoveryUtils.pm'} = __FILE__;
|
||||
}
|
||||
|
||||
my $repo_root = File::Spec->catdir( $FindBin::Bin, '..', '..' );
|
||||
my $plugin = File::Spec->catfile( $repo_root, 'xCAT-server', 'lib', 'xcat', 'plugins', 'nodediscover.pm' );
|
||||
my $plugin = repo_path('xCAT-server/lib/xcat/plugins/nodediscover.pm');
|
||||
plan skip_all => "$plugin not found" unless -r $plugin;
|
||||
|
||||
require $plugin;
|
||||
@@ -71,7 +72,7 @@ is( $warnings, 0, 'no warnings were emitted for undefined inputs' );
|
||||
|
||||
# The discovery request is stored as discovery data key by key, so reading the platform
|
||||
# of a node that never reported one must not add the key to the request.
|
||||
my $source = do { open( my $fh, '<', $plugin ) or die "Unable to read $plugin: $!"; local $/; <$fh> };
|
||||
my $source = slurp_repo_file('xCAT-server/lib/xcat/plugins/nodediscover.pm');
|
||||
like(
|
||||
$source,
|
||||
qr/my \$platform = exists \$request->\{platform\} \? \$request->\{platform\}->\[0\] : undef;/,
|
||||
|
||||
@@ -2,27 +2,18 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use File::Spec;
|
||||
use FindBin;
|
||||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
|
||||
use XCAT::Test::File qw(repo_path slurp_repo_file);
|
||||
|
||||
# riscv64 packaging: the arch-named packages (xCAT, xCATsn) must resolve their
|
||||
# architecture token and dependencies for riscv64, and the build scripts must
|
||||
# know the riscv64 package names. The Genesis image comes from the OpenEmbedded
|
||||
# packages, so there is no arch-named Genesis package to resolve here.
|
||||
|
||||
my $repo_root = File::Spec->rel2abs( File::Spec->catdir( $FindBin::Bin, '..', '..' ) );
|
||||
|
||||
sub read_file {
|
||||
my ($relative) = @_;
|
||||
my $path = File::Spec->catfile( $repo_root, split( m{/}, $relative ) );
|
||||
open( my $fh, '<', $path ) or die "Unable to read $path: $!";
|
||||
my $content = do { local $/; <$fh> };
|
||||
close($fh);
|
||||
return $content;
|
||||
}
|
||||
|
||||
my $xcat = read_file('xCAT/xCAT.spec');
|
||||
my $xcat = slurp_repo_file('xCAT/xCAT.spec');
|
||||
like( $xcat, qr/^%ifarch riscv64\n(?:#[^\n]*\n)*Requires: ipmitool-xcat >= 1\.8\.18-4\n%endif$/m, 'xCAT.spec requires ipmitool-xcat on riscv64' );
|
||||
my ($xcat_rv) = $xcat =~ /^%ifarch riscv64\n((?:#[^\n]*\n|Requires:[^\n]*\n)*)%endif$/m;
|
||||
unlike( $xcat_rv || '', qr/xnba-undi|syslinux-xcat|elilo-xcat/, 'xCAT.spec does not require the x86 PXE loaders on riscv64' );
|
||||
@@ -32,16 +23,26 @@ unlike( $xcat_rv || '', qr/xnba-undi|syslinux-xcat|elilo-xcat/, 'xCAT.spec does
|
||||
like( $xcat, qr/^%\{\?genesistarch:Requires: xCAT-genesis-scripts-%\{genesistarch\} = 1:%\{version\}-%\{release\}\}$/m, 'xCAT.spec asks for the legacy Genesis package only where the architecture has one' );
|
||||
|
||||
SKIP: {
|
||||
skip 'rpmspec is not installed', 2 unless `sh -c 'command -v rpmspec' 2>/dev/null`;
|
||||
my $requires = `rpmspec -q --target riscv64 --requires xCAT/xCAT.spec 2>/dev/null`;
|
||||
my $rpmspec = qx(command -v rpmspec 2>/dev/null);
|
||||
chomp($rpmspec);
|
||||
skip 'rpmspec is not installed', 2 unless $rpmspec && -x $rpmspec;
|
||||
|
||||
my $spec = repo_path('xCAT/xCAT.spec');
|
||||
open( my $requires_fh, '-|',
|
||||
$rpmspec, '-q', '--target', 'riscv64', '--requires', $spec )
|
||||
or BAIL_OUT("unable to run $rpmspec: $!");
|
||||
my $requires = do { local $/; <$requires_fh> };
|
||||
close($requires_fh)
|
||||
or BAIL_OUT("rpmspec failed for $spec with status " . ($? >> 8));
|
||||
|
||||
unlike( $requires, qr/genesis-scripts/, 'a riscv64 build requires no legacy Genesis package' );
|
||||
unlike( $requires, qr/\Q%{genesistarch}\E/, 'a riscv64 build leaves no unexpanded architecture macro' );
|
||||
}
|
||||
|
||||
my $xcatsn = read_file('xCATsn/xCATsn.spec');
|
||||
my $xcatsn = slurp_repo_file('xCATsn/xCATsn.spec');
|
||||
like( $xcatsn, qr/^%ifarch riscv64\nRequires: ipmitool-xcat >= 1\.8\.17-1\n%endif$/m, 'xCATsn.spec requires ipmitool-xcat on riscv64' );
|
||||
|
||||
my $server = read_file('xCAT-server/xCAT-server.spec');
|
||||
my $server = slurp_repo_file('xCAT-server/xCAT-server.spec');
|
||||
like( $server, qr/^Recommends: perl-DB_File$/m, 'xCAT-server.spec recommends perl-DB_File on EL10 (riscv64 has no EPEL to provide it)' );
|
||||
like(
|
||||
$server,
|
||||
@@ -61,14 +62,14 @@ like(
|
||||
like( $server, qr/^Requires: perl-Net-Telnet perl-Net-DNS perl-Crypt-CBC perl-Crypt-Rijndael$/m, 'xCAT-server.spec keeps the other EL perl requires' );
|
||||
|
||||
|
||||
my $buildcore = read_file('buildcore.sh');
|
||||
my $buildcore = slurp_repo_file('buildcore.sh');
|
||||
like( $buildcore, qr/^\s*for arch in x86_64 ppc64 ppc64le s390x aarch64 riscv64; do$/m, 'buildcore.sh builds xCAT and xCATsn for riscv64' );
|
||||
|
||||
my $buildlocal = read_file('buildlocal.sh');
|
||||
my $buildlocal = slurp_repo_file('buildlocal.sh');
|
||||
like( $buildlocal, qr/^\s*for arch in x86_64 ppc64 s390x aarch64 riscv64; do$/m, 'buildlocal.sh builds xCAT and xCATsn for riscv64' );
|
||||
like( $buildlocal, qr{^\s*cp /root/rpmbuild/RPMS/riscv64/\* \$CURDIR/build/$}m, 'buildlocal.sh collects riscv64 rpms' );
|
||||
|
||||
my $buildrpms = read_file('buildrpms.pl');
|
||||
my $buildrpms = slurp_repo_file('buildrpms.pl');
|
||||
like( $buildrpms, qr/forcearch/, 'buildrpms.pl documents the forcearch mock configuration for riscv64 builds' );
|
||||
|
||||
# buildrpms.pl derives the rpm architecture from the mock target name; a suffixed
|
||||
|
||||
Reference in New Issue
Block a user