Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F1820411
ServerPreconditionTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Size
10 KB
Subscribers
None
ServerPreconditionTest.php
View Options
<?php
namespace
Sabre\DAV
;
use
Sabre\HTTP
;
require_once
'Sabre/HTTP/ResponseMock.php'
;
class
ServerPreconditionsTest
extends
\PHPUnit_Framework_TestCase
{
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
function
testIfMatchNoNode
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/bar'
,
[
'If-Match'
=>
'*'
]);
$httpResponse
=
new
HTTP\Response
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
*/
function
testIfMatchHasNode
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-Match'
=>
'*'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
function
testIfMatchWrongEtag
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-Match'
=>
'1234'
]);
$httpResponse
=
new
HTTP\Response
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
*/
function
testIfMatchCorrectEtag
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-Match'
=>
'"abc123"'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
* Evolution sometimes uses \" instead of " for If-Match headers.
*
* @depends testIfMatchCorrectEtag
*/
function
testIfMatchEvolutionEtag
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-Match'
=>
'
\\
"abc123
\\
"'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
function
testIfMatchMultiple
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-Match'
=>
'"hellothere", "abc123"'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
function
testIfNoneMatchNoNode
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/bar'
,
[
'If-None-Match'
=>
'*'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
function
testIfNoneMatchHasNode
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'POST'
,
'/foo'
,
[
'If-None-Match'
=>
'*'
]);
$httpResponse
=
new
HTTP\Response
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
*/
function
testIfNoneMatchWrongEtag
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'POST'
,
'/foo'
,
[
'If-None-Match'
=>
'"1234"'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
function
testIfNoneMatchWrongEtagMultiple
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'POST'
,
'/foo'
,
[
'If-None-Match'
=>
'"1234", "5678"'
]);
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
public
function
testIfNoneMatchCorrectEtag
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'POST'
,
'/foo'
,
[
'If-None-Match'
=>
'"abc123"'
]);
$httpResponse
=
new
HTTP\Response
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
public
function
testIfNoneMatchCorrectEtagMultiple
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'POST'
,
'/foo'
,
[
'If-None-Match'
=>
'"1234, "abc123"'
]);
$httpResponse
=
new
HTTP\Response
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
*/
public
function
testIfNoneMatchCorrectEtagAsGet
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-None-Match'
=>
'"abc123"'
]);
$server
->
httpResponse
=
new
HTTP\ResponseMock
();
$this
->
assertFalse
(
$server
->
checkPreconditions
(
$httpRequest
,
$server
->
httpResponse
));
$this
->
assertEquals
(
304
,
$server
->
httpResponse
->
getStatus
());
$this
->
assertEquals
([
'ETag'
=>
[
'"abc123"'
]],
$server
->
httpResponse
->
getHeaders
());
}
/**
* This was a test written for issue #515.
*/
public
function
testNoneMatchCorrectEtagEnsureSapiSent
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$server
->
sapi
=
new
HTTP\SapiMock
();
HTTP\SapiMock
::
$sent
=
0
;
$httpRequest
=
new
HTTP\Request
(
'GET'
,
'/foo'
,
[
'If-None-Match'
=>
'"abc123"'
]);
$server
->
httpRequest
=
$httpRequest
;
$server
->
httpResponse
=
new
HTTP\ResponseMock
();
$server
->
exec
();
$this
->
assertFalse
(
$server
->
checkPreconditions
(
$httpRequest
,
$server
->
httpResponse
));
$this
->
assertEquals
(
304
,
$server
->
httpResponse
->
getStatus
());
$this
->
assertEquals
([
'ETag'
=>
[
'"abc123"'
],
'X-Sabre-Version'
=>
[
Version
::
VERSION
],
],
$server
->
httpResponse
->
getHeaders
());
$this
->
assertEquals
(
1
,
HTTP\SapiMock
::
$sent
);
}
/**
*/
public
function
testIfModifiedSinceUnModified
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_MODIFIED_SINCE'
=>
'Sun, 06 Nov 1994 08:49:37 GMT'
,
'REQUEST_URI'
=>
'/foo'
));
$server
->
httpResponse
=
new
HTTP\ResponseMock
();
$this
->
assertFalse
(
$server
->
checkPreconditions
(
$httpRequest
,
$server
->
httpResponse
));
$this
->
assertEquals
(
304
,
$server
->
httpResponse
->
status
);
$this
->
assertEquals
(
array
(
'Last-Modified'
=>
[
'Sat, 06 Apr 1985 23:30:00 GMT'
],
),
$server
->
httpResponse
->
getHeaders
());
}
/**
*/
public
function
testIfModifiedSinceModified
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_MODIFIED_SINCE'
=>
'Tue, 06 Nov 1984 08:49:37 GMT'
,
'REQUEST_URI'
=>
'/foo'
));
$httpRequest
=
$httpRequest
;
$httpResponse
=
new
HTTP\ResponseMock
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
public
function
testIfModifiedSinceInvalidDate
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_MODIFIED_SINCE'
=>
'Your mother'
,
'REQUEST_URI'
=>
'/foo'
));
$httpRequest
=
$httpRequest
;
$httpResponse
=
new
HTTP\ResponseMock
();
// Invalid dates must be ignored, so this should return true
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
public
function
testIfModifiedSinceInvalidDate2
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_MODIFIED_SINCE'
=>
'Sun, 06 Nov 1994 08:49:37 EST'
,
'REQUEST_URI'
=>
'/foo'
));
$httpResponse
=
new
HTTP\ResponseMock
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
*/
public
function
testIfUnmodifiedSinceUnModified
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_UNMODIFIED_SINCE'
=>
'Sun, 06 Nov 1994 08:49:37 GMT'
,
'REQUEST_URI'
=>
'/foo'
));
$httpResponse
=
new
HTTP\Response
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
/**
* @expectedException Sabre\DAV\Exception\PreconditionFailed
*/
public
function
testIfUnmodifiedSinceModified
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_UNMODIFIED_SINCE'
=>
'Tue, 06 Nov 1984 08:49:37 GMT'
,
'REQUEST_URI'
=>
'/foo'
));
$httpResponse
=
new
HTTP\ResponseMock
();
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
);
}
/**
*/
public
function
testIfUnmodifiedSinceInvalidDate
()
{
$root
=
new
SimpleCollection
(
'root'
,
array
(
new
ServerPreconditionsNode
()));
$server
=
new
Server
(
$root
);
$httpRequest
=
HTTP\Sapi
::
createFromServerArray
(
array
(
'HTTP_IF_UNMODIFIED_SINCE'
=>
'Sun, 06 Nov 1984 08:49:37 CET'
,
'REQUEST_URI'
=>
'/foo'
));
$httpResponse
=
new
HTTP\ResponseMock
();
$this
->
assertTrue
(
$server
->
checkPreconditions
(
$httpRequest
,
$httpResponse
));
}
}
class
ServerPreconditionsNode
extends
File
{
function
getETag
()
{
return
'"abc123"'
;
}
function
getLastModified
()
{
/* my birthday & time, I believe */
return
strtotime
(
'1985-04-07 01:30 +02:00'
);
}
function
getName
()
{
return
'foo'
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Dec 22, 2:47 AM (6 d, 1 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
914060
Default Alt Text
ServerPreconditionTest.php (10 KB)
Attached To
rDAVCAL DokuWiki DAVCal PlugIn
Event Timeline
Log In to Comment