2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-05-18 04:07:16 +00:00
Files
xcat-core/xCAT-test/unit/opensuse_leap_support.t
T
2026-05-02 16:57:46 -03:00

216 lines
10 KiB
Perl

#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use File::Temp qw(tempdir);
use FindBin;
use Cwd qw(realpath);
use lib "$FindBin::Bin/../../perl-xCAT";
use lib "$FindBin::Bin/../../xCAT-server/lib/perl";
use lib "$FindBin::Bin/../../xCAT-server/lib/xcat/plugins";
use lib "$FindBin::Bin/../../xCAT-server/share/xcat/netboot/imgutils";
require sles;
use xCAT::SvrUtils;
use xCAT::Template;
use imgutils;
my $leap_compute_template_path = "$FindBin::Bin/../../xCAT-server/share/xcat/install/sles/compute.leap15.tmpl";
open(my $leap_compute_template_fh, '<', $leap_compute_template_path) or die "Cannot read Leap compute template: $!";
my $leap_compute_template = do { local $/; <$leap_compute_template_fh> };
close($leap_compute_template_fh);
like($leap_compute_template, qr/<product>Leap<\/product>/, 'Leap install template selects Leap base product');
like($leap_compute_template, qr/<self_update config:type="boolean">false<\/self_update>/, 'Leap install template disables installer self-update');
like($leap_compute_template, qr/<do_online_update config:type="boolean">false<\/do_online_update>/, 'Leap install template disables online update');
my $leap_compute_pkglist_path = "$FindBin::Bin/../../xCAT-server/share/xcat/install/sles/compute.leap15.pkglist";
open(my $leap_compute_pkglist_fh, '<', $leap_compute_pkglist_path) or die "Cannot read Leap compute pkglist: $!";
my $leap_compute_pkglist = do { local $/; <$leap_compute_pkglist_fh> };
close($leap_compute_pkglist_fh);
like($leap_compute_pkglist, qr/^\@base$/m, 'Leap compute install pkglist requests a non-empty base pattern');
unlike($leap_compute_pkglist, qr/^(?:insserv-compat|net-tools-deprecated|ntp)$/m, 'Leap compute install pkglist avoids unavailable SLE package names');
my $sle15_netboot_pkglist_path = "$FindBin::Bin/../../xCAT-server/share/xcat/netboot/sles/compute.sle15.pkglist";
open(my $sle15_netboot_pkglist_fh, '<', $sle15_netboot_pkglist_path) or die "Cannot read SLE 15 netboot pkglist: $!";
my $sle15_netboot_pkglist = do { local $/; <$sle15_netboot_pkglist_fh> };
close($sle15_netboot_pkglist_fh);
like($sle15_netboot_pkglist, qr/^xfsprogs$/m, 'SLE 15 netboot pkglist includes xfs tools required by the xCAT dracut module');
is(xCAT::Template::_sle15_install_product_name('Product-SLES'), 'SLES', 'SLE 15 install source keeps the generic SLES product');
is(xCAT::Template::_sle15_install_product_name('Module-Basesystem'), 'sle-module-basesystem', 'SLE 15 install source keeps regular modules');
is(xCAT::Template::_sle15_install_product_name('Module-SAP-Applications'), undef, 'SLE 15 install source skips SAP application module');
is(xCAT::Template::_sle15_install_product_name('Module-SAP-Business-One'), undef, 'SLE 15 install source skips SAP Business One module');
is(xCAT::Template::_sle15_install_product_name('Product-SLES_SAP'), undef, 'SLE 15 install source skips SAP product media');
my $sle_post_common_path = "$FindBin::Bin/../../xCAT-server/share/xcat/install/scripts/post.sles.common";
open(my $sle_post_common_fh, '<', $sle_post_common_path) or die "Cannot read SLE post-install script: $!";
my $sle_post_common = do { local $/; <$sle_post_common_fh> };
close($sle_post_common_fh);
like($sle_post_common, qr/systemctl stop firewalld\.service/, 'SLE post-install script stops firewalld on systemd releases');
like($sle_post_common, qr/systemctl disable firewalld\.service/, 'SLE post-install script disables firewalld after stateful install');
my $tmpdir = tempdir(CLEANUP => 1);
open(my $treeinfo, '>', "$tmpdir/.treeinfo") or die "Cannot write .treeinfo: $!";
print {$treeinfo} <<'EOF';
[release]
name = openSUSE Leap
version = 15.6
[general]
arch = x86_64
family = openSUSE Leap
name = openSUSE Leap 15.6
version = 15.6
platforms = x86_64,xen
[images-x86_64]
kernel = boot/x86_64/loader/linux
initrd = boot/x86_64/loader/initrd
EOF
close($treeinfo);
my ($tree_dist, $tree_arch) = xCAT_plugin::sles::_detect_opensuse_leap_treeinfo($tmpdir);
is($tree_dist, 'leap15.6', 'detects openSUSE Leap distname from .treeinfo');
is($tree_arch, 'x86_64', 'detects openSUSE Leap arch from .treeinfo');
my $media = <<'EOF';
openSUSE - openSUSE-Leap-15.6-NET-x86_64-Build710.3-Media
openSUSE-Leap-15.6-NET-x86_64-Build710.3
1
EOF
my $products = "/ openSUSE-Leap 15.6-1\n";
my ($media_dist, $media_arch) = xCAT_plugin::sles::_detect_opensuse_leap_media($media, $products);
is($media_dist, 'leap15.6', 'detects openSUSE Leap distname from media files');
is($media_arch, 'x86_64', 'detects openSUSE Leap arch from media files');
my ($unsupported_dist) = xCAT_plugin::sles::_detect_opensuse_leap_media(
"openSUSE - openSUSE-Leap-16.0-NET-x86_64-Media\n",
"/ openSUSE-Leap 16.0-1\n"
);
is($unsupported_dist, undef, 'does not detect unvalidated openSUSE Leap 16 media as supported');
ok(xCAT_plugin::sles::_copycd_distname_supported('leap15.6'), 'copycd accepts explicit Leap distname override');
ok(!xCAT_plugin::sles::_copycd_distname_supported('leap16.0'), 'copycd rejects unvalidated Leap 16 distname override');
ok(!xCAT_plugin::sles::_copycd_distname_supported('opensuse15.6'), 'copycd does not accept generic openSUSE distname override');
my %commands = %{ xCAT_plugin::sles->handled_commands };
like($commands{mkinstall}, qr/leap15\.\*/, 'mkinstall handles openSUSE Leap 15 nodes');
like($commands{mknetboot}, qr/leap15\.\*/, 'mknetboot handles openSUSE Leap 15 nodes');
like($commands{mkstatelite}, qr/leap15\.\*/, 'mkstatelite handles openSUSE Leap 15 nodes');
my @os_search = xCAT::SvrUtils::get_os_search_list('leap15.6');
is_deeply(
\@os_search,
[qw(leap15.6 leap15.5 leap15.4 leap15.3 leap15.2 leap15.1 leap15.0 leap15 sle15)],
'openSUSE Leap 15.x searches exact, minor, major, then SLE 15 fallback'
);
my @unsupported_os_search = xCAT::SvrUtils::get_os_search_list('leap16.0');
unlike(
join(' ', @unsupported_os_search),
qr/\bsle16\b/,
'openSUSE Leap 16 does not silently use an unvalidated SLE 16 fallback'
);
my $install_dir = tempdir(CLEANUP => 1);
open(my $tmpl, '>', "$install_dir/compute.leap15.tmpl") or die "Cannot write openSUSE template: $!";
print {$tmpl} "opensuse template\n";
close($tmpl);
open(my $compute_fallback_tmpl, '>', "$install_dir/compute.sle15.tmpl") or die "Cannot write compute SLE template: $!";
print {$compute_fallback_tmpl} "sles template\n";
close($compute_fallback_tmpl);
open(my $fallback_tmpl, '>', "$install_dir/service.sle15.tmpl") or die "Cannot write SLE template: $!";
print {$fallback_tmpl} "sles template\n";
close($fallback_tmpl);
open(my $install_pkglist, '>', "$install_dir/compute.leap15.pkglist") or die "Cannot write openSUSE install pkglist: $!";
print {$install_pkglist} "chrony\n";
close($install_pkglist);
open(my $install_fallback_pkglist, '>', "$install_dir/service.sle15.pkglist") or die "Cannot write SLE install pkglist: $!";
print {$install_fallback_pkglist} "ntp\n";
close($install_fallback_pkglist);
is(
xCAT::SvrUtils::get_tmpl_file_name($install_dir, 'compute', 'leap15.6', 'x86_64'),
"$install_dir/compute.leap15.tmpl",
'openSUSE template lookup prefers leap15 over SLE 15'
);
is(
xCAT::SvrUtils::get_tmpl_file_name($install_dir, 'service', 'leap15.6', 'x86_64'),
"$install_dir/service.sle15.tmpl",
'openSUSE template lookup can fall back to SLE 15'
);
is(
xCAT::SvrUtils::get_pkglist_file_name($install_dir, 'compute', 'leap15.6', 'x86_64'),
"$install_dir/compute.leap15.pkglist",
'openSUSE install pkglist lookup prefers leap15 over SLE 15'
);
is(
xCAT::SvrUtils::get_pkglist_file_name($install_dir, 'service', 'leap15.6', 'x86_64'),
"$install_dir/service.sle15.pkglist",
'openSUSE install pkglist lookup can fall back to SLE 15'
);
my $table_netboot_dir = tempdir(CLEANUP => 1);
open(my $table_opensuse_pkglist, '>', "$table_netboot_dir/compute.leap15.pkglist") or die "Cannot write openSUSE table pkglist: $!";
print {$table_opensuse_pkglist} "zypper\n";
close($table_opensuse_pkglist);
open(my $table_pkglist, '>', "$table_netboot_dir/compute.sle15.pkglist") or die "Cannot write table pkglist: $!";
print {$table_pkglist} "aaa_base\n";
close($table_pkglist);
open(my $table_exlist, '>', "$table_netboot_dir/compute.sle15.exlist") or die "Cannot write table exlist: $!";
print {$table_exlist} "/tmp\n";
close($table_exlist);
open(my $table_postinstall, '>', "$table_netboot_dir/compute.sle15.postinstall") or die "Cannot write table postinstall: $!";
print {$table_postinstall} "#!/bin/sh\n";
close($table_postinstall);
chmod 0755, "$table_netboot_dir/compute.sle15.postinstall";
is(
xCAT::SvrUtils::get_pkglist_file_name($table_netboot_dir, 'compute', 'leap15.6', 'x86_64'),
"$table_netboot_dir/compute.leap15.pkglist",
'openSUSE diskless table lookup prefers leap15 pkglist over SLE 15'
);
unlink "$table_netboot_dir/compute.leap15.pkglist";
is(
xCAT::SvrUtils::get_pkglist_file_name($table_netboot_dir, 'compute', 'leap15.6', 'x86_64', 'sle15'),
"$table_netboot_dir/compute.sle15.pkglist",
'openSUSE diskless table lookup can fall back to SLE 15 pkglist'
);
is(
xCAT::SvrUtils::get_exlist_file_name($table_netboot_dir, 'compute', 'leap15.6', 'x86_64', 'sle15'),
"$table_netboot_dir/compute.sle15.exlist",
'openSUSE diskless table lookup can fall back to SLE 15 exlist'
);
is(
xCAT::SvrUtils::get_postinstall_file_name($table_netboot_dir, 'compute', 'leap15.6', 'x86_64', 'sle15'),
"$table_netboot_dir/compute.sle15.postinstall",
'openSUSE diskless table lookup can fall back to SLE 15 postinstall'
);
my $netboot_dir = tempdir(CLEANUP => 1);
open(my $opensuse_pkglist, '>', "$netboot_dir/compute.leap15.pkglist") or die "Cannot write openSUSE pkglist: $!";
print {$opensuse_pkglist} "zypper\n";
close($opensuse_pkglist);
open(my $pkglist, '>', "$netboot_dir/compute.sle15.pkglist") or die "Cannot write SLE pkglist: $!";
print {$pkglist} "aaa_base\n";
close($pkglist);
my $real_netboot_dir = realpath($netboot_dir) || $netboot_dir;
is(
imgutils::get_profile_def_filename('leap15.6', 'compute', 'x86_64', $netboot_dir, 'pkglist'),
"$real_netboot_dir/compute.leap15.pkglist",
'openSUSE diskless profile lookup prefers leap15 pkglist over SLE 15'
);
unlink "$netboot_dir/compute.leap15.pkglist";
is(
imgutils::get_profile_def_filename('leap15.6', 'compute', 'x86_64', $netboot_dir, 'pkglist'),
"$real_netboot_dir/compute.sle15.pkglist",
'openSUSE diskless profile lookup falls back to SLE 15 pkglist'
);
done_testing();