use Test::More 'no_plan'; use Test::Exception; use Data::Dumper; use_ok( 'RDF::AllegroGraph::Catalog4' ); use constant DONE => 1; my $AG_SERVER = $ENV{AG4_SERVER}; unless ($AG_SERVER) { diag ('Tests skipped. Use "export AG4_SERVER=http://my.server:port" before running the test suite. See README for details.'); exit; } if (DONE) { use RDF::AllegroGraph::Server; my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); my %cats = $server->catalogs; isa_ok ($cats{'/'}, 'RDF::AllegroGraph::Catalog4'); isa_ok ($cats{'/'}, 'RDF::AllegroGraph::Catalog'); ok ($cats{'/'}->{SERVER} == $server, 'server captured'); } diag ("the following only works if a named catalog 'scratch' is configured"); if (DONE) { # protocol versions my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); { my $root = new RDF::AllegroGraph::Catalog4 (NAME => '/', SERVER => $server); like ($root->protocol, qr/4/, 'protocol version for the root'); } TODO: { local $TODO = 'protocols for named catalogs'; my $scratch = new RDF::AllegroGraph::Catalog4 (NAME => '/scratch', SERVER => $server); my $proto; eval { $proto = $scratch->protocol; }; like ($proto, qr/4/, 'protocol version'); } } if (DONE) { # this only works if "Dynamic Catalogs" are configured my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); my $c = $server->catalog ('/scratch'); isa_ok ($c, 'RDF::AllegroGraph::Catalog4'); isa_ok ($c, 'RDF::AllegroGraph::Catalog'); is ($c->{NAME}, '/scratch', 'existing: NAME'); is ($c->{SERVER}, $server, 'existing: server hook'); throws_ok { $c = $server->catalog ('/scratchy'); } qr /cannot/, 'non-existing catalog not found'; diag ("the following only works if 'Dynamic Catalogs' are configured"); use Fcntl; $c = $server->catalog ('/scratchy', O_CREAT); isa_ok ($c, 'RDF::AllegroGraph::Catalog4'); isa_ok ($c, 'RDF::AllegroGraph::Catalog'); is ($c->{NAME}, '/scratchy', 'newly created: NAME'); is ($c->{SERVER}, $server, 'newly created: server hook'); my $c2 = $server->catalog ('/scratchy'); isa_ok ($c2, 'RDF::AllegroGraph::Catalog4'); isa_ok ($c2, 'RDF::AllegroGraph::Catalog'); is ($c2->{NAME}, '/scratchy', 'newly created: NAME'); is ($c2->{SERVER}, $server, 'newly created: server hook'); $c2->disband; throws_ok { $c = $server->catalog ('/scratchy'); } qr /cannot/, 'deleted catalog not found'; } if (DONE) { # test root catalog repo creation my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); my $root = new RDF::AllegroGraph::Catalog4 (NAME => '/', SERVER => $server); my @repos = $root->repositories; ok (scalar @repos == 0, 'no repositories at start'); throws_ok { use Fcntl; $root->repository ('/scratchxxx/catlitter1', O_CREAT); } qr/root/, 'wrong naming for catalogs'; use Fcntl; my $model1 = $root->repository ('/catlitter1', O_CREAT); @repos = $root->repositories; ok (scalar @repos == 1, 'one repository created'); is ($repos[0]->id, '/catlitter1', 'with correct name'); my $model2 = $root->repository ('/catlitter2', O_CREAT); @repos = $root->repositories; ok (scalar @repos == 2, 'two repositories created'); ok (eq_array ([ map { $_->id } @repos ], [ '/catlitter1', '/catlitter2' ]), 'with correct names'); $model1->disband; $model2->disband; @repos = $root->repositories; ok (scalar @repos == 0, 'none anymore'); } if (DONE) { # test non-existing catalog my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); throws_ok { new RDF::AllegroGraph::Catalog4 (NAME => '/rumstibumsti', SERVER => $server); } qr/does not ex/, 'non-existing catalog detected at constructor time'; } if (DONE) { # test scratch catalog, if it exists my $server = new RDF::AllegroGraph::Server (ADDRESS => $AG_SERVER); eval { my $scratch = new RDF::AllegroGraph::Catalog4 (NAME => '/scratch', SERVER => $server); my @repos = $scratch->repositories; ok (scalar @repos == 0, 'no repositories at start'); throws_ok { use Fcntl; $scratch->repository ('/scratchxxx/catlitter1', O_CREAT); } qr/named/, 'wrong naming for catalogs'; my $model1 = $scratch->repository ('/scratch/catlitter1', O_CREAT); @repos = $scratch->repositories; ok (scalar @repos == 1, 'one repository created'); is ($repos[0]->id, '/scratch/catlitter1', 'with correct name'); my $model2 = $scratch->repository ('/scratch/catlitter2', O_CREAT); @repos = $scratch->repositories; ok (scalar @repos == 2, 'two repositories created'); ok (eq_array ([ map { $_->id } @repos ], [ '/scratch/catlitter1', '/scratch/catlitter2' ]), 'with correct names'); $model1->disband; $model2->disband; @repos = $scratch->repositories; ok (scalar @repos == 0, 'none anymore'); }; if ($@) { diag ('Test on catalog scratch ... uhm scratch, because it does not exist on the server'); } } __END__