265 lines
7.9 KiB
PHP
265 lines
7.9 KiB
PHP
|
<?php
|
||
|
|
||
|
require_once 'Sabre/HTTP/ResponseMock.php';
|
||
|
|
||
|
class Sabre_DAV_ServerCopyMoveTest extends PHPUnit_Framework_TestCase {
|
||
|
|
||
|
private $response;
|
||
|
/**
|
||
|
* @var Sabre_DAV_Server
|
||
|
*/
|
||
|
private $server;
|
||
|
|
||
|
function setUp() {
|
||
|
|
||
|
$this->response = new Sabre_HTTP_ResponseMock();
|
||
|
$dir = new Sabre_DAV_FS_Directory(SABRE_TEMPDIR);
|
||
|
$tree = new Sabre_DAV_ObjectTree($dir);
|
||
|
$this->server = new Sabre_DAV_Server($tree);
|
||
|
$this->server->debugExceptions = true;
|
||
|
$this->server->httpResponse = $this->response;
|
||
|
file_put_contents(SABRE_TEMPDIR . '/test.txt', 'Test contents');
|
||
|
file_put_contents(SABRE_TEMPDIR . '/test2.txt', 'Test contents2');
|
||
|
mkdir(SABRE_TEMPDIR . '/col');
|
||
|
file_put_contents(SABRE_TEMPDIR . 'col/test.txt', 'Test contents');
|
||
|
|
||
|
}
|
||
|
|
||
|
function tearDown() {
|
||
|
|
||
|
$cleanUp = array('test.txt','testput.txt','testcol','test2.txt','test3.txt','col/test.txt','col','col2/test.txt','col2');
|
||
|
foreach($cleanUp as $file) {
|
||
|
$tmpFile = SABRE_TEMPDIR . '/' . $file;
|
||
|
if (file_exists($tmpFile)) {
|
||
|
|
||
|
if (is_dir($tmpFile)) {
|
||
|
rmdir($tmpFile);
|
||
|
} else {
|
||
|
unlink($tmpFile);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function testCopyOverWrite() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/test2.txt',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Length' => '0',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test2.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testCopyToSelf() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/test.txt',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testMoveToSelf() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'MOVE',
|
||
|
'HTTP_DESTINATION' => '/test.txt',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 403 Forbidden',$this->response->status,'Received an incorrect HTTP status. Full body inspection: ' . $this->response->body);
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR. '/test.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testMoveOverWrite() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'MOVE',
|
||
|
'HTTP_DESTINATION' => '/test2.txt',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Length' => 0,
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 204 No Content',$this->response->status);
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
|
||
|
$this->assertFalse(file_exists(SABRE_TEMPDIR . '/test.txt'),'The sourcefile test.txt should no longer exist at this point');
|
||
|
|
||
|
}
|
||
|
|
||
|
function testBlockedOverWrite() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/test2.txt',
|
||
|
'HTTP_OVERWRITE' => 'F',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Type' => 'application/xml; charset=utf-8',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 412 Precondition failed',$this->response->status);
|
||
|
$this->assertEquals('Test contents2',file_get_contents(SABRE_TEMPDIR . '/test2.txt'));
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
function testNonExistantParent() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/testcol2/test2.txt',
|
||
|
'HTTP_OVERWRITE' => 'F',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Type' => 'application/xml; charset=utf-8',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 409 Conflict',$this->response->status);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testRandomOverwriteHeader() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/testcol2/test2.txt',
|
||
|
'HTTP_OVERWRITE' => 'SURE!',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 400 Bad request',$this->response->status);
|
||
|
|
||
|
}
|
||
|
|
||
|
function testCopyDirectory() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/col',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/col2',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Length' => '0',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testSimpleCopyFile() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/test.txt',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/test3.txt',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Length' => '0',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status);
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/test3.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
function testSimpleCopyCollection() {
|
||
|
|
||
|
$serverVars = array(
|
||
|
'REQUEST_URI' => '/col',
|
||
|
'REQUEST_METHOD' => 'COPY',
|
||
|
'HTTP_DESTINATION' => '/col2',
|
||
|
);
|
||
|
|
||
|
$request = new Sabre_HTTP_Request($serverVars);
|
||
|
$this->server->httpRequest = ($request);
|
||
|
$this->server->exec();
|
||
|
|
||
|
$this->assertEquals('HTTP/1.1 201 Created',$this->response->status,'Incorrect status received. Full response body: ' . $this->response->body);
|
||
|
|
||
|
$this->assertEquals(array(
|
||
|
'Content-Length' => '0',
|
||
|
),
|
||
|
$this->response->headers
|
||
|
);
|
||
|
|
||
|
|
||
|
$this->assertEquals('Test contents',file_get_contents(SABRE_TEMPDIR . '/col2/test.txt'));
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|