2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2026-09-04 20:17:55 +00:00

test(ipmi): cover netmask validation

This commit is contained in:
Vinícius Ferrão
2026-08-31 15:26:26 -03:00
parent 0518b916b1
commit d96ddf1f89
@@ -137,6 +137,11 @@ subtest 'IPv4 settings preserve their wire command bytes' => sub {
data => [ 2, 0x03, 0, 0, 0, 0 ],
value => '0.0.0.0',
},
{
setting => 'netmask=255.255.255.0',
data => [ 2, 0x06, 255, 255, 255, 0 ],
value => '255.255.255.0',
},
{
setting => 'gateway=10.20.30.1',
data => [ 2, 0x0c, 10, 20, 30, 1 ],
@@ -342,6 +347,47 @@ subtest 'IPv4 settings resolve once per transaction' => sub {
}
};
subtest 'netmask values must be contiguous dotted-decimal masks' => sub {
plan skip_all => 'netmask validation is not present on the base revision'
unless xCAT_plugin::ipmi->can('_resolve_ipv4_octets');
my @accepted = (
[ '255.255.255.255', [ 2, 0x06, 255, 255, 255, 255 ] ],
[ '128.0.0.0', [ 2, 0x06, 128, 0, 0, 0 ] ],
[ '0.0.0.0', [ 2, 0x06, 0, 0, 0, 0 ] ],
);
foreach my $case (@accepted) {
my ( $value, $data ) = @{$case};
my $result = run_setting("netmask=$value");
is( scalar( @{ $result->{calls} } ), 1, "netmask=$value sends one command" );
is_deeply( $result->{calls}->[0]->{data}, $data,
"netmask=$value keeps its wire bytes" );
is_deeply( $result->{messages}, [], "netmask=$value reports no error" );
}
my @rejected = (
[ '999.999.999.999', 'octets above 255' ],
[ '255.255.255', 'three-part form' ],
[ '255.255.255.255.255', 'five-part form' ],
[ '255.0.255.0', 'noncontiguous mask bits' ],
[ '255.255.255.256', 'octet above 255' ],
[ '255.255.255.010', 'leading-zero octet' ],
[ '24', 'prefix length form' ],
);
foreach my $case (@rejected) {
my ( $value, $reason ) = @{$case};
my $result = run_setting("netmask=$value");
ok( $result->{succeeded}, "netmask=$value does not raise a Perl exception" )
or diag $result->{error};
is_deeply( $result->{calls}, [], "netmask=$value sends no IPMI command: $reason" );
is_deeply(
$result->{messages}->[0]->[0],
[ 1, "'$value' is not a valid netmask" ],
"netmask=$value reports the rejection"
);
}
};
subtest 'invalid IPv4 settings report an xCAT error' => sub {
plan skip_all => 'invalid setting handling is not present on the base revision'
unless xCAT_plugin::ipmi->can('_resolve_ipv4_octets');