File: 4_multistatus.t

package info (click to toggle)
libhttp-dav-perl 0.38-1
  • links: PTS
  • area: main
  • in suites: squeeze, wheezy
  • size: 512 kB
  • ctags: 406
  • sloc: perl: 3,618; xml: 90; makefile: 35; sh: 20
file content (148 lines) | stat: -rwxr-xr-x 4,676 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/local/bin/perl -w
use strict;
use HTTP::DAV;
use Test;
use lib 't';

# Tests Response.pm's ability to handle multistatus documents.
# Prerequisite: Resource.pm's _XML_parse_multistatus works.

my $TESTS;
$TESTS=20;
plan tests => $TESTS;

my $dav = HTTP::DAV->new;
HTTP::DAV::DebugLevel(3);

my $resource = $dav->new_resource( -uri => 'http://testserver:8080/test/' );

# MAKE OURSELVES A DUMMY REQUEST
my $request = HTTP::Request->new(PROPFIND => 'http://testserver:8080/test/' );
print "REQUEST>>: " . $request->as_string();

# MAKE OURSELVES A DUMMY RESPONSE
# From perldoc HTTP::Response
# $r = HTTP::Response->new($rc, [$msg, [$header, [$content]]])
#      Constructs a new `HTTP::Response' object describing a
#      response with response code `$rc' and optional message
#      `$msg'.  The message is a short human readable single
#      line string that explains the response code.

my $headers = HTTP::Headers->new();
$headers->header('Date' => 'Thu, 03 Feb 2001 00:00:00 GMT');
$headers->header('Content-Type' => 'text/xml; charset="utf-8"');

# LOAD t/multistatus.xml AS OUR CONTENT
open(F,"t/multistatus.xml") || die("Couldn't find multistatus.xml");;
my $content;
while(<F>) { $content.=$_ };

my $response = HTTP::DAV::Response->new("207","Multi-Status",$headers,$content);

# Put the dummy request into teh dummy response. Not 
# really required but HTTP::Response dies when you 
# do an as_string if you don't do this first.
$response->request($request);

# Requires the response code to be reset 
# for older versions of LWP 
$response->set_message( $response->code );

# A 207 will return OK. But down 
# further it should fail because their will be 
# sub-status's that fail.
if (! ok($response->is_success) ) {
   print $response->message() ."\n";
}

# use XML::DOM to parse the result.
my $resource_list;
eval {
my $parser = new XML::DOM::Parser;
my $doc = $parser->parse($response->content);

# We're only interested in the error codes that come out of $resp.
$resource_list = $resource->_XML_parse_multistatus( $doc, $response ) 
};
if ($@) {
   print "XML error: " . $@;
} else {
   ok(1);
}

print "RESPONSE>>: " . $response->as_string();

# Check that the response is a multistatus
ok($response->is_multistatus());

# Check that the message returned is indeed 'Multistatus'
ok($response->message(), 'Multistatus');

# Check that the response successfully says that it failed
ok($response->is_success(),0);

# Check an array of messages
my @messages = $response->messages();
ok(scalar(@messages), 5);
ok($messages[4], '/Forbidden/');

# Check that the URI in at least one of the resourcs is absolute.
# Search for Parse 1 area in Resource.pm
ok($response->url_bynum(0),'/http\:\/\//');

# Check that there are five errors in the multistatus.
ok($response->response_count(),5-1);

# Check that the desc for status 1 and status 3 are ok 
ok($response->description_bynum(0), undef);
ok($response->description_bynum(2), "/Looks good to me/");

# Check that the code for status 5 is forbidden
ok($response->code_bynum(4), '403');

# Check the overall response description
ok($response->get_responsedescription(), 'There has been an access violation error.');

######################################################################
# Check some of the resources etc.
ok( $resource_list->count_resources(), 5);
my @progeny = $resource_list->get_resources();

my @urls = $resource_list->get_urls();
print join("\n",@urls) . "\n";

# Test getting slighlt different URI's.
$urls[1] =~ s/\/+$//g; # Remove the trailing slash from the collection
# Now see if we get the same resource.
my $resource1= $resource_list->get_member( $urls[1] );
print "Resource 1: " . $urls[1] . ": $resource1\n";
ok($progeny[1] eq $resource1 );

# Test removing the second last element (0,1,2,'3',4)
my $resource3 = $resource_list->get_member( $urls[3] );
my $resource3a= $resource_list->remove_resource( $resource3 );
print "Is Removed resource <-> sames as \$urls[3]?\n";
if ($resource3->get_uri eq $resource3a->get_uri ) {
   ok 1;
}
#if ($resource3 && $resource3->get_uri eq $urls[3] ) {
#   ok 1;
#}

# Test that we now only have 4 resoruces
my @urls2 = $resource_list->get_urls();
print join("\n",@urls2) . "\n";
ok ( scalar @urls2, 4 );


# Resource 1 has 2 locks types supported "exclusive:write" and "shared:write"
my $supportedlocks_arr = $progeny[0]->get_property('supportedlocks');
ok ( scalar(@$supportedlocks_arr), 2 );

# Resource 3 should have no locks supported.
$supportedlocks_arr = $progeny[2]->get_property('supportedlocks');
ok( ref($supportedlocks_arr) ne "ARRAY" );

print $progeny[4]->as_string();
ok($progeny[4]->get_property('author'),'/Johnson/');