diff --git a/lib/AccountManager/Metadata.pm b/lib/AccountManager/Metadata.pm index 2b73fc4469915b3a7c0810004a282eb9adc14383..41fce727e313b77168fa131865c37cbd8a13bace 100644 --- a/lib/AccountManager/Metadata.pm +++ b/lib/AccountManager/Metadata.pm @@ -55,6 +55,7 @@ sub parse { next unless $child->nodeType() == XML_ELEMENT_NODE; if ($child->localname() eq 'IDPSSODescriptor') { + # skip immediatly if requested type differs next ENTITY if $args{type} && $args{type} ne 'idp'; $data->{type} = 'idp'; @@ -81,6 +82,7 @@ sub parse { } } elsif ($child->localname() eq 'SPSSODescriptor') { + # skip immediatly if requested type differs next ENTITY if $args{type} && $args{type} ne 'sp'; $data->{type} = 'sp'; @@ -169,6 +171,10 @@ sub parse { } } + # skip finaly if specific type was requested, + # and no identifiable type was found + next ENTITY if $args{type} && !$data->{type}; + push @array, $data; } diff --git a/t/metadata.t b/t/metadata.t index cecd79abc735602abbe2d2fda0a1bb8cef5d55f2..4415581fbbe199ea439ba0414fe1ff2961b43ece 100755 --- a/t/metadata.t +++ b/t/metadata.t @@ -100,6 +100,6 @@ ok(scalar @$none == 0, 'filtered metadata extraction: result count'); my $idp = $metadata->parse(type => 'idp'); ok(defined $idp, 'filtered metadata extraction: defined result'); ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type'); -ok(scalar @$idp == 2561, 'filtered metadata extraction: result count'); +ok(scalar @$idp == 2556, 'filtered metadata extraction: result count'); is($idp->[0]->{type}, 'idp', 'filtered entity has expected type');