2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-08 12:40:45 +00:00

test(genesis): cover s390x integration boundaries

This commit is contained in:
Vinícius Ferrão
2026-09-04 17:15:24 -03:00
parent bfd4442cc2
commit 9e65f9c45d
3 changed files with 49 additions and 8 deletions
+6 -6
View File
@@ -104,12 +104,13 @@ like( $ppc64_kas, qr{includes:\s*\n\s*- xCAT-genesis-builder/oe/kas/common\.yml}
like( $ppc64_kas, qr/^machine: xcat-genesis-ppc64$/m,
'ppc64 build selects its machine' );
my $build = read_file('xCAT-genesis-builder/oe/build');
my $build_path = File::Spec->catfile(
$repo_root, qw(xCAT-genesis-builder oe build)
);
my @listed_architectures = `$build_path --list-architectures`;
is($? >> 8, 0, 'build reports its supported architectures');
open(my $architecture_report, '-|', $build_path, '--list-architectures')
or die "Unable to query $build_path: $!";
my @listed_architectures = <$architecture_report>;
ok(close($architecture_report), 'build reports its supported architectures');
chomp @listed_architectures;
is_deeply(
\@listed_architectures,
@@ -136,6 +137,8 @@ chmod(0755, $kas_stub) or die "Unable to make $kas_stub executable: $!";
'build accepts s390x');
is(system($build_path, 'not-an-architecture') >> 8, 2,
'build rejects an unsupported architecture');
is(system($build_path, 'x86*') >> 8, 2,
'build treats architecture names literally');
}
open(my $kas_log_file, '<', $kas_log) or die "Unable to read $kas_log: $!";
my @kas_invocations = <$kas_log_file>;
@@ -914,9 +917,6 @@ my $smoke_extension = read_file(
);
like( $smoke_extension, qr/^XCAT_GENESIS_EXTENSION_NAME = "xcat-smoke"$/m,
'open smoke extension exercises the build path' );
like( $smoke_extension,
qr/^XCAT_GENESIS_EXTENSION_ARCHITECTURE = "\$\{XCAT_GENESIS_ARCHITECTURE\}"$/m,
'smoke extension uses the target architecture identity' );
my $preset = read_file(
'xCAT-genesis-builder/oe/meta-xcat-genesis/recipes-core/xcat-genesis-init/files/00-xcat-genesis.preset'
@@ -112,9 +112,12 @@ like(
qr{/opt/xcat/share/xcat/netboot/genesis-openembedded/ARCH},
'the mknb man page documents the OpenEmbedded install namespace',
);
my ($architecture_names) = $mknb_pod =~
/OpenEmbedded images use the exact architecture names ([^.]+)\./;
ok(defined($architecture_names), 'the mknb man page has an architecture list');
for my $architecture (qw(x86 x86_64 ppc64 ppc64le armv7hf aarch64 riscv64 s390x)) {
like(
$mknb_pod,
$architecture_names,
qr/\b\Q$architecture\E\b/,
"the mknb man page lists $architecture",
);
+39 -1
View File
@@ -10,6 +10,7 @@ use File::Path qw(make_path);
use File::Temp qw(tempdir);
use Test::More;
use XCAT::Test::File qw(repo_path);
use xCAT::DHCP::BootPolicy;
BEGIN {
package xCAT::Utils;
@@ -521,6 +522,17 @@ is((stat "$xCAT::TableUtils::tftpdir/pxelinux.cfg")[2] & 07777, 0755,
my $s390x_qemu_path =
"$xCAT::TableUtils::tftpdir/pxelinux.cfg/s390x/192.168.144.0_20";
ok(-f $s390x_qemu_path, 's390x writes a QEMU network IPL configuration');
my $s390x_classes = xCAT::DHCP::BootPolicy->kea_s390x_network_classes(
net => '192.168.144.0', prefix => 20,
);
my ($s390x_conf_file) = map { $_->{data} }
grep { $_->{name} eq 'conf-file' }
@{ $s390x_classes->[0]{'option-data'} };
is(
"$xCAT::TableUtils::tftpdir/pxelinux.cfg/$s390x_conf_file",
$s390x_qemu_path,
'the DHCP configuration name resolves to the file written by mknb',
);
is(
read_config($s390x_qemu_path),
"# pxelinux.cfg xCAT Genesis s390x\n"
@@ -536,6 +548,17 @@ unlike(
qr/192\.168\.149\.100/,
's390x configurations do not use the later floating address',
);
%xCAT::TableUtils::site_extra = ( dhcpinterfaces => 'eth0,eth1:noboot' );
$xCAT::NetworkUtils::nic_ips = { eth0 => '10.0.0.1', eth1 => '192.168.148.10' };
$responses = run_mknb('s390x');
generation_succeeded($responses, 's390x honors :noboot on the selected xcatd address');
ok(!-e $s390x_qemu_path,
'a selected xcatd address on :noboot gets no s390x configuration');
%xCAT::TableUtils::site_extra = ();
$xCAT::NetworkUtils::nic_ips = undef;
$responses = run_mknb('s390x');
generation_succeeded($responses, 's390x configuration is restored after :noboot');
write_text($s390x_qemu_path, "admin network configuration\n");
$responses = run_mknb('s390x');
ok(
@@ -548,6 +571,21 @@ unlink($s390x_qemu_path);
$responses = run_mknb('s390x');
generation_succeeded($responses, 's390x configuration is restored after removing the unmanaged file');
unlink($s390x_qemu_path);
my $s390x_symlink_target = "$tmpdir/s390x-symlink-target";
symlink($s390x_symlink_target, $s390x_qemu_path)
or die "Unable to create s390x test symlink: $!";
$responses = run_mknb('s390x');
ok(
scalar(grep { ref($_) eq 'HASH' && $_->{error} && "@{$_->{error}}" =~ /Refusing to replace unmanaged/ } @{$responses}),
's390x refuses to follow an unmanaged configuration symlink',
);
ok(!-e $s390x_symlink_target,
'an unmanaged configuration symlink target is unchanged');
unlink($s390x_qemu_path);
$responses = run_mknb('s390x');
generation_succeeded($responses, 's390x configuration is restored after removing the symlink');
my $s390x_legacy_root = "$tmpdir/tftpboot-s390x-legacy";
make_path("$s390x_legacy_root/pxelinux.cfg/s390x");
my ($s390x_legacy_path, $s390x_legacy_error) =
@@ -568,7 +606,7 @@ like(
);
my $s390x_failure_root = "$tmpdir/tftpboot-s390x-failure";
make_path("$s390x_failure_root/pxelinux.cfg/s390x/192.168.144.0_20");
make_path("$s390x_failure_root/pxelinux.cfg");
my (undef, $s390x_write_error) =
xCAT_plugin::mknb::_write_s390x_discovery_config(
tftpdir => $s390x_failure_root,