From c18836c8ae42d5a334baea228b7e792098a02089 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Fri, 13 Jun 2014 13:27:02 +0200 Subject: [PATCH] add initial swift test with trystack --- tests/lib/files/objectstore/swift.php | 265 ++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 tests/lib/files/objectstore/swift.php diff --git a/tests/lib/files/objectstore/swift.php b/tests/lib/files/objectstore/swift.php new file mode 100644 index 0000000000..7687818f43 --- /dev/null +++ b/tests/lib/files/objectstore/swift.php @@ -0,0 +1,265 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +namespace OCA\ObjectStore\Tests\Unit; + +use OC\Files\ObjectStore\Swift as ObjectStoreToTest; + +use PHPUnit_Framework_TestCase; + +class Swift extends PHPUnit_Framework_TestCase { + + /** + * @var \OC\Files\ObjectStore\Swift $storage + */ + private $storage; + + public function setUp() { + + \OC_App::disable('files_sharing'); + \OC_App::disable('files_versions'); + \OC_App::enable('objectstore'); + + // reset backend + \OC_User::clearBackends(); + \OC_User::useBackend('database'); + + // create users + $users = array('test'); + foreach($users as $userName) { + \OC_User::deleteUser($userName); + \OC_User::createUser($userName, $userName); + } + + // main test user + $userName = 'test'; + \OC_Util::tearDownFS(); + \OC_User::setUserId(''); + \OC\Files\Filesystem::tearDown(); + \OC_User::setUserId('test'); + + $params = array( + 'username' => 'facebook100000330192569', + 'password' => 'Dbdj1sXnRSHxIGc4', + 'container' => 'owncloud', + 'region' => 'RegionOne', //required, trystack defaults to 'RegionOne' + 'url' => 'http://8.21.28.222:5000/v2.0', // The Identity / Keystone endpoint + 'tenantName' => 'facebook100000330192569', // required on trystack + 'serviceName' => 'swift', //trystack uses swift by default, the lib defaults to 'cloudFiles' if omitted + 'user' => \OC_User::getManager()->get($userName) + ); + $this->storage = new ObjectStoreToTest($params); + } + + public function tearDown() { + if (is_null($this->storage)) { + return; + } + $this->storage->getCache()->clear(); + //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 + +}