Skip to content
Snippets Groups Projects
Commit 28c1a955 authored by Jörn Friedrich Dreyer's avatar Jörn Friedrich Dreyer
Browse files

use common storage test

parent 7ec53571
No related branches found
No related tags found
No related merge requests found
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
namespace OC\Files\ObjectStore; namespace OC\Files\ObjectStore;
use OC\Files\Filesystem;
use OCP\Files\ObjectStore\IObjectStore; use OCP\Files\ObjectStore\IObjectStore;
class ObjectStoreStorage extends \OC\Files\Storage\Common { class ObjectStoreStorage extends \OC\Files\Storage\Common {
...@@ -177,6 +178,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { ...@@ -177,6 +178,7 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
} }
public function stat($path) { public function stat($path) {
$path = $this->normalizePath($path);
return $this->getCache()->get($path); return $this->getCache()->get($path);
} }
...@@ -200,8 +202,6 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { ...@@ -200,8 +202,6 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
if ($path === '.') { if ($path === '.') {
$path = ''; $path = '';
} else if ($path) {
$path .= '/';
} }
try { try {
...@@ -211,9 +211,9 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { ...@@ -211,9 +211,9 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
$files[] = $file['name']; $files[] = $file['name'];
} }
\OC\Files\Stream\Dir::register('object' . $path, $files); \OC\Files\Stream\Dir::register('objectstore' . $path . '/', $files);
return opendir('fakedir://object' . $path); return opendir('fakedir://objectstore' . $path . '/');
} catch (Exception $e) { } catch (Exception $e) {
\OCP\Util::writeLog('objectstore', $e->getMessage(), \OCP\Util::ERROR); \OCP\Util::writeLog('objectstore', $e->getMessage(), \OCP\Util::ERROR);
return false; return false;
...@@ -285,32 +285,41 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { ...@@ -285,32 +285,41 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
return (bool)$this->stat($path); return (bool)$this->stat($path);
} }
public function rename($path1, $path2) { public function rename($source, $target) {
$path1 = $this->normalizePath($path1); $source = $this->normalizePath($source);
$path2 = $this->normalizePath($path2); $target = $this->normalizePath($target);
$stat1 = $this->stat($path1); $stat1 = $this->stat($source);
if (is_array($stat1)) { if (isset($stat1['mimetype']) && $stat1['mimetype'] === 'httpd/unix-directory') {
$parent = $this->stat(dirname($path2)); $this->remove($target);
if (is_array($parent)) { $dir = $this->opendir($source);
$stat2 = $this->stat($path2); $this->mkdir($target);
if (is_array($stat2)) { while ($file = readdir($dir)) {
$this->unlink($path2); if (!Filesystem::isIgnoredDir($file)) {
if (!$this->rename($source . '/' . $file, $target . '/' . $file)) {
return false;
}
} }
$stat1['parent'] = $parent['fileid'];
$stat1['path'] = $path2;
$stat1['path_hash'] = md5($path2);
$stat1['name'] = \OC_Util::basename($path2);
$stat1['mtime'] = time();
$stat1['etag'] = $this->getETag($path2);
$this->getCache()->update($stat1['fileid'], $stat1);
return true;
} else {
return false;
} }
closedir($dir);
$this->remove($source);
return true;
} else { } else {
return false; if (is_array($stat1)) {
$parent = $this->stat(dirname($target));
if (is_array($parent)) {
$this->remove($target);
$stat1['parent'] = $parent['fileid'];
$stat1['path'] = $target;
$stat1['path_hash'] = md5($target);
$stat1['name'] = \OC_Util::basename($target);
$stat1['mtime'] = time();
$stat1['etag'] = $this->getETag($target);
$this->getCache()->update($stat1['fileid'], $stat1);
return true;
}
}
} }
return false;
} }
public function getMimeType($path) { public function getMimeType($path) {
......
...@@ -25,17 +25,13 @@ use OC\Files\ObjectStore\Swift as ObjectStoreToTest; ...@@ -25,17 +25,13 @@ use OC\Files\ObjectStore\Swift as ObjectStoreToTest;
use PHPUnit_Framework_TestCase; use PHPUnit_Framework_TestCase;
class Swift extends PHPUnit_Framework_TestCase { //class Swift extends PHPUnit_Framework_TestCase {
class Swift extends \Test\Files\Storage\Storage {
/**
* @var \OC\Files\ObjectStore\Swift $storage
*/
private $storage;
private $objectStorage; private $objectStorage;
public function setUp() { public function setUp() {
\OC_App::disable('files_sharing'); \OC_App::disable('files_sharing');
\OC_App::disable('files_versions'); \OC_App::disable('files_versions');
...@@ -72,202 +68,16 @@ class Swift extends PHPUnit_Framework_TestCase { ...@@ -72,202 +68,16 @@ class Swift extends PHPUnit_Framework_TestCase {
); );
$this->objectStorage = new ObjectStoreToTest($params); $this->objectStorage = new ObjectStoreToTest($params);
$params['objectstore'] = $this->objectStorage; $params['objectstore'] = $this->objectStorage;
$this->storage = new ObjectStoreStorage($params); $this->instance = new ObjectStoreStorage($params);
} }
public function tearDown() { public function tearDown() {
if (is_null($this->storage)) { if (is_null($this->instance)) {
return; return;
} }
$this->objectStorage->deleteContainer(true); $this->objectStorage->deleteContainer(true);
$this->storage->getCache()->clear(); $this->instance->getCache()->clear();
//TODO how do I clear hooks? //TODO how do I clear hooks?
} }
public function testStat () {
$stat = $this->storage->stat('');
$this->assertInternalType('array', $stat);
$this->assertEquals(-1, $stat['parent']);
$this->assertEquals('', $stat['path']);
$this->assertEquals('', $stat['name']);
$this->assertEquals(0, $stat['size']);
}
public function testMkdir () {
$root = $this->storage->stat('');
$statBefore = $this->storage->stat('someuser');
$this->assertFalse($statBefore);
$this->storage->mkdir('someuser');
$statAfter = $this->storage->stat('someuser');
$this->assertTrue(is_array($statAfter));
$this->assertEquals($root['fileid'], $statAfter['parent']);
$this->assertEquals('someuser', $statAfter['path']);
$this->assertEquals('someuser', $statAfter['name']);
$this->assertEquals(0, $statAfter['size']);
}
public function filesProvider() {
return array(
array('file.txt'),
array(' file.txt'),
array('file.txt '),
array('file with space.txt'),
array('spéciäl fìle.txt'),
array('☠ skull and crossbones.txt'),
array('skull and crossbones ☠ in between.txt'),
array('💩 pile of poo.txt'),
array('pile of 💩.txt'),
// check if someone tries to guess type on a date string
array('2013-04-25'),
);
}
/**
* @dataProvider filesProvider
*/
public function testTouch ($file) {
$root = $this->storage->stat('');
$statBefore = $this->storage->stat($file);
$this->assertFalse($statBefore);
$this->assertTrue($this->storage->touch($file));
$statAfter = $this->storage->stat($file);
$this->assertTrue(is_array($statAfter));
$this->assertEquals($root['fileid'], $statAfter['parent']);
$this->assertEquals($file, $statAfter['path']);
$this->assertEquals($file, $statAfter['name']);
$this->assertEquals(0, $statAfter['size']);
$this->assertFalse($this->storage->touch('non-existing/'.$file));
//TODO test mtime
//TODO test existing files
//TODO test folders
}
/**
* @dataProvider filesProvider
*/
public function testUnlink ($file) {
$root = $this->storage->stat('');
$this->assertFalse($this->storage->unlink($file));
$this->storage->touch($file);
$statBefore = $this->storage->stat($file);
$this->assertTrue(is_array($statBefore));
$this->assertEquals($root['fileid'], $statBefore['parent']);
$this->assertEquals($file, $statBefore['path']);
$this->assertEquals($file, $statBefore['name']);
$this->assertEquals(0, $statBefore['size']);
$this->assertTrue($this->storage->unlink($file));
$this->assertFalse($this->storage->stat($file));
//TODO test folders
}
/**
* checks several methods by creating directories:
* - file_exists (f/t)
* - mkdir (t/f)
* - is_dir (t)
* - is_file (f)
* - filetype ('dir')
* - filesize (0)
* - isReadable (t)
* - isUpdateable (t)
* - opendir (dir array/empty array)
* - rmdir (t/f)
* @dataProvider directoryProvider
*/
public function testDirectories($directory) {
$this->assertFalse($this->storage->file_exists('/' . $directory), 'Expected /'.$directory.' to not exist');
$this->assertTrue($this->storage->mkdir('/' . $directory), 'Expected creating /'.$directory.' to succeed');
$this->assertTrue($this->storage->file_exists('/' . $directory), 'Expected /'.$directory.' to exist');
$this->assertTrue($this->storage->is_dir('/' . $directory), 'Expected /'.$directory.' to be a directory');
$this->assertFalse($this->storage->is_file('/' . $directory), 'Expected /'.$directory.' not to be a file');
$this->assertEquals('dir', $this->storage->filetype('/' . $directory), 'Expected /'.$directory.' to have filetype \'dir\'');
$this->assertEquals(0, $this->storage->filesize('/' . $directory), 'Expected /'.$directory.' to have size 0');
$this->assertTrue($this->storage->isReadable('/' . $directory), 'Expected /'.$directory.' to be readable');
$this->assertTrue($this->storage->isUpdatable('/' . $directory), 'Expected /'.$directory.' to be updateable');
$dh = $this->storage->opendir('');
$content = array();
while ($file = readdir($dh)) {
if ($file != '.' and $file != '..') {
$content[] = $file;
}
}
$this->assertEquals(array($directory), $content);
$this->assertFalse($this->storage->mkdir('/' . $directory), 'Expected already existing folder /'.$directory.' to not be createable');
$this->assertTrue($this->storage->rmdir('/' . $directory));
$this->assertFalse($this->storage->file_exists('/' . $directory));
$this->assertFalse($this->storage->rmdir('/' . $directory), 'Expected not existing folder /'.$directory.' to not be removable');
$dh = $this->storage->opendir('/');
$content = array();
while ($file = readdir($dh)) {
if ($file != '.' and $file != '..') {
$content[] = $file;
}
}
$this->assertEquals(array(), $content);
}
public function directoryProvider() {
return array(
array('folder'),
array(' folder'),
array('folder '),
array('folder with space'),
array('spéciäl földer'),
array('☠ skull and crossbones'),
array('skull and crossbones ☠ in between'),
array('💩 pile of poo'),
array('pile of 💩'),
// check if someone tries to guess type on a date string
array('2013-04-25'),
);
}
public function testCopyAndMove() {
$textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
$this->storage->file_put_contents('/source.txt', file_get_contents($textFile));
$this->storage->copy('/source.txt', '/target.txt');
$this->assertTrue($this->storage->file_exists('/target.txt'));
$this->assertEquals($this->storage->file_get_contents('/source.txt'), $this->storage->file_get_contents('/target.txt'));
$this->storage->rename('/source.txt', '/target2.txt');
$this->assertTrue($this->storage->file_exists('/target2.txt'));
$this->assertFalse($this->storage->file_exists('/source.txt'));
$this->assertEquals(file_get_contents($textFile), $this->storage->file_get_contents('/target2.txt'));
// move to overwrite
$testContents = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$this->storage->file_put_contents('/target3.txt', $testContents);
$this->storage->rename('/target2.txt', '/target3.txt');
$this->assertTrue($this->storage->file_exists('/target3.txt'));
$this->assertFalse($this->storage->file_exists('/target2.txt'));
$this->assertEquals(file_get_contents($textFile), $this->storage->file_get_contents('/target3.txt'));
}
//fopen
//filetype test
//getMimetype
//getURN?!?!
//test?
//getConnection
//writeback
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment