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