mirror of
git://git.proxmox.com/git/pve-common.git
synced 2025-01-05 17:17:36 +03:00
add section config tests
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
c9ede1c3b3
commit
85bc5755c0
@ -6,7 +6,7 @@ all:
|
|||||||
|
|
||||||
export PERLLIB=../src
|
export PERLLIB=../src
|
||||||
|
|
||||||
check: lock_file.test calendar_event_test.test convert_size_test.test procfs_tests.test format_test.test
|
check: lock_file.test calendar_event_test.test convert_size_test.test procfs_tests.test format_test.test section_config_test.test
|
||||||
for d in $(SUBDIRS); do $(MAKE) -C $$d check; done
|
for d in $(SUBDIRS); do $(MAKE) -C $$d check; done
|
||||||
|
|
||||||
%.test: %.pl
|
%.test: %.pl
|
||||||
|
224
test/section_config_test.pl
Executable file
224
test/section_config_test.pl
Executable file
@ -0,0 +1,224 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use lib '../src';
|
||||||
|
|
||||||
|
package Conf;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Test::More;
|
||||||
|
|
||||||
|
use base qw(PVE::SectionConfig);
|
||||||
|
|
||||||
|
my $defaultData = {
|
||||||
|
propertyList => {
|
||||||
|
type => { description => "Section type." },
|
||||||
|
id => {
|
||||||
|
description => "ID",
|
||||||
|
type => 'string',
|
||||||
|
format => 'pve-configid',
|
||||||
|
maxLength => 64,
|
||||||
|
},
|
||||||
|
common => {
|
||||||
|
type => 'string',
|
||||||
|
description => 'common value',
|
||||||
|
maxLength => 512,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
sub private {
|
||||||
|
return $defaultData;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub expect_success {
|
||||||
|
my ($class, $filename, $expected, $raw, $allow_unknown) = @_;
|
||||||
|
|
||||||
|
my $res = $class->parse_config($filename, $raw, $allow_unknown);
|
||||||
|
delete $res->{digest};
|
||||||
|
|
||||||
|
is_deeply($res, $expected, $filename);
|
||||||
|
|
||||||
|
my $written = $class->write_config($filename, $res, $allow_unknown);
|
||||||
|
my $res2 = $class->parse_config($filename, $written, $allow_unknown);
|
||||||
|
delete $res2->{digest};
|
||||||
|
|
||||||
|
is_deeply($res, $res2, "$filename - verify rewritten data");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub expect_fail {
|
||||||
|
my ($class, $filename, $expected, $raw) = @_;
|
||||||
|
|
||||||
|
eval { $class->parse_config($filename, $raw) };
|
||||||
|
die "test '$filename' succeeded unexpectedly\n" if !$@;
|
||||||
|
ok(1, "$filename should fail to parse");
|
||||||
|
}
|
||||||
|
|
||||||
|
package Conf::One;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'Conf';
|
||||||
|
|
||||||
|
sub type {
|
||||||
|
return 'one';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub properties {
|
||||||
|
return {
|
||||||
|
field1 => {
|
||||||
|
description => 'Field One',
|
||||||
|
type => 'integer',
|
||||||
|
minimum => 3,
|
||||||
|
maximum => 9,
|
||||||
|
},
|
||||||
|
another => {
|
||||||
|
description => 'Another field',
|
||||||
|
type => 'string',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub options {
|
||||||
|
return {
|
||||||
|
common => { optional => 1 },
|
||||||
|
field1 => {},
|
||||||
|
another => { optional => 1 },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
package Conf::Two;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use base 'Conf';
|
||||||
|
|
||||||
|
sub type {
|
||||||
|
return 'two';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub properties {
|
||||||
|
return {
|
||||||
|
field2 => {
|
||||||
|
description => 'Field Two',
|
||||||
|
type => 'integer',
|
||||||
|
minimum => 3,
|
||||||
|
maximum => 9,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub options {
|
||||||
|
return {
|
||||||
|
common => { optional => 1 },
|
||||||
|
field2 => {},
|
||||||
|
another => {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
package main;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Test::More;
|
||||||
|
|
||||||
|
Conf::One->register();
|
||||||
|
Conf::Two->register();
|
||||||
|
Conf->init();
|
||||||
|
|
||||||
|
local $SIG{__WARN__} = sub { die @_; };
|
||||||
|
|
||||||
|
my sub enum {
|
||||||
|
my $n = 1;
|
||||||
|
return { map { $_ => $n++ } @_ };
|
||||||
|
}
|
||||||
|
|
||||||
|
Conf->expect_success(
|
||||||
|
'test1',
|
||||||
|
{
|
||||||
|
ids => {
|
||||||
|
t1 => {
|
||||||
|
type => 'one',
|
||||||
|
common => 'foo',
|
||||||
|
field1 => 3,
|
||||||
|
},
|
||||||
|
t2 => {
|
||||||
|
type => 'one',
|
||||||
|
common => 'foo2',
|
||||||
|
field1 => 4,
|
||||||
|
another => 'more-text',
|
||||||
|
},
|
||||||
|
t3 => {
|
||||||
|
type => 'two',
|
||||||
|
field2 => 5,
|
||||||
|
another => 'even more text',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
order => { t1 => 1, t2 => 2, t3 => 3 },
|
||||||
|
},
|
||||||
|
<<"EOF");
|
||||||
|
one: t1
|
||||||
|
common foo
|
||||||
|
field1 3
|
||||||
|
|
||||||
|
one: t2
|
||||||
|
common foo2
|
||||||
|
field1 4
|
||||||
|
another more-text
|
||||||
|
|
||||||
|
two: t3
|
||||||
|
field2 5
|
||||||
|
another even more text
|
||||||
|
EOF
|
||||||
|
|
||||||
|
my $with_unknown_data = {
|
||||||
|
ids => {
|
||||||
|
t1 => {
|
||||||
|
type => 'one',
|
||||||
|
common => 'foo',
|
||||||
|
field1 => 3,
|
||||||
|
},
|
||||||
|
t2 => {
|
||||||
|
type => 'one',
|
||||||
|
common => 'foo2',
|
||||||
|
field1 => 4,
|
||||||
|
another => 'more-text',
|
||||||
|
},
|
||||||
|
t3 => {
|
||||||
|
type => 'two',
|
||||||
|
field2 => 5,
|
||||||
|
another => 'even more text',
|
||||||
|
},
|
||||||
|
invalid => {
|
||||||
|
type => 'bad',
|
||||||
|
common => 'omg',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
order => enum(qw(t1 t2 invalid t3)),
|
||||||
|
};
|
||||||
|
my $with_unknown_text = <<"EOF";
|
||||||
|
one: t1
|
||||||
|
common foo
|
||||||
|
field1 3
|
||||||
|
|
||||||
|
one: t2
|
||||||
|
common foo2
|
||||||
|
field1 4
|
||||||
|
another more-text
|
||||||
|
|
||||||
|
bad: invalid
|
||||||
|
common omg
|
||||||
|
|
||||||
|
two: t3
|
||||||
|
field2 5
|
||||||
|
another even more text
|
||||||
|
EOF
|
||||||
|
|
||||||
|
Conf->expect_fail('unknown-forbidden', $with_unknown_data, $with_unknown_text);
|
||||||
|
Conf->expect_success('unknown-allowed', $with_unknown_data, $with_unknown_text, 1);
|
||||||
|
|
||||||
|
|
||||||
|
done_testing();
|
||||||
|
|
||||||
|
1;
|
Loading…
Reference in New Issue
Block a user