Newer
Older
#!/usr/bin/perl
use strict;
use warnings;
use English qw(-no_match_vars);
use File::Temp;
use Test::More;
use Test::Exception;
use AccountManager::Metadata;
$metadata = AccountManager::Metadata->new();
} qr/^missing argument 'file'/,
'instanciation: no file argument';
throws_ok {
$metadata = AccountManager::Metadata->new(
file => '/no/such/file',
);
} qr/^non-existing file/,
'instanciation: non-existing file argument';
my $file1 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);
chmod 0000, $file1;
throws_ok {
$metadata = AccountManager::Metadata->new(
file => $file1->filename()
);
} qr/^non-readable file/,
'instanciation: non-readable file';
chmod 0644, $file1;
throws_ok {
$metadata = AccountManager::Metadata->new(
} qr/^Failed to parse file: \S+ parser error : Document is empty/,
'instanciation: empty file';
my $file2 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);
print $file2 <<EOF;
foo
EOF
close($file2);
throws_ok {
$metadata = AccountManager::Metadata->new(
} qr/^Failed to parse file: \S+ parser error : Start tag expected/,
'instanciation: non-xml file';
my $file3 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);
print $file3 <<EOF;
<?xml version="1.0" encoding="UTF-8" ?>
<root/>
EOF
close($file3);
throws_ok {
$metadata = AccountManager::Metadata->new(
file => $file3->filename()
);
} qr/^incorrect root element type 'root'/,
'instanciation: incorrect xml file';
$metadata = AccountManager::Metadata->new(
file => 't/edugain.xml'
);
} 'instanciation: edugain metadata';
my $all = $metadata->parse();
ok(defined $all, 'metadata extraction: defined result');
ok(ref $all eq 'ARRAY', 'metadata extraction: result type');
ok(scalar @$all == 4318, 'metadata extraction: result count');
my $sp = $metadata->parse(id => 'https://filesender.ipm.ir/');
ok(defined $sp, 'filtered metadata extraction: defined result');
ok(ref $sp eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$sp == 1, 'filtered metadata extraction: result count');
is($sp->[0]->{entityid}, 'https://filesender.ipm.ir/', 'filtered entity has expected ID');
my $none = $metadata->parse(id => 'https://no.such.sp/');
ok(defined $none, 'filtered metadata extraction: defined result');
ok(ref $none eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$none == 0, 'filtered metadata extraction: result count');
ok(defined $idp, 'filtered metadata extraction: defined result');
ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$idp == 2556, 'filtered metadata extraction: result count');
is($idp->[0]->{type}, 'idp', 'filtered entity has expected type');