aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/api.php128
-rw-r--r--tests/lib/avatar.php15
-rw-r--r--tests/lib/db/mdb2schemareader.php4
-rw-r--r--tests/lib/files/cache/cache.php55
-rw-r--r--tests/lib/files/cache/homecache.php121
-rw-r--r--tests/lib/files/filesystem.php121
-rw-r--r--tests/lib/files/storage/home.php29
-rw-r--r--tests/lib/files/storage/storage.php16
-rw-r--r--tests/lib/files/view.php5
-rw-r--r--tests/lib/request.php26
-rw-r--r--tests/lib/util.php49
11 files changed, 548 insertions, 21 deletions
diff --git a/tests/lib/api.php b/tests/lib/api.php
new file mode 100644
index 00000000000..95d75f15311
--- /dev/null
+++ b/tests/lib/api.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Copyright (c) 2013 Tom Needham <tom@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_API extends PHPUnit_Framework_TestCase {
+
+ // Helps build a response variable
+ function buildResponse($shipped, $data, $code) {
+ return array(
+ 'shipped' => $shipped,
+ 'response' => new OC_OCS_Result($data, $code),
+ 'app' => uniqid('testapp_', true),
+ );
+ }
+
+ // Validate details of the result
+ function checkResult($result, $success) {
+ // Check response is of correct type
+ $this->assertInstanceOf('OC_OCS_Result', $result);
+ // Check if it succeeded
+ /** @var $result OC_OCS_Result */
+ $this->assertEquals($success, $result->succeeded());
+ }
+
+ function dataProviderTestOneResult() {
+ return array(
+ array(100, true),
+ array(101, true),
+ array(997, false),
+ );
+ }
+
+ /**
+ * @dataProvider dataProviderTestOneResult
+ *
+ * @param $statusCode
+ * @param $succeeded
+ */
+ public function testOneResult($statusCode, $succeeded) {
+ // Setup some data arrays
+ $data1 = array(
+ 'users' => array(
+ 'tom' => array(
+ 'key' => 'value',
+ ),
+ 'frank' => array(
+ 'key' => 'value',
+ ),
+ ));
+
+ // Test merging one success result
+ $response = $this->buildResponse(true, $data1, $statusCode);
+ $result = OC_API::mergeResponses(array($response));
+ $this->assertEquals($response['response'], $result);
+ $this->checkResult($result, $succeeded);
+ }
+
+ function dataProviderTestMergeResponses() {
+ return array(
+ // Two shipped success results
+ array(true, 100, true, 100, true),
+ // Two shipped results, one success and one failure
+ array(true, 100, true, 997, false),
+ // Two shipped results, both failure
+ array(true, 997, true, 997, false),
+ // Two third party success results
+ array(false, 100, false, 100, true),
+ // Two third party results, one success and one failure
+ array(false, 100, false, 997, false),
+ // Two third party results, both failure
+ array(false, 997, false, 997, false),
+ // One of each, both success
+ array(false, 100, true, 100, true),
+ array(true, 100, false, 100, true),
+ // One of each, both failure
+ array(false, 997, true, 997, false),
+ // One of each, shipped success
+ array(false, 997, true, 100, true),
+ // One of each, third party success
+ array(false, 100, true, 997, false),
+ );
+ }
+ /**
+ * @dataProvider dataProviderTestMergeResponses
+ *
+ * Test the merging of multiple responses
+ * @param $statusCode1
+ * @param $statusCode2
+ * @param $succeeded
+ */
+ public function testMultipleMergeResponses($shipped1, $statusCode1, $shipped2, $statusCode2, $succeeded){
+ // Tests that app responses are merged correctly
+ // Setup some data arrays
+ $data1 = array(
+ 'users' => array(
+ 'tom' => array(
+ 'key' => 'value',
+ ),
+ 'frank' => array(
+ 'key' => 'value',
+ ),
+ ));
+
+ $data2 = array(
+ 'users' => array(
+ 'tom' => array(
+ 'key' => 'newvalue',
+ ),
+ 'jan' => array(
+ 'key' => 'value',
+ ),
+ ));
+
+ // Two shipped success results
+ $result = OC_API::mergeResponses(array(
+ $this->buildResponse($shipped1, $data1, $statusCode1),
+ $this->buildResponse($shipped2, $data2, $statusCode2),
+ ));
+ $this->checkResult($result, $succeeded);
+ $resultData = $result->getData();
+ $this->assertArrayHasKey('jan', $resultData['users']);
+ }
+
+}
diff --git a/tests/lib/avatar.php b/tests/lib/avatar.php
index 6e6faed2d2c..9cc14865a29 100644
--- a/tests/lib/avatar.php
+++ b/tests/lib/avatar.php
@@ -22,4 +22,19 @@ class Test_Avatar extends PHPUnit_Framework_TestCase {
$avatar->remove();
$this->assertEquals(false, $avatar->get());
}
+
+ public function testAvatarApi() {
+ $avatarManager = \OC::$server->getAvatarManager();
+ $avatar = $avatarManager->getAvatar(\OC_User::getUser());
+
+ $this->assertEquals(false, $avatar->get());
+
+ $expected = new OC_Image(\OC::$SERVERROOT.'/tests/data/testavatar.png');
+ $expected->resize(64);
+ $avatar->set($expected->data());
+ $this->assertEquals($expected->data(), $avatar->get()->data());
+
+ $avatar->remove();
+ $this->assertEquals(false, $avatar->get());
+ }
}
diff --git a/tests/lib/db/mdb2schemareader.php b/tests/lib/db/mdb2schemareader.php
index b9b241194fd..57cafa7c76b 100644
--- a/tests/lib/db/mdb2schemareader.php
+++ b/tests/lib/db/mdb2schemareader.php
@@ -57,13 +57,13 @@ class MDB2SchemaReader extends \PHPUnit_Framework_TestCase {
$this->assertNull($table->getColumn('clobfield')->getLength());
$this->assertFalse($table->getColumn('clobfield')->getAutoincrement());
- $this->assertSame('', $table->getColumn('clobfield')->getDefault());
+ $this->assertNull($table->getColumn('clobfield')->getDefault());
$this->assertTrue($table->getColumn('clobfield')->getNotnull());
$this->assertInstanceOf('Doctrine\DBAL\Types\TextType', $table->getColumn('clobfield')->getType());
$this->assertNull($table->getColumn('booleanfield')->getLength());
$this->assertFalse($table->getColumn('booleanfield')->getAutoincrement());
- $this->assertFalse($table->getColumn('booleanfield')->getDefault());
+ $this->assertNull($table->getColumn('booleanfield')->getDefault());
$this->assertInstanceOf('Doctrine\DBAL\Types\BooleanType', $table->getColumn('booleanfield')->getType());
$this->assertTrue($table->getColumn('booleanfield_true')->getDefault());
diff --git a/tests/lib/files/cache/cache.php b/tests/lib/files/cache/cache.php
index 247373a5cb9..052d70dd0b4 100644
--- a/tests/lib/files/cache/cache.php
+++ b/tests/lib/files/cache/cache.php
@@ -18,11 +18,11 @@ class LongId extends \OC\Files\Storage\Temporary {
class Cache extends \PHPUnit_Framework_TestCase {
/**
- * @var \OC\Files\Storage\Temporary $storage;
+ * @var \OC\Files\Storage\Temporary $storage ;
*/
private $storage;
/**
- * @var \OC\Files\Storage\Temporary $storage2;
+ * @var \OC\Files\Storage\Temporary $storage2 ;
*/
private $storage2;
@@ -137,6 +137,33 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertFalse($this->cache->inCache('folder/bar'));
}
+ public function testRootFolderSizeForNonHomeStorage() {
+ $dir1 = 'knownsize';
+ $dir2 = 'unknownsize';
+ $fileData = array();
+ $fileData[''] = array('size' => -1, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$dir1] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$dir2] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'httpd/unix-directory');
+
+ $this->cache->put('', $fileData['']);
+ $this->cache->put($dir1, $fileData[$dir1]);
+ $this->cache->put($dir2, $fileData[$dir2]);
+
+ $this->assertTrue($this->cache->inCache($dir1));
+ $this->assertTrue($this->cache->inCache($dir2));
+
+ // check that root size ignored the unknown sizes
+ $this->assertEquals(-1, $this->cache->calculateFolderSize(''));
+
+ // clean up
+ $this->cache->remove('');
+ $this->cache->remove($dir1);
+ $this->cache->remove($dir2);
+
+ $this->assertFalse($this->cache->inCache($dir1));
+ $this->assertFalse($this->cache->inCache($dir2));
+ }
+
function testStatus() {
$this->assertEquals(\OC\Files\Cache\Cache::NOT_FOUND, $this->cache->getStatus('foo'));
$this->cache->put('foo', array('size' => -1));
@@ -247,14 +274,14 @@ class Cache extends \PHPUnit_Framework_TestCase {
$data = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'foo/file');
$this->cache->put('foo', $data);
$cachedData = $this->cache->get('foo');
- $this->assertEquals($data['mtime'], $cachedData['storage_mtime']);//if no storage_mtime is saved, mtime should be used
+ $this->assertEquals($data['mtime'], $cachedData['storage_mtime']); //if no storage_mtime is saved, mtime should be used
- $this->cache->put('foo', array('storage_mtime' => 30));//when setting storage_mtime, mtime is also set
+ $this->cache->put('foo', array('storage_mtime' => 30)); //when setting storage_mtime, mtime is also set
$cachedData = $this->cache->get('foo');
$this->assertEquals(30, $cachedData['storage_mtime']);
$this->assertEquals(30, $cachedData['mtime']);
- $this->cache->put('foo', array('mtime' => 25));//setting mtime does not change storage_mtime
+ $this->cache->put('foo', array('mtime' => 25)); //setting mtime does not change storage_mtime
$cachedData = $this->cache->get('foo');
$this->assertEquals(30, $cachedData['storage_mtime']);
$this->assertEquals(25, $cachedData['mtime']);
@@ -295,18 +322,18 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertGreaterThan(0, $cacheMock->put('folder', $data));
// put un-normalized folder
- $this->assertFalse($cacheMock->get('folder/' .$folderWith0308));
- $this->assertGreaterThan(0, $cacheMock->put('folder/' .$folderWith0308, $data));
+ $this->assertFalse($cacheMock->get('folder/' . $folderWith0308));
+ $this->assertGreaterThan(0, $cacheMock->put('folder/' . $folderWith0308, $data));
// get un-normalized folder by name
- $unNormalizedFolderName = $cacheMock->get('folder/' .$folderWith0308);
+ $unNormalizedFolderName = $cacheMock->get('folder/' . $folderWith0308);
// check if database layer normalized the folder name (this should not happen)
$this->assertEquals($folderWith0308, $unNormalizedFolderName['name']);
// put normalized folder
$this->assertFalse($cacheMock->get('folder/' . $folderWith00F6));
- $this->assertGreaterThan(0, $cacheMock->put('folder/' .$folderWith00F6, $data));
+ $this->assertGreaterThan(0, $cacheMock->put('folder/' . $folderWith00F6, $data));
// this is our bug, we have two different hashes with the same name (Schön)
$this->assertEquals(2, count($cacheMock->getFolderContents('folder')));
@@ -317,7 +344,7 @@ class Cache extends \PHPUnit_Framework_TestCase {
*/
public function testWithNormalizer() {
- if(!class_exists('Patchwork\PHP\Shim\Normalizer')) {
+ if (!class_exists('Patchwork\PHP\Shim\Normalizer')) {
$this->markTestSkipped('The 3rdparty Normalizer extension is not available.');
return;
}
@@ -335,18 +362,18 @@ class Cache extends \PHPUnit_Framework_TestCase {
$this->assertGreaterThan(0, $this->cache->put('folder', $data));
// put un-normalized folder
- $this->assertFalse($this->cache->get('folder/' .$folderWith0308));
- $this->assertGreaterThan(0, $this->cache->put('folder/' .$folderWith0308, $data));
+ $this->assertFalse($this->cache->get('folder/' . $folderWith0308));
+ $this->assertGreaterThan(0, $this->cache->put('folder/' . $folderWith0308, $data));
// get un-normalized folder by name
- $unNormalizedFolderName = $this->cache->get('folder/' .$folderWith0308);
+ $unNormalizedFolderName = $this->cache->get('folder/' . $folderWith0308);
// check if folder name was normalized
$this->assertEquals($folderWith00F6, $unNormalizedFolderName['name']);
// put normalized folder
$this->assertTrue(is_array($this->cache->get('folder/' . $folderWith00F6)));
- $this->assertGreaterThan(0, $this->cache->put('folder/' .$folderWith00F6, $data));
+ $this->assertGreaterThan(0, $this->cache->put('folder/' . $folderWith00F6, $data));
// at this point we should have only one folder named "Schön"
$this->assertEquals(1, count($this->cache->getFolderContents('folder')));
diff --git a/tests/lib/files/cache/homecache.php b/tests/lib/files/cache/homecache.php
new file mode 100644
index 00000000000..2fa7f1ba92e
--- /dev/null
+++ b/tests/lib/files/cache/homecache.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Cache;
+
+class DummyUser extends \OC\User\User {
+ /**
+ * @var string $home
+ */
+ private $home;
+
+ /**
+ * @var string $uid
+ */
+ private $uid;
+
+ public function __construct($uid, $home) {
+ $this->home = $home;
+ $this->uid = $uid;
+ }
+
+ /**
+ * @return string
+ */
+ public function getHome() {
+ return $this->home;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUID() {
+ return $this->uid;
+ }
+}
+
+class HomeCache extends \PHPUnit_Framework_TestCase {
+ /**
+ * @var \OC\Files\Storage\Home $storage
+ */
+ private $storage;
+
+ /**
+ * @var \OC\Files\Cache\HomeCache $cache
+ */
+ private $cache;
+
+ /**
+ * @var \OC\User\User $user
+ */
+ private $user;
+
+ public function setUp() {
+ $this->user = new DummyUser('foo', \OC_Helper::tmpFolder());
+ $this->storage = new \OC\Files\Storage\Home(array('user' => $this->user));
+ $this->cache = $this->storage->getCache();
+ }
+
+ /**
+ * Tests that the root folder size calculation ignores the subdirs that have an unknown
+ * size. This makes sure that quota calculation still works as it's based on the root
+ * folder size.
+ */
+ public function testRootFolderSizeIgnoresUnknownUpdate() {
+ $dir1 = 'knownsize';
+ $dir2 = 'unknownsize';
+ $fileData = array();
+ $fileData[''] = array('size' => -1, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$dir1] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$dir2] = array('size' => -1, 'mtime' => 25, 'mimetype' => 'httpd/unix-directory');
+
+ $this->cache->put('', $fileData['']);
+ $this->cache->put($dir1, $fileData[$dir1]);
+ $this->cache->put($dir2, $fileData[$dir2]);
+
+ $this->assertTrue($this->cache->inCache($dir1));
+ $this->assertTrue($this->cache->inCache($dir2));
+
+ // check that root size ignored the unknown sizes
+ $this->assertEquals(1000, $this->cache->calculateFolderSize(''));
+
+ // clean up
+ $this->cache->remove('');
+ $this->cache->remove($dir1);
+ $this->cache->remove($dir2);
+
+ $this->assertFalse($this->cache->inCache($dir1));
+ $this->assertFalse($this->cache->inCache($dir2));
+ }
+
+ public function testRootFolderSizeIsFilesSize() {
+ $dir1 = 'files';
+ $afile = 'test.txt';
+ $fileData = array();
+ $fileData[''] = array('size' => 1500, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$dir1] = array('size' => 1000, 'mtime' => 20, 'mimetype' => 'httpd/unix-directory');
+ $fileData[$afile] = array('size' => 500, 'mtime' => 20);
+
+ $this->cache->put('', $fileData['']);
+ $this->cache->put($dir1, $fileData[$dir1]);
+
+ $this->assertTrue($this->cache->inCache($dir1));
+
+ // check that root size ignored the unknown sizes
+ $data = $this->cache->get('files');
+ $this->assertEquals(1000, $data['size']);
+ $data = $this->cache->get('');
+ $this->assertEquals(1000, $data['size']);
+
+ // clean up
+ $this->cache->remove('');
+ $this->cache->remove($dir1);
+
+ $this->assertFalse($this->cache->inCache($dir1));
+ }
+}
diff --git a/tests/lib/files/filesystem.php b/tests/lib/files/filesystem.php
index bef70cc725b..7cb57bf95ad 100644
--- a/tests/lib/files/filesystem.php
+++ b/tests/lib/files/filesystem.php
@@ -41,9 +41,12 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
foreach ($this->tmpDirs as $dir) {
\OC_Helper::rmdirr($dir);
}
+ \OC\Files\Filesystem::clearMounts();
+ \OC_User::setUserId('');
}
public function setUp() {
+ \OC_User::setUserId('');
\OC\Files\Filesystem::clearMounts();
}
@@ -66,17 +69,72 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
}
public function testNormalize() {
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/'));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('/', false));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//'));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('//', false));
$this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/'));
$this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false));
$this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path'));
- $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\path'));
$this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo//bar/', false));
$this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/////bar'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/.'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/./', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/./.'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/bar/././'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/bar/././', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo/./bar/'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('/foo/./bar/', false));
+ $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('/foo/.bar/'));
+ $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('/foo/.bar/', false));
+ $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('/foo/.bar/tee'));
+
+ // normalize does not resolve '..' (by design)
+ $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('/foo/../'));
+
if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
$this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88"));
}
}
+ public function testNormalizeWindowsPaths() {
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath(''));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\'));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\', false));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\'));
+ $this->assertEquals('/', \OC\Files\Filesystem::normalizePath('\\\\', false));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path'));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path', false));
+ $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\\path\\'));
+ $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('\\path\\', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\\\bar\\', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\bar'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\\\\\\\\\bar'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.'));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\bar\\.\\.\\', false));
+ $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\'));
+ $this->assertEquals('/foo/bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.\\bar\\', false));
+ $this->assertEquals('/foo/.bar', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\'));
+ $this->assertEquals('/foo/.bar/', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\', false));
+ $this->assertEquals('/foo/.bar/tee', \OC\Files\Filesystem::normalizePath('\\foo\\.bar\\tee'));
+
+ // normalize does not resolve '..' (by design)
+ $this->assertEquals('/foo/..', \OC\Files\Filesystem::normalizePath('\\foo\\..\\'));
+
+ if (class_exists('Patchwork\PHP\Shim\Normalizer')) {
+ $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("\\foo\\baru\xCC\x88"));
+ }
+ }
+
public function testHooks() {
if(\OC\Files\Filesystem::getView()){
$user = \OC_User::getUser();
@@ -103,6 +161,67 @@ class Filesystem extends \PHPUnit_Framework_TestCase {
// \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh);
}
+ /**
+ * Tests that a local storage mount is used when passed user
+ * does not exist.
+ */
+ public function testLocalMountWhenUserDoesNotExist() {
+ $datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
+ $userId = uniqid('user_');
+
+ \OC\Files\Filesystem::initMountPoints($userId);
+
+ $homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
+
+ $this->assertInstanceOf('\OC\Files\Storage\Local', $homeMount);
+ $this->assertEquals('local::' . $datadir . '/' . $userId . '/', $homeMount->getId());
+ }
+
+ /**
+ * Tests that the home storage is used for the user's mount point
+ */
+ public function testHomeMount() {
+ $userId = uniqid('user_');
+
+ \OC_User::createUser($userId, $userId);
+
+ \OC\Files\Filesystem::initMountPoints($userId);
+
+ $homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
+
+ $this->assertInstanceOf('\OC\Files\Storage\Home', $homeMount);
+ $this->assertEquals('home::' . $userId, $homeMount->getId());
+
+ \OC_User::deleteUser($userId);
+ }
+
+ /**
+ * Tests that the home storage is used in legacy mode
+ * for the user's mount point
+ */
+ public function testLegacyHomeMount() {
+ $datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
+ $userId = uniqid('user_');
+
+ // insert storage into DB by constructing it
+ // to make initMountsPoint find its existence
+ $localStorage = new \OC\Files\Storage\Local(array('datadir' => $datadir . '/' . $userId . '/'));
+ // this will trigger the insert
+ $cache = $localStorage->getCache();
+
+ \OC_User::createUser($userId, $userId);
+ \OC\Files\Filesystem::initMountPoints($userId);
+
+ $homeMount = \OC\Files\Filesystem::getStorage('/' . $userId . '/');
+
+ $this->assertInstanceOf('\OC\Files\Storage\Home', $homeMount);
+ $this->assertEquals('local::' . $datadir. '/' . $userId . '/', $homeMount->getId());
+
+ \OC_User::deleteUser($userId);
+ // delete storage entry
+ $cache->clear();
+ }
+
public function dummyHook($arguments) {
$path = $arguments['path'];
$this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized
diff --git a/tests/lib/files/storage/home.php b/tests/lib/files/storage/home.php
index b01e07f7457..885291e4404 100644
--- a/tests/lib/files/storage/home.php
+++ b/tests/lib/files/storage/home.php
@@ -56,8 +56,8 @@ class Home extends Storage {
public function setUp() {
$this->tmpDir = \OC_Helper::tmpFolder();
- $userId = uniqid('user_');
- $this->user = new DummyUser($userId, $this->tmpDir);
+ $this->userId = uniqid('user_');
+ $this->user = new DummyUser($this->userId, $this->tmpDir);
$this->instance = new \OC\Files\Storage\Home(array('user' => $this->user));
}
@@ -65,7 +65,32 @@ class Home extends Storage {
\OC_Helper::rmdirr($this->tmpDir);
}
+ /**
+ * Tests that the root path matches the data dir
+ */
public function testRoot() {
$this->assertEquals($this->tmpDir, $this->instance->getLocalFolder(''));
}
+
+ /**
+ * Tests that the home id is in the format home::user1
+ */
+ public function testId() {
+ $this->assertEquals('home::' . $this->userId, $this->instance->getId());
+ }
+
+ /**
+ * Tests that the legacy home id is in the format local::/path/to/datadir/user1/
+ */
+ public function testLegacyId() {
+ $this->instance = new \OC\Files\Storage\Home(array('user' => $this->user, 'legacy' => true));
+ $this->assertEquals('local::' . $this->tmpDir . '/', $this->instance->getId());
+ }
+
+ /**
+ * Tests that getCache() returns an instance of HomeCache
+ */
+ public function testGetCacheReturnsHomeCache() {
+ $this->assertInstanceOf('\OC\Files\Cache\HomeCache', $this->instance->getCache());
+ }
}
diff --git a/tests/lib/files/storage/storage.php b/tests/lib/files/storage/storage.php
index f72a5276db5..6c433e95475 100644
--- a/tests/lib/files/storage/storage.php
+++ b/tests/lib/files/storage/storage.php
@@ -182,8 +182,9 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->instance->hasUpdated('/lorem.txt', $ctimeStart - 5));
$this->assertTrue($this->instance->hasUpdated('/', $ctimeStart - 5));
- $this->assertTrue(($ctimeStart - 5) <= $mTime);
- $this->assertTrue($mTime <= ($ctimeEnd + 1));
+ // check that ($ctimeStart - 5) <= $mTime <= ($ctimeEnd + 1)
+ $this->assertGreaterThanOrEqual(($ctimeStart - 5), $mTime);
+ $this->assertLessThanOrEqual(($ctimeEnd + 1), $mTime);
$this->assertEquals(filesize($textFile), $this->instance->filesize('/lorem.txt'));
$stat = $this->instance->stat('/lorem.txt');
@@ -202,6 +203,17 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertTrue($this->instance->hasUpdated('/', $mtimeStart - 5));
}
+ public function testUnlink() {
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
+
+ $this->assertTrue($this->instance->file_exists('/lorem.txt'));
+
+ $this->assertTrue($this->instance->unlink('/lorem.txt'));
+
+ $this->assertFalse($this->instance->file_exists('/lorem.txt'));
+ }
+
public function testFOpen() {
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 0cc86d6651a..f358c15dd50 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -67,6 +67,11 @@ class View extends \PHPUnit_Framework_TestCase {
$this->assertEquals($storageSize * 3, $cachedData['size']);
$this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+ // get cached data excluding mount points
+ $cachedData = $rootView->getFileInfo('/', false);
+ $this->assertEquals($storageSize, $cachedData['size']);
+ $this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
+
$cachedData = $rootView->getFileInfo('/folder');
$this->assertEquals($storageSize + $textSize, $cachedData['size']);
$this->assertEquals('httpd/unix-directory', $cachedData['mimetype']);
diff --git a/tests/lib/request.php b/tests/lib/request.php
new file mode 100644
index 00000000000..2b2094a612d
--- /dev/null
+++ b/tests/lib/request.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+class Test_Request extends PHPUnit_Framework_TestCase {
+
+ public function setUp() {
+ OC_Config::setValue('overwritewebroot', '/domain.tld/ownCloud');
+ }
+
+ public function tearDown() {
+ OC_Config::setValue('overwritewebroot', '');
+ }
+
+ public function testScriptNameOverWrite() {
+ $_SERVER['REMOTE_ADDR'] = '10.0.0.1';
+ $_SERVER["SCRIPT_FILENAME"] = __FILE__;
+
+ $scriptName = OC_Request::scriptName();
+ $this->assertEquals('/domain.tld/ownCloud/tests/lib/request.php', $scriptName);
+ }
+}
diff --git a/tests/lib/util.php b/tests/lib/util.php
index d607a3e7725..852caaeccc3 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -94,6 +94,55 @@ class Test_Util extends PHPUnit_Framework_TestCase {
}
/**
+ * Tests that the home storage is not wrapped when no quota exists.
+ */
+ function testHomeStorageWrapperWithoutQuota() {
+ $user1 = uniqid();
+ \OC_User::createUser($user1, 'test');
+ OC_Preferences::setValue($user1, 'files', 'quota', 'none');
+ \OC_User::setUserId($user1);
+
+ \OC_Util::setupFS($user1);
+
+ $userMount = \OC\Files\Filesystem::getMountManager()->find('/' . $user1 . '/');
+ $this->assertNotNull($userMount);
+ $this->assertNotInstanceOf('\OC\Files\Storage\Wrapper\Quota', $userMount->getStorage());
+
+ // clean up
+ \OC_User::setUserId('');
+ \OC_User::deleteUser($user1);
+ OC_Preferences::deleteUser($user1);
+ \OC_Util::tearDownFS();
+ }
+
+ /**
+ * Tests that the home storage is not wrapped when no quota exists.
+ */
+ function testHomeStorageWrapperWithQuota() {
+ $user1 = uniqid();
+ \OC_User::createUser($user1, 'test');
+ OC_Preferences::setValue($user1, 'files', 'quota', '1024');
+ \OC_User::setUserId($user1);
+
+ \OC_Util::setupFS($user1);
+
+ $userMount = \OC\Files\Filesystem::getMountManager()->find('/' . $user1 . '/');
+ $this->assertNotNull($userMount);
+ $this->assertInstanceOf('\OC\Files\Storage\Wrapper\Quota', $userMount->getStorage());
+
+ // ensure that root wasn't wrapped
+ $rootMount = \OC\Files\Filesystem::getMountManager()->find('/');
+ $this->assertNotNull($rootMount);
+ $this->assertNotInstanceOf('\OC\Files\Storage\Wrapper\Quota', $rootMount->getStorage());
+
+ // clean up
+ \OC_User::setUserId('');
+ \OC_User::deleteUser($user1);
+ OC_Preferences::deleteUser($user1);
+ \OC_Util::tearDownFS();
+ }
+
+ /**
* @dataProvider baseNameProvider
*/
public function testBaseName($expected, $file)