summaryrefslogtreecommitdiffstats
path: root/debian/perl-framework/t/modules/dav.t
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/perl-framework/t/modules/dav.t168
1 files changed, 168 insertions, 0 deletions
diff --git a/debian/perl-framework/t/modules/dav.t b/debian/perl-framework/t/modules/dav.t
new file mode 100644
index 0000000..73046cd
--- /dev/null
+++ b/debian/perl-framework/t/modules/dav.t
@@ -0,0 +1,168 @@
+use strict;
+use warnings FATAL => 'all';
+
+use Apache::Test;
+use Apache::TestRequest;
+use Apache::TestUtil;
+use HTTP::Date;
+
+##
+## mod_dav tests
+##
+
+plan tests => 19, [qw(dav HTTP::DAV)];
+require HTTP::DAV;
+
+my $vars = Apache::Test::vars();
+my $dav = HTTP::DAV->new;
+my $server = "$vars->{servername}:$vars->{port}";
+
+my $htdocs = Apache::Test::vars('documentroot');
+my $response;
+my $dir = "modules/dav";
+my $uri = "/$dir/dav.html";
+my $body = <<CONTENT;
+<html>
+ <body>
+ <center>
+ <h1>mod_dav test page</h1>
+ this is a page generated by<br>
+ the mod_dav test in the Apache<br>
+ perl test suite.<br>
+ </center>
+ </body>
+</html>
+CONTENT
+
+## make sure its clean before we begin ##
+unlink "$htdocs$uri" if -e "$htdocs$uri";
+mkdir "$htdocs/$dir", oct('755') unless -e "$htdocs/$dir";
+
+Apache::TestUtil::t_chown("$htdocs/$dir");
+
+## set up resource and lock it ##
+my $resource = $dav->new_resource( -uri => "http://$server$uri");
+$response = $resource->lock;
+print "resource lock test:\n";
+ok $response->is_success;
+
+## write new resource ##
+$response = $resource->put($body);
+print "DAV put test:\n";
+ok $response->is_success;
+
+## get properties ##
+## Wait until none of the returned time
+## properties equals "now"
+sleep(2);
+$response = $resource->propfind;
+print "getting DAV resource properties:\n";
+ok $response->is_success;
+
+my $createdate = $resource->get_property( "creationdate" );
+my $lastmodified = $resource->get_property( "getlastmodified" );
+my $now = HTTP::Date::time2str(time());
+print "created: $createdate\n";
+print "modified: $lastmodified\n";
+print "now: $now\n";
+ok $createdate ne $now;
+ok $createdate eq $lastmodified;
+
+## should be locked ##
+print "resource lock status test:\n";
+ok $resource->is_locked;
+
+## unlock ##
+print "resource unlock test:\n";
+$response = $resource->unlock;
+ok $response->is_success;
+
+## should be unlocked ##
+print "resource lock status test:\n";
+$response = $resource->is_locked;
+ok !$resource->is_locked;
+
+## verify new resource using regular http get ##
+my $actual = GET_BODY $uri;
+print "getting uri...\nexpect:\n->$body<-\ngot:\n->$actual<-\n";
+ok $actual eq $body;
+
+
+## testing with second dav client ##
+my $d2 = HTTP::DAV->new;
+my $r2 = $d2->new_resource( -uri => "http://$server$uri");
+
+## put an unlocked resource (will work) ##
+$response = $r2->get;
+my $b2 = $r2->get_content;
+$b2 =~ s#<h1>mod_dav test page</h1>#<h1>mod_dav test page take two</h1>#;
+
+print "putting with 2nd dav client (on unlocked resource)\n";
+$response = $r2->put($b2);
+ok $response->is_success;
+
+$actual = GET_BODY $uri;
+print "getting new uri...\nexpect:\n->$b2<-\ngot:\n->$actual<-\n";
+ok $actual eq $b2;
+
+## client 1 locks, client 2 should not be able to lock ##
+print "client 1 locking resource\n";
+$response = $resource->lock
+(
+ -owner => 'mod_dav test client 1',
+ -depth => 'Infinity',
+ -scope => 'exclusive',
+ -type => 'write',
+ -timeout => 120
+);
+ok $response->is_success;
+
+print "client 2 attempting to lock same resource\n";
+$response = $r2->lock
+(
+ -owner => 'mod_dav test client 2',
+ -depth => 'Infinity',
+ -scope => 'exclusive',
+ -type => 'write',
+ -timeout => 120
+);
+ok !$response->is_success;
+
+## client 2 should not be able to put because the resource is already locked by client 1 ##
+$response = $r2->get;
+my $b3 = $r2->get_content;
+$b3 =~ s#mod_dav#f00#g;
+
+print "client 2 attempting to put resource locked by client 1\n";
+$response = $r2->put($b3);
+ok !$response->is_success;
+
+print "verifying all is well through http\n";
+$actual = GET_BODY $uri;
+print "getting new uri...\nexpect:\n->$b2<-\ngot:\n->$actual<-\n";
+ok $actual ne $b3;
+ok $actual eq $b2;
+
+## delete resource ##
+$response = $resource->forcefully_unlock_all; ## trusing this will work
+$response = $resource->delete;
+print "resource delete test:\n";
+ok $response->is_success;
+
+$actual = GET_RC $uri;
+print "expect 404 not found got: $actual\n";
+ok $actual == 404;
+
+## PR 49825 ##
+my $user_agent = $dav->get_user_agent;
+# invalid content-range header
+$user_agent->default_header('Content-Range' => 'bytes 1-a/44' );
+$response = $resource->put($body);
+$actual = $response->code;
+print "PR 49825: expect 400 bad request got: $actual\n";
+ok $actual == 400;
+$user_agent->default_header('Content-Range' => undef);
+
+## clean up ##
+rmdir "$htdocs/$dir/.DAV" or print "warning: could not remove .DAV dir: $!";
+rmdir "$htdocs/$dir" or print "warning: could not remove dav dir: $!";