diff options
Diffstat (limited to 'perl/t')
| -rwxr-xr-x | perl/t/object.t | 32 | ||||
| -rwxr-xr-x | perl/t/schema.t | 31 | ||||
| -rwxr-xr-x | perl/t/server.t | 58 | 
3 files changed, 111 insertions, 10 deletions
| diff --git a/perl/t/object.t b/perl/t/object.t index 3949786..2d60dd2 100755 --- a/perl/t/object.t +++ b/perl/t/object.t @@ -3,12 +3,13 @@  # Tests for the basic object implementation.  #  # Written by Russ Allbery <rra@stanford.edu> -# Copyright 2007, 2008 Board of Trustees, Leland Stanford Jr. University +# Copyright 2007, 2008, 2011 +#     The Board of Trustees of the Leland Stanford Junior University  #  # See LICENSE for licensing terms.  use POSIX qw(strftime); -use Test::More tests => 131; +use Test::More tests => 137;  use Wallet::ACL;  use Wallet::Admin; @@ -99,6 +100,23 @@ if ($object->expires ('', @trace)) {  is ($object->expires, undef, ' at which point it is cleared');  is ($object->expires ($now, @trace), 1, ' and setting it again works'); +# Comment. +is ($object->comment, undef, 'Comment is not set to start'); +if ($object->comment ('this is a comment', @trace)) { +    ok (1, ' and setting it works'); +} else { +    is ($object->error, '', ' and setting it works'); +} +is ($object->comment, 'this is a comment', ' at which point it matches'); +if ($object->comment ('', @trace)) { +    ok (1, ' and clearing it works'); +} else { +    is ($object->error, '', ' and clearing it works'); +} +is ($object->comment, undef, ' at which point it is cleared'); +is ($object->comment (join (' ', ('this is a comment') x 5), @trace), 1, +    ' and setting it again works'); +  # ACLs.  for my $type (qw/get store show destroy flags/) {      is ($object->acl ($type), undef, "ACL $type is not set to start"); @@ -203,6 +221,8 @@ my $output = <<"EOO";      Destroy ACL: ADMIN        Flags ACL: ADMIN          Expires: $now +        Comment: this is a comment this is a comment this is a comment this is +                 a comment this is a comment            Flags: unchanging       Created by: $user     Created from: $host @@ -223,6 +243,8 @@ $output = <<"EOO";      Destroy ACL: ADMIN        Flags ACL: ADMIN          Expires: $now +        Comment: this is a comment this is a comment this is a comment this is +                 a comment this is a comment            Flags: locked unchanging       Created by: $user     Created from: $host @@ -267,6 +289,12 @@ $date  unset expires (was $now)      by $user from $host  $date  set expires to $now      by $user from $host +$date  set comment to this is a comment +    by $user from $host +$date  unset comment (was this is a comment) +    by $user from $host +$date  set comment to this is a comment this is a comment this is a comment this is a comment this is a comment +    by $user from $host  $date  set acl_get to ADMIN (1)      by $user from $host  $date  unset acl_get (was ADMIN (1)) diff --git a/perl/t/schema.t b/perl/t/schema.t index c66ad59..ce8a62a 100755 --- a/perl/t/schema.t +++ b/perl/t/schema.t @@ -8,11 +8,12 @@  #  # See LICENSE for licensing terms. -use Test::More tests => 15; +use Test::More tests => 16; -use DBI; -use Wallet::Config; -use Wallet::Schema; +use DBI (); +use POSIX qw(strftime); +use Wallet::Config (); +use Wallet::Schema ();  use lib 't/lib';  use Util; @@ -45,14 +46,34 @@ is (@$version, 1, 'metadata has correct number of rows');  is (@{ $version->[0] }, 1, ' and correct number of columns');  is ($version->[0][0], 1, ' and the schema version is correct'); -# Test upgrading the database from version 0. +# Test upgrading the database from version 0.  SQLite cannot drop table +# columns, so we have to kill the table and then recreate it.  $dbh->do ("drop table metadata"); +if (lc ($Wallet::Config::DB_DRIVER) eq 'sqlite') { +    ($sql) = grep { /create table objects/ } $schema->sql; +    $sql =~ s/ob_comment .*,//; +    $dbh->do ("drop table objects") +        or die "cannot drop objects table: $DBI::errstr\n"; +    $dbh->do ($sql) +        or die "cannot recreate objects table: $DBI::errstr\n"; +} else { +    $dbh->do ("alter table objects drop column ob_comment") +        or die "cannot drop ob_comment column: $DBI::errstr\n"; +}  eval { $schema->upgrade ($dbh) };  is ($@, '', "upgrade() doesn't die"); +$sql = "select md_version from metadata";  $version = $dbh->selectall_arrayref ($sql);  is (@$version, 1, ' and metadata has correct number of rows');  is (@{ $version->[0] }, 1, ' and correct number of columns');  is ($version->[0][0], 1, ' and the schema version is correct'); +$sql = "insert into objects (ob_type, ob_name, ob_created_by, ob_created_from, +    ob_created_on, ob_comment) values ('file', 'test', 'test', +    'test.example.org', ?, 'a test comment')"; +$dbh->do ($sql, undef, strftime ('%Y-%m-%d %T', localtime time)); +$sql = "select ob_comment from objects where ob_name = 'test'"; +my ($comment) = $dbh->selectrow_array ($sql); +is ($comment, 'a test comment', ' and ob_comment was added to objects');  # Test dropping the database.  eval { $schema->drop ($dbh) }; diff --git a/perl/t/server.t b/perl/t/server.t index ed92d6e..ad16151 100755 --- a/perl/t/server.t +++ b/perl/t/server.t @@ -3,11 +3,12 @@  # Tests for the wallet server API.  #  # Written by Russ Allbery <rra@stanford.edu> -# Copyright 2007, 2008, 2010 Board of Trustees, Leland Stanford Jr. University +# Copyright 2007, 2008, 2010, 2011 +#     The Board of Trustees of the Leland Stanford Junior University  #  # See LICENSE for licensing terms. -use Test::More tests => 355; +use Test::More tests => 377;  use POSIX qw(strftime);  use Wallet::Admin; @@ -199,6 +200,24 @@ is ($server->check ('base', 'service/test'), 0,  is ($server->destroy ('base', 'service/test'), undef, ' but not twice');  is ($server->error, 'cannot find base:service/test', ' with the right error'); +# Test manipulating comments. +is ($server->comment ('base', 'service/test'), undef, +    'Retrieving comment on an unknown object fails'); +is ($server->error, 'cannot find base:service/test', ' with the right error'); +is ($server->comment ('base', 'service/test', 'this is a comment'), undef, +    ' and setting it also fails'); +is ($server->error, 'cannot find base:service/test', ' with the right error'); +is ($server->comment ('base', 'service/admin'), undef, +    'Retrieving comment for the right object returns undef'); +is ($server->error, undef, ' but there is no error'); +is ($server->comment ('base', 'service/admin', 'this is a comment'), 1, +    ' and we can set it'); +is ($server->comment ('base', 'service/admin'), 'this is a comment', +    ' and get the value back'); +is ($server->comment ('base', 'service/admin', ''), 1, ' and clear it'); +is ($server->comment ('base', 'service/admin'), undef, ' and now it is gone'); +is ($server->error, undef, ' and still no error'); +  # Test manipulating expires.  my $now = strftime ('%Y-%m-%d %T', localtime time);  is ($server->expires ('base', 'service/test'), undef, @@ -393,6 +412,10 @@ is ($server->flag_clear ('base', 'service/admin', 'unchanging'), 1,  $history = <<"EOO";  DATE  create      by $admin from $host +DATE  set comment to this is a comment +    by $admin from $host +DATE  unset comment (was this is a comment) +    by $admin from $host  DATE  set expires to $now      by $admin from $host  DATE  unset expires (was $now) @@ -510,12 +533,15 @@ is ($server->store ('base', 'service/user1', 'stuff'), undef,  is ($server->error,      "cannot store base:service/user1: object type is immutable",      ' and the method is called'); +is ($server->comment ('base', 'service/user1', 'this is a comment'), 1, +    ' and set a comment');  $show = $server->show ('base', 'service/user1');  $show =~ s/(Created on:) [\d-]+ [\d:]+$/$1 0/m;  $expected = <<"EOO";             Type: base             Name: service/user1            Owner: user1 +        Comment: this is a comment       Created by: $admin     Created from: $host       Created on: 0 @@ -529,6 +555,8 @@ DATE  create      by $admin from $host  DATE  set owner to user1 (2)      by $admin from $host +DATE  set comment to this is a comment +    by $user1 from $host  EOO  $seen = $server->history ('base', 'service/user1');  $seen =~ s/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/DATE/gm; @@ -566,6 +594,11 @@ is ($server->attr ('base', 'service/user2', 'foo', ''), undef,  is ($server->error,      "$user1 not authorized to set attributes for base:service/user2",      ' with the right error'); +is ($server->comment ('base', 'service/user2', 'this is a comment'), undef, +    ' and set comment'); +is ($server->error, +    "$user1 not authorized to set comment for base:service/user2", +    ' with the right error');  # And only some things on an object we own with some ACLs.  $result = eval { $server->get ('base', 'service/both') }; @@ -702,8 +735,27 @@ is ($server->history ('base', 'service/user1'), undef,      ' or see history for it');  is ($server->error, "$user2 not authorized to show base:service/user1",      ' with the right error'); +is ($server->comment ('base', 'service/user1', 'this is a comment'), undef, +    ' or set a comment for it'); +is ($server->error, +    "$user2 not authorized to set comment for base:service/user1", +    ' with the right error'); -# And only some things on an object we own with some ACLs. +# Test that setting a comment is controlled by the owner but retrieving it is +# controlled by the show ACL. +$result = eval { $server->get ('base', 'service/both') }; +is ($result, undef, 'We can get an object we jointly own'); +is ($@, "Do not instantiate Wallet::Object::Base directly\n", +    ' and the method is called'); +is ($server->comment ('base', 'service/both', 'this is a comment'), 1, +    ' and can set a comment on it'); +is ($server->error, undef, ' with no error'); +is ($server->comment ('base', 'service/both'), undef, +    ' but cannot see the comment on it'); +is ($server->error, "$user2 not authorized to show base:service/both", +    ' with the right error'); + +# And can only do some things on an object we own with some ACLs.  $result = eval { $server->get ('base', 'service/both') };  is ($result, undef, 'We can get an object we jointly own');  is ($@, "Do not instantiate Wallet::Object::Base directly\n", | 
