aboutsummaryrefslogtreecommitdiff
path: root/perl/t/admin.t
diff options
context:
space:
mode:
authorRuss Allbery <rra@stanford.edu>2008-01-23 21:34:30 +0000
committerRuss Allbery <rra@stanford.edu>2008-01-23 21:34:30 +0000
commitc480fcfac86a83e2e985457f0eb36c516c41d34e (patch)
tree77d0b83b7ac8439c1522c3ef7a2d534dd1ac1d08 /perl/t/admin.t
parent41fca795ebc43f83746c6e3b965b03330690314e (diff)
Add Wallet::Admin interfaces to list all objects and all ACLs in the
database.
Diffstat (limited to 'perl/t/admin.t')
-rwxr-xr-xperl/t/admin.t69
1 files changed, 69 insertions, 0 deletions
diff --git a/perl/t/admin.t b/perl/t/admin.t
new file mode 100755
index 0000000..4c387bd
--- /dev/null
+++ b/perl/t/admin.t
@@ -0,0 +1,69 @@
+#!/usr/bin/perl -w
+# $Id$
+#
+# t/admin.t -- Tests for wallet administrative interface.
+#
+# Written by Russ Allbery <rra@stanford.edu>
+# Copyright 2008 Board of Trustees, Leland Stanford Jr. University
+#
+# See LICENSE for licensing terms.
+
+use Test::More tests => 22;
+
+use Wallet::Admin;
+use Wallet::Schema;
+use Wallet::Server;
+
+use lib 't/lib';
+use Util;
+
+# We test database setup in init.t, so just do the basic setup here.
+db_setup;
+my $admin = eval { Wallet::Admin->new };
+is ($@, '', 'Wallet::Admin creation did not die');
+ok ($admin->isa ('Wallet::Admin'), ' and returned the right class');
+is ($admin->initialize ('admin@EXAMPLE.COM'), 1,
+ ' and initialization succeeds');
+
+# We have an empty database, so we should see no objects and one ACL.
+my @objects = $admin->list_objects;
+is (scalar (@objects), 0, 'No objects in the database');
+is ($admin->error, undef, ' and no error');
+my @acls = $admin->list_acls;
+is (scalar (@acls), 1, 'One ACL in the database');
+is ($acls[0], 1, ' and that is ACL ID 1');
+
+# Register a base object so that we can create a simple object.
+my $schema = Wallet::Schema->new;
+$schema->register_object ($admin->dbh, 'base', 'Wallet::Object::Base');
+
+# Create an object.
+$server = eval { Wallet::Server->new ('admin@EXAMPLE.COM', 'localhost') };
+is ($@, '', 'Creating a server instance did not die');
+is ($server->create ('base', 'service/admin'), 1,
+ ' and creating base:service/admin succeeds');
+
+# Now, we should see one object.
+@objects = $admin->list_objects;
+is (scalar (@objects), 1, ' and now there is one object');
+is ($objects[0][0], 'base', ' with the right type');
+is ($objects[0][1], 'service/admin', ' and the right name');
+
+# Create another ACL.
+is ($server->acl_create ('first'), 1, 'ACL creation succeeds');
+@acls = $admin->list_acls;
+is (scalar (@acls), 2, ' and now there are two ACLs');
+is ($acls[0], 1, ' and the first ID is correct');
+is ($acls[1], 2, ' and the second ID is correct');
+
+# Delete that ACL and create another.
+is ($server->acl_create ('second'), 1, 'Second ACL creation succeeds');
+is ($server->acl_destroy ('first'), 1, ' and deletion of the first succeeds');
+@acls = $admin->list_acls;
+is (scalar (@acls), 2, ' and there are still two ACLs');
+is ($acls[0], 1, ' and the first ID is still the same');
+is ($acls[1], 3, ' but the second ID has changed');
+
+# Clean up.
+is ($admin->destroy, 1, 'Destruction succeeds');
+unlink 'wallet-db';