Create fake type "subContainer"

This commit is contained in:
Xavier Guimard 2015-06-21 19:52:19 +00:00
parent 9cfb59ad81
commit baa2be3d78
3 changed files with 65 additions and 44 deletions

View File

@ -835,6 +835,9 @@ sub attributes {
documentation => 'Virtualhost urls/Datas to post',
},
vhostOptions => {
type => 'subContainer',
},
vhostPort => {
type => 'int',
default => -1,
@ -2003,6 +2006,8 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?:
{ type => 'oidcOPMetaDataNodeContainer', help => 'oidcop.html', },
oidcRPMetaDataNodes =>
{ type => 'oidcRPMetaDataNodeContainer', help => 'oidcrp.html', },
oidcOPMetaDataOptions => { type => 'subContainer', },
oidcRPMetaDataOptions => { type => 'subContainer', },
# OpenID Connect providers
oidcOPMetaDataJSON => { type => 'oidcmetadatajson', },

View File

@ -474,52 +474,64 @@ sub _unitTest {
foreach my $key ( keys %$conf ) {
my ( $attr, $type );
# Check if key exists
unless ( $attr = $attrs->{$key} ) {
push @{ $self->errors }, { message => "__unknownKey__: $key" };
next;
}
if ( $key =~ $simpleHashKeys ) {
if ( $attr->{type} and $attr->{type} eq 'subContainer' ) {
#TODO
}
elsif ( defined $attr->{keyTest} ) {
#TODO
# TODO Recursive
}
else {
die "Unkown type $attr->{type}"
unless ( $type = $types->{ $attr->{type} } );
my $test = $attr->{test} // $type->{test};
my $msg = $attr->{msgFail} // $type->{msgFail};
if ( my $ref = ref($test) ) {
if ( $ref eq 'CODE' ) {
my ( $r, $w ) = $test->( $conf->{$key}, $conf, $attr );
unless ($r) {
push @{ $self->errors },
{ message => "$key: " . ( $w ? $w : $msg ) };
$res = 0;
# Check if key exists
unless ( $attr = $attrs->{$key} ) {
push @{ $self->errors }, { message => "__unknownKey__: $key" };
next;
}
if ( $key =~ $simpleHashKeys ) {
#TODO
}
elsif ( defined $attr->{keyTest} ) {
#TODO
}
elsif ( $attr->{type} =~ /Container$/ ) {
#TODO
}
else {
die "Unkown type $attr->{type}"
unless ( $type = $types->{ $attr->{type} } );
my $test = $attr->{test} // $type->{test};
my $msg = $attr->{msgFail} // $type->{msgFail};
if ( my $ref = ref($test) ) {
if ( $ref eq 'CODE' ) {
my ( $r, $w ) = $test->( $conf->{$key}, $conf, $attr );
unless ($r) {
push @{ $self->errors },
{ message => "$key: " . ( $w ? $w : $msg ) };
$res = 0;
}
elsif ($w) {
push @{ $self->warnings },
{ message => "$key: $w" };
}
}
elsif ($w) {
push @{ $self->warnings }, { message => "$key: $w" };
elsif ( $ref eq 'Regexp' ) {
die "msgFail undefined for type \"$attr->{type}\""
unless ( defined $msg );
unless ( $conf->{$key} =~ $test ) {
push @{ $self->errors },
{ message => "$key: $msg ($conf->{$key})" };
}
}
}
elsif ( $ref eq 'Regexp' ) {
die "msgFail undefined for type \"$attr->{type}\""
unless ( defined $msg );
unless ( $conf->{$key} =~ $test ) {
push @{ $self->errors },
{ message => "$key: $msg ($conf->{$key})" };
else {
die
"Malformed test: only regexp ref or sub are accepted (type \"$ref\")";
}
}
else {
die
"Malformed test: only regexp ref or sub are accepted (type \"$ref\")";
}
}
else {
die
"Malformed test: only regexp ref or sub are accepted (\"$test\")";
}
}
}
}

View File

@ -15,38 +15,42 @@ $count += 3;
ok( opendir( D, $formDir ), 'Found forms dir' );
my %forms = map { s/\.html$// ? ( $_ => 1 ) : () } readdir D;
close D;
delete $forms{white};
delete $forms{restore};
my ( @types, $attr, $tree, $ctrees );
ok( $tree = Lemonldap::NG::Manager::Tree::tree(), 'Get tree' );
ok( $ctrees = Lemonldap::NG::Manager::CTrees::cTrees(), 'Get cTrees' );
ok( $attr = Lemonldap::NG::Manager::Attributes::attributes(),
ok( $attr = Lemonldap::NG::Manager::Attributes::attributes(),
'Get attributes' );
$count +=4;
$count += 4;
my %types = %{ getTypes( $tree, values(%$ctrees), $attr ) };
foreach(qw(home menuCat menuApp)){
ok($forms{$_},"Found $_ form");
$count ++;
foreach (qw(home menuCat menuApp)) {
ok( $forms{$_}, "Found $_ form" );
$count++;
delete $forms{$_};
}
foreach my $type ( keys %types ) {
delete $types{$type};
next if($type =~ /^(?:url|PerlModule|hostname|pcre|lmAttrOrMacro|RSAP(?:ublic|rivate)Key)$/);
next
if ( $type =~
/^(?:url|PerlModule|hostname|pcre|lmAttrOrMacro|subContainer|RSAP(?:ublic|rivate)Key)$/
);
ok( $forms{$type}, "Found $type" );
delete $forms{$type};
$count++;
if ( $type =~ s/Container$// ) {
next if($type eq 'simpleInput');
next if ( $type eq 'simpleInput' );
ok( $forms{$type}, "Found $type" );
delete $forms{$type};
$count++;
}
}
ok(!%forms, "No unused forms");
ok( !%forms, "No unused forms" );
$count++;
done_testing($count);