summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/lib/Authentication/Token/DefaultTokenMapperTest.php27
-rw-r--r--tests/lib/Authentication/Token/DefaultTokenProviderTest.php11
-rw-r--r--tests/lib/Files/Cache/ScannerTest.php27
-rw-r--r--tests/lib/files/storage/wrapper/Encoding.php203
-rw-r--r--tests/settings/controller/AuthSettingsControllerTest.php156
5 files changed, 424 insertions, 0 deletions
diff --git a/tests/lib/Authentication/Token/DefaultTokenMapperTest.php b/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
index e17149a5c1b..9179e23bfb2 100644
--- a/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
+++ b/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
@@ -159,4 +159,31 @@ class DefaultTokenMapperTest extends TestCase {
$this->assertCount(0, $this->mapper->getTokenByUser($user));
}
+ public function testDeleteById() {
+ $user = $this->getMock('\OCP\IUser');
+ $qb = $this->dbConnection->getQueryBuilder();
+ $qb->select('id')
+ ->from('authtoken')
+ ->where($qb->expr()->eq('token', $qb->createNamedParameter('9c5a2e661482b65597408a6bb6c4a3d1af36337381872ac56e445a06cdb7fea2b1039db707545c11027a4966919918b19d875a8b774840b18c6cbb7ae56fe206')));
+ $result = $qb->execute();
+ $id = $result->fetch()['id'];
+ $user->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('user1'));
+
+ $this->mapper->deleteById($user, $id);
+ $this->assertEquals(2, $this->getNumberOfTokens());
+ }
+
+ public function testDeleteByIdWrongUser() {
+ $user = $this->getMock('\OCP\IUser');
+ $id = 33;
+ $user->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('user10000'));
+
+ $this->mapper->deleteById($user, $id);
+ $this->assertEquals(3, $this->getNumberOfTokens());
+ }
+
}
diff --git a/tests/lib/Authentication/Token/DefaultTokenProviderTest.php b/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
index eeb249cfa8a..8af5e1e933a 100644
--- a/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
+++ b/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
@@ -170,6 +170,17 @@ class DefaultTokenProviderTest extends TestCase {
$this->tokenProvider->invalidateToken('token7');
}
+ public function testInvaildateTokenById() {
+ $id = 123;
+ $user = $this->getMock('\OCP\IUser');
+
+ $this->mapper->expects($this->once())
+ ->method('deleteById')
+ ->with($user, $id);
+
+ $this->tokenProvider->invalidateTokenById($user, $id);
+ }
+
public function testInvalidateOldTokens() {
$defaultSessionLifetime = 60 * 60 * 24;
$this->config->expects($this->once())
diff --git a/tests/lib/Files/Cache/ScannerTest.php b/tests/lib/Files/Cache/ScannerTest.php
index 4a93f3ee014..b44b6f5d0f5 100644
--- a/tests/lib/Files/Cache/ScannerTest.php
+++ b/tests/lib/Files/Cache/ScannerTest.php
@@ -7,6 +7,7 @@
*/
namespace Test\Files\Cache;
+
use OC\Files\Cache\CacheEntry;
/**
@@ -150,6 +151,32 @@ class ScannerTest extends \Test\TestCase {
$this->assertFalse($this->cache->getIncomplete());
}
+ function testBackgroundScanOnlyRecurseIncomplete() {
+ $this->fillTestFolders();
+ $this->storage->mkdir('folder2');
+ $this->storage->file_put_contents('folder2/bar.txt', 'foobar');
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+ $this->assertFalse($this->cache->inCache('folder/bar.txt'));
+ $this->assertFalse($this->cache->inCache('folder/2bar.txt'));
+ $this->assertFalse($this->cache->inCache('folder2/bar.txt'));
+ $this->cache->put('folder2', ['size' => 1]); // mark as complete
+
+ $cachedData = $this->cache->get('');
+ $this->assertEquals(-1, $cachedData['size']);
+
+ $this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_RECURSIVE_INCOMPLETE, \OC\Files\Cache\Scanner::REUSE_ETAG | \OC\Files\Cache\Scanner::REUSE_SIZE);
+
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+ $this->assertTrue($this->cache->inCache('folder/bar.txt'));
+ $this->assertFalse($this->cache->inCache('folder2/bar.txt'));
+
+ $cachedData = $this->cache->get('');
+ $this->assertNotEquals(-1, $cachedData['size']);
+
+ $this->assertFalse($this->cache->getIncomplete());
+ }
+
public function testReuseExisting() {
$this->fillTestFolders();
diff --git a/tests/lib/files/storage/wrapper/Encoding.php b/tests/lib/files/storage/wrapper/Encoding.php
new file mode 100644
index 00000000000..79b7a3bfb6e
--- /dev/null
+++ b/tests/lib/files/storage/wrapper/Encoding.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Copyright (c) 2016 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage\Wrapper;
+
+class Encoding extends \Test\Files\Storage\Storage {
+
+ const NFD_NAME = 'ümlaut';
+ const NFC_NAME = 'ümlaut';
+
+ /**
+ * @var \OC\Files\Storage\Temporary
+ */
+ private $sourceStorage;
+
+ public function setUp() {
+ parent::setUp();
+ $this->sourceStorage = new \OC\Files\Storage\Temporary([]);
+ $this->instance = new \OC\Files\Storage\Wrapper\Encoding([
+ 'storage' => $this->sourceStorage
+ ]);
+ }
+
+ public function tearDown() {
+ $this->sourceStorage->cleanUp();
+ parent::tearDown();
+ }
+
+ public function directoryProvider() {
+ $a = parent::directoryProvider();
+ $a[] = [self::NFD_NAME];
+ return $a;
+ }
+
+ public function fileNameProvider() {
+ $a = parent::fileNameProvider();
+ $a[] = [self::NFD_NAME . '.txt'];
+ return $a;
+ }
+
+ public function copyAndMoveProvider() {
+ $a = parent::copyAndMoveProvider();
+ $a[] = [self::NFD_NAME . '.txt', self::NFC_NAME . '-renamed.txt'];
+ return $a;
+ }
+
+ public function accessNameProvider() {
+ return [
+ [self::NFD_NAME],
+ [self::NFC_NAME],
+ ];
+ }
+
+ /**
+ * @dataProvider accessNameProvider
+ */
+ public function testFputEncoding($accessName) {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'bar');
+ $this->assertEquals('bar', $this->instance->file_get_contents($accessName));
+ }
+
+ /**
+ * @dataProvider accessNameProvider
+ */
+ public function testFopenReadEncoding($accessName) {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'bar');
+ $fh = $this->instance->fopen($accessName, 'r');
+ $data = fgets($fh);
+ fclose($fh);
+ $this->assertEquals('bar', $data);
+ }
+
+ /**
+ * @dataProvider accessNameProvider
+ */
+ public function testFopenOverwriteEncoding($accessName) {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'bar');
+ $fh = $this->instance->fopen($accessName, 'w');
+ $data = fputs($fh, 'test');
+ fclose($fh);
+ $data = $this->sourceStorage->file_get_contents(self::NFD_NAME);
+ $this->assertEquals('test', $data);
+ $this->assertFalse($this->sourceStorage->file_exists(self::NFC_NAME));
+ }
+
+ /**
+ * @dataProvider accessNameProvider
+ */
+ public function testFileExistsEncoding($accessName) {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'bar');
+ $this->assertTrue($this->instance->file_exists($accessName));
+ }
+
+ /**
+ * @dataProvider accessNameProvider
+ */
+ public function testUnlinkEncoding($accessName) {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'bar');
+ $this->assertTrue($this->instance->unlink($accessName));
+ $this->assertFalse($this->sourceStorage->file_exists(self::NFC_NAME));
+ $this->assertFalse($this->sourceStorage->file_exists(self::NFD_NAME));
+ }
+
+ public function testNfcHigherPriority() {
+ $this->sourceStorage->file_put_contents(self::NFC_NAME, 'nfc');
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'nfd');
+ $this->assertEquals('nfc', $this->instance->file_get_contents(self::NFC_NAME));
+ }
+
+ public function encodedDirectoriesProvider() {
+ return [
+ [self::NFD_NAME, self::NFC_NAME],
+ [self::NFD_NAME . '/' . self::NFD_NAME, self::NFC_NAME . '/' . self::NFC_NAME],
+ [self::NFD_NAME . '/' . self::NFC_NAME . '/' .self::NFD_NAME, self::NFC_NAME . '/' . self::NFC_NAME . '/' . self::NFC_NAME],
+ ];
+ }
+
+ /**
+ * @dataProvider encodedDirectoriesProvider
+ */
+ public function testOperationInsideDirectory($sourceDir, $accessDir) {
+ $this->sourceStorage->mkdir($sourceDir);
+ $this->instance->file_put_contents($accessDir . '/test.txt', 'bar');
+ $this->assertTrue($this->instance->file_exists($accessDir . '/test.txt'));
+ $this->assertEquals('bar', $this->instance->file_get_contents($accessDir . '/test.txt'));
+
+ $this->sourceStorage->file_put_contents($sourceDir . '/' . self::NFD_NAME, 'foo');
+ $this->assertTrue($this->instance->file_exists($accessDir . '/' . self::NFC_NAME));
+ $this->assertEquals('foo', $this->instance->file_get_contents($accessDir . '/' . self::NFC_NAME));
+
+ // try again to make it use cached path
+ $this->assertEquals('bar', $this->instance->file_get_contents($accessDir . '/test.txt'));
+ $this->assertTrue($this->instance->file_exists($accessDir . '/test.txt'));
+ $this->assertEquals('foo', $this->instance->file_get_contents($accessDir . '/' . self::NFC_NAME));
+ $this->assertTrue($this->instance->file_exists($accessDir . '/' . self::NFC_NAME));
+ }
+
+ public function testCacheExtraSlash() {
+ $this->sourceStorage->file_put_contents(self::NFD_NAME, 'foo');
+ $this->assertEquals(3, $this->instance->file_put_contents(self::NFC_NAME, 'bar'));
+ $this->assertEquals('bar', $this->instance->file_get_contents(self::NFC_NAME));
+ clearstatcache();
+ $this->assertEquals(5, $this->instance->file_put_contents('/' . self::NFC_NAME, 'baric'));
+ $this->assertEquals('baric', $this->instance->file_get_contents(self::NFC_NAME));
+ clearstatcache();
+ $this->assertEquals(8, $this->instance->file_put_contents('/' . self::NFC_NAME, 'barbaric'));
+ $this->assertEquals('barbaric', $this->instance->file_get_contents('//' . self::NFC_NAME));
+ }
+
+ public function sourceAndTargetDirectoryProvider() {
+ return [
+ [self::NFC_NAME . '1', self::NFC_NAME . '2'],
+ [self::NFD_NAME . '1', self::NFC_NAME . '2'],
+ [self::NFC_NAME . '1', self::NFD_NAME . '2'],
+ [self::NFD_NAME . '1', self::NFD_NAME . '2'],
+ ];
+ }
+
+ /**
+ * @dataProvider sourceAndTargetDirectoryProvider
+ */
+ public function testCopyAndMoveEncodedFolder($sourceDir, $targetDir) {
+ $this->sourceStorage->mkdir($sourceDir);
+ $this->sourceStorage->mkdir($targetDir);
+ $this->sourceStorage->file_put_contents($sourceDir . '/test.txt', 'bar');
+ $this->assertTrue($this->instance->copy(self::NFC_NAME . '1/test.txt', self::NFC_NAME . '2/test.txt'));
+
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '1/test.txt'));
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '2/test.txt'));
+ $this->assertEquals('bar', $this->instance->file_get_contents(self::NFC_NAME . '2/test.txt'));
+
+ $this->assertTrue($this->instance->rename(self::NFC_NAME . '1/test.txt', self::NFC_NAME . '2/test2.txt'));
+ $this->assertFalse($this->instance->file_exists(self::NFC_NAME . '1/test.txt'));
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '2/test2.txt'));
+
+ $this->assertEquals('bar', $this->instance->file_get_contents(self::NFC_NAME . '2/test2.txt'));
+ }
+
+ /**
+ * @dataProvider sourceAndTargetDirectoryProvider
+ */
+ public function testCopyAndMoveFromStorageEncodedFolder($sourceDir, $targetDir) {
+ $this->sourceStorage->mkdir($sourceDir);
+ $this->sourceStorage->mkdir($targetDir);
+ $this->sourceStorage->file_put_contents($sourceDir . '/test.txt', 'bar');
+ $this->assertTrue($this->instance->copyFromStorage($this->instance, self::NFC_NAME . '1/test.txt', self::NFC_NAME . '2/test.txt'));
+
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '1/test.txt'));
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '2/test.txt'));
+ $this->assertEquals('bar', $this->instance->file_get_contents(self::NFC_NAME . '2/test.txt'));
+
+ $this->assertTrue($this->instance->moveFromStorage($this->instance, self::NFC_NAME . '1/test.txt', self::NFC_NAME . '2/test2.txt'));
+ $this->assertFalse($this->instance->file_exists(self::NFC_NAME . '1/test.txt'));
+ $this->assertTrue($this->instance->file_exists(self::NFC_NAME . '2/test2.txt'));
+
+ $this->assertEquals('bar', $this->instance->file_get_contents(self::NFC_NAME . '2/test2.txt'));
+ }
+}
diff --git a/tests/settings/controller/AuthSettingsControllerTest.php b/tests/settings/controller/AuthSettingsControllerTest.php
new file mode 100644
index 00000000000..49491c8ff52
--- /dev/null
+++ b/tests/settings/controller/AuthSettingsControllerTest.php
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @author Christoph Wurst <christoph@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace Test\Settings\Controller;
+
+use OC\AppFramework\Http;
+use OC\Authentication\Exceptions\InvalidTokenException;
+use OC\Authentication\Token\IToken;
+use OC\Settings\Controller\AuthSettingsController;
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\Session\Exceptions\SessionNotAvailableException;
+use Test\TestCase;
+
+class AuthSettingsControllerTest extends TestCase {
+
+ /** @var AuthSettingsController */
+ private $controller;
+ private $request;
+ private $tokenProvider;
+ private $userManager;
+ private $session;
+ private $secureRandom;
+ private $uid;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->request = $this->getMock('\OCP\IRequest');
+ $this->tokenProvider = $this->getMock('\OC\Authentication\Token\IProvider');
+ $this->userManager = $this->getMock('\OCP\IUserManager');
+ $this->session = $this->getMock('\OCP\ISession');
+ $this->secureRandom = $this->getMock('\OCP\Security\ISecureRandom');
+ $this->uid = 'jane';
+ $this->user = $this->getMock('\OCP\IUser');
+
+ $this->controller = new AuthSettingsController('core', $this->request, $this->tokenProvider, $this->userManager, $this->session, $this->secureRandom, $this->uid);
+ }
+
+ public function testIndex() {
+ $result = [
+ 'token1',
+ 'token2',
+ ];
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with($this->uid)
+ ->will($this->returnValue($this->user));
+ $this->tokenProvider->expects($this->once())
+ ->method('getTokenByUser')
+ ->with($this->user)
+ ->will($this->returnValue($result));
+
+ $this->assertEquals($result, $this->controller->index());
+ }
+
+ public function testCreate() {
+ $name = 'Nexus 4';
+ $sessionToken = $this->getMock('\OC\Authentication\Token\IToken');
+ $deviceToken = $this->getMock('\OC\Authentication\Token\IToken');
+ $password = '123456';
+
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->will($this->returnValue('sessionid'));
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sessionid')
+ ->will($this->returnValue($sessionToken));
+ $this->tokenProvider->expects($this->once())
+ ->method('getPassword')
+ ->with($sessionToken, 'sessionid')
+ ->will($this->returnValue($password));
+
+ $this->secureRandom->expects($this->exactly(4))
+ ->method('generate')
+ ->with(5, implode('', range('A', 'Z')))
+ ->will($this->returnValue('XXXXX'));
+ $newToken = 'XXXXX-XXXXX-XXXXX-XXXXX';
+
+ $this->tokenProvider->expects($this->once())
+ ->method('generateToken')
+ ->with($newToken, $this->uid, $password, $name, IToken::PERMANENT_TOKEN)
+ ->will($this->returnValue($deviceToken));
+
+ $expected = [
+ 'token' => $newToken,
+ 'deviceToken' => $deviceToken,
+ ];
+ $this->assertEquals($expected, $this->controller->create($name));
+ }
+
+ public function testCreateSessionNotAvailable() {
+ $name = 'personal phone';
+
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->will($this->throwException(new SessionNotAvailableException()));
+
+ $expected = new JSONResponse();
+ $expected->setStatus(Http::STATUS_SERVICE_UNAVAILABLE);
+
+ $this->assertEquals($expected, $this->controller->create($name));
+ }
+
+ public function testCreateInvalidToken() {
+ $name = 'Company IPhone';
+
+ $this->session->expects($this->once())
+ ->method('getId')
+ ->will($this->returnValue('sessionid'));
+ $this->tokenProvider->expects($this->once())
+ ->method('getToken')
+ ->with('sessionid')
+ ->will($this->throwException(new InvalidTokenException()));
+
+ $expected = new JSONResponse();
+ $expected->setStatus(Http::STATUS_SERVICE_UNAVAILABLE);
+
+ $this->assertEquals($expected, $this->controller->create($name));
+ }
+
+ public function testDestroy() {
+ $id = 123;
+ $user = $this->getMock('\OCP\IUser');
+
+ $this->userManager->expects($this->once())
+ ->method('get')
+ ->with($this->uid)
+ ->will($this->returnValue($user));
+ $this->tokenProvider->expects($this->once())
+ ->method('invalidateTokenById')
+ ->with($user, $id);
+
+ $this->assertEquals([], $this->controller->destroy($id));
+ }
+
+}