1#!/usr/bin/perl
2
3use Test::More tests => 19;
4use Carp;
5
6use strict;
7use warnings;
8
9use Net::DAV::LockManager ();
10use Net::DAV::LockManager::Simple ();
11
12{
13    # Validate parameters
14    my $db = Net::DAV::LockManager::Simple->new();
15    my $mgr = Net::DAV::LockManager->new($db);
16    did_die( sub { $mgr->unlock() },                          qr/hash reference/,           'No args' );
17    did_die( sub { $mgr->unlock( 'fred' ) },                  qr/hash reference/,           'String arg' );
18    did_die( sub { $mgr->unlock({}) },                        qr/Missing required/,         'No params' );
19    did_die( sub { $mgr->unlock({ 'user' => 'gwj', 'token' => '1234' }) },      qr/Missing required 'path'/,  'Missing path' );
20    did_die( sub { $mgr->unlock({ 'path' => '/tmp/file', 'token' => '1234' }) }, qr/Missing required 'user'/, 'Missing user' );
21    did_die( sub { $mgr->unlock({ 'path' => '/tmp/file', 'user' => 'gwj' }) }, qr/Missing required 'token'/, 'Missing token' );
22}
23
24{
25    # Path checking
26    my $db = Net::DAV::LockManager::Simple->new();
27    my $mgr = Net::DAV::LockManager->new($db);
28    foreach my $path ( '', qw{/.. /fred/.. /../fred /fred/../bianca /fred/./bianca fred/ fred} ) {
29        did_die( sub { $mgr->unlock({ 'path' => $path, 'user'=>'gwj', 'token' => '1234' }) }, qr/Not a clean path/, "$path: Not an allowed path" );
30    }
31}
32
33{
34    # Owner checking
35    my $db = Net::DAV::LockManager::Simple->new();
36    my $mgr = Net::DAV::LockManager->new($db);
37    foreach my $user ( '', qw{aa()bb /fred/ ab+cd $fred} ) {
38        did_die( sub { $mgr->unlock({ 'path' => '/fred/foo', 'user'=>$user, 'token' => '1234' }) }, qr/Not a valid user/, "$user Not an allowed user" );
39    }
40}
41
42sub did_die {
43    my ($code, $regex, $label) = @_;
44    if ( eval { $code->(); } ) {
45        fail( "$label: no exception" );
46        return;
47    }
48    like( $@, $regex, $label );
49}
50