summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/Activity/ManagerTest.php70
-rw-r--r--tests/lib/App/AppStore/Fetcher/AppFetcherTest.php2
-rw-r--r--tests/lib/App/DependencyAnalyzerTest.php16
-rw-r--r--tests/lib/App/ManagerTest.php10
-rw-r--r--tests/lib/AppFramework/Http/OutputTest.php31
-rw-r--r--tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php5
-rw-r--r--tests/lib/Authentication/Token/DefaultTokenMapperTest.php40
-rw-r--r--tests/lib/Authentication/Token/DefaultTokenProviderTest.php23
-rw-r--r--tests/lib/Authentication/Token/DefaultTokenTest.php49
-rw-r--r--tests/lib/Files/Cache/UpdaterLegacyTest.php23
-rw-r--r--tests/lib/Files/FileInfoTest.php46
-rw-r--r--tests/lib/Files/ObjectStore/LocalTest.php36
-rw-r--r--tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php169
-rw-r--r--tests/lib/Files/ObjectStore/ObjectStoreTest.php97
-rw-r--r--tests/lib/Files/ObjectStore/S3Test.php38
-rw-r--r--tests/lib/Files/ObjectStore/SwiftTest.php194
-rw-r--r--tests/lib/Files/ViewTest.php4
-rw-r--r--tests/lib/InstallerTest.php91
-rw-r--r--tests/lib/Lockdown/Filesystem/NoFSTest.php63
-rw-r--r--tests/lib/Lockdown/Filesystem/NullCacheTest.php157
-rw-r--r--tests/lib/Lockdown/Filesystem/NullStorageTest.php245
-rw-r--r--tests/lib/Lockdown/LockdownManagerTest.php49
-rw-r--r--tests/lib/TestCase.php11
-rw-r--r--tests/lib/TestCasePhpUnit4.php37
-rw-r--r--tests/lib/TestCasePhpUnit5.php37
-rw-r--r--tests/lib/TestCasePhpUnitCompatibility.php32
26 files changed, 1339 insertions, 236 deletions
diff --git a/tests/lib/Activity/ManagerTest.php b/tests/lib/Activity/ManagerTest.php
index cf855dd2813..13932f389f8 100644
--- a/tests/lib/Activity/ManagerTest.php
+++ b/tests/lib/Activity/ManagerTest.php
@@ -10,6 +10,10 @@
namespace Test\Activity;
+use OCP\IConfig;
+use OCP\IRequest;
+use OCP\IUserSession;
+use OCP\RichObjectStrings\IValidator;
use Test\TestCase;
class ManagerTest extends TestCase {
@@ -17,32 +21,28 @@ class ManagerTest extends TestCase {
/** @var \OC\Activity\Manager */
private $activityManager;
- /** @var \OCP\IRequest|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
protected $request;
-
- /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */
protected $session;
-
- /** @var \OCP\IConfig|\PHPUnit_Framework_MockObject_MockObject */
+ /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
protected $config;
+ /** @var IValidator|\PHPUnit_Framework_MockObject_MockObject */
+ protected $validator;
protected function setUp() {
parent::setUp();
- $this->request = $this->getMockBuilder('OCP\IRequest')
- ->disableOriginalConstructor()
- ->getMock();
- $this->session = $this->getMockBuilder('OCP\IUserSession')
- ->disableOriginalConstructor()
- ->getMock();
- $this->config = $this->getMockBuilder('OCP\IConfig')
- ->disableOriginalConstructor()
- ->getMock();
+ $this->request = $this->createMock(IRequest::class);
+ $this->session = $this->createMock(IUserSession::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->validator = $this->createMock(IValidator::class);
$this->activityManager = new \OC\Activity\Manager(
$this->request,
$this->session,
- $this->config
+ $this->config,
+ $this->validator
);
$this->assertSame([], $this->invokePrivate($this->activityManager, 'getConsumers'));
@@ -264,32 +264,26 @@ class ManagerTest extends TestCase {
/**
* @expectedException \BadMethodCallException
- * @expectedExceptionMessage App not set
- * @expectedExceptionCode 10
*/
public function testPublishExceptionNoApp() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$this->activityManager->publish($event);
}
/**
* @expectedException \BadMethodCallException
- * @expectedExceptionMessage Type not set
- * @expectedExceptionCode 11
*/
public function testPublishExceptionNoType() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test');
$this->activityManager->publish($event);
}
/**
* @expectedException \BadMethodCallException
- * @expectedExceptionMessage Affected user not set
- * @expectedExceptionCode 12
*/
public function testPublishExceptionNoAffectedUser() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test')
->setType('test_type');
$this->activityManager->publish($event);
@@ -297,11 +291,9 @@ class ManagerTest extends TestCase {
/**
* @expectedException \BadMethodCallException
- * @expectedExceptionMessage Subject not set
- * @expectedExceptionCode 13
*/
public function testPublishExceptionNoSubject() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test')
->setType('test_type')
->setAffectedUser('test_affected');
@@ -310,16 +302,17 @@ class ManagerTest extends TestCase {
public function dataPublish() {
return [
- [null],
- ['test_author'],
+ [null, ''],
+ ['test_author', 'test_author'],
];
}
/**
* @dataProvider dataPublish
- * @param string $author
+ * @param string|null $author
+ * @param string $expected
*/
- public function testPublish($author) {
+ public function testPublish($author, $expected) {
if ($author !== null) {
$authorObject = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
@@ -332,11 +325,12 @@ class ManagerTest extends TestCase {
->willReturn($authorObject);
}
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test')
->setType('test_type')
->setSubject('test_subject', [])
- ->setAffectedUser('test_affected');
+ ->setAffectedUser('test_affected')
+ ->setObject('file', 123);
$consumer = $this->getMockBuilder('OCP\Activity\IConsumer')
->disableOriginalConstructor()
@@ -344,10 +338,10 @@ class ManagerTest extends TestCase {
$consumer->expects($this->once())
->method('receive')
->with($event)
- ->willReturnCallback(function(\OCP\Activity\IEvent $event) use ($author) {
+ ->willReturnCallback(function(\OCP\Activity\IEvent $event) use ($expected) {
$this->assertLessThanOrEqual(time() + 2, $event->getTimestamp(), 'Timestamp not set correctly');
$this->assertGreaterThanOrEqual(time() - 2, $event->getTimestamp(), 'Timestamp not set correctly');
- $this->assertSame($author, $event->getAuthor(), 'Author name not set correctly');
+ $this->assertSame($expected, $event->getAuthor(), 'Author name not set correctly');
});
$this->activityManager->registerConsumer(function () use ($consumer) {
return $consumer;
@@ -357,7 +351,7 @@ class ManagerTest extends TestCase {
}
public function testPublishAllManually() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test_app')
->setType('test_type')
->setAffectedUser('test_affected')
@@ -397,7 +391,7 @@ class ManagerTest extends TestCase {
}
public function testDeprecatedPublishActivity() {
- $event = new \OC\Activity\Event();
+ $event = $this->activityManager->generateEvent();
$event->setApp('test_app')
->setType('test_type')
->setAffectedUser('test_affected')
@@ -428,7 +422,7 @@ class ManagerTest extends TestCase {
// The following values can not be used via publishActivity()
$this->assertLessThanOrEqual(time() + 2, $event->getTimestamp(), 'Timestamp not set correctly');
$this->assertGreaterThanOrEqual(time() - 2, $event->getTimestamp(), 'Timestamp not set correctly');
- $this->assertSame(null, $event->getAuthor(), 'Author not set correctly');
+ $this->assertSame('', $event->getAuthor(), 'Author not set correctly');
$this->assertSame('', $event->getObjectType(), 'Object type should not be set');
$this->assertSame(0, $event->getObjectId(), 'Object ID should not be set');
});
diff --git a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
index 3b0418a7eba..fb2617cbfe8 100644
--- a/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
+++ b/tests/lib/App/AppStore/Fetcher/AppFetcherTest.php
@@ -27,7 +27,7 @@ class AppFetcherTest extends FetcherBase {
public function setUp() {
parent::setUp();
$this->fileName = 'apps.json';
- $this->endpoint = 'https://apps.nextcloud.com/api/v1/platform/9.2.0/apps.json';
+ $this->endpoint = 'https://apps.nextcloud.com/api/v1/platform/11.0.0/apps.json';
$this->fetcher = new AppFetcher(
$this->appData,
diff --git a/tests/lib/App/DependencyAnalyzerTest.php b/tests/lib/App/DependencyAnalyzerTest.php
index fd44954eaf4..65b45a002d4 100644
--- a/tests/lib/App/DependencyAnalyzerTest.php
+++ b/tests/lib/App/DependencyAnalyzerTest.php
@@ -295,7 +295,7 @@ class DependencyAnalyzerTest extends TestCase {
],
[
[
- 'Server version 11 or higher is required.',
+ 'Server version 9.2 or higher is required.',
],
[
'nextcloud' => [
@@ -307,6 +307,18 @@ class DependencyAnalyzerTest extends TestCase {
],
[
[
+ 'Server version 11 or higher is required.',
+ ],
+ [
+ 'nextcloud' => [
+ '@attributes' => [
+ 'min-version' => '11',
+ ],
+ ],
+ ],
+ ],
+ [
+ [
'Server version 8.0.1 or lower is required.',
],
[
@@ -388,7 +400,7 @@ class DependencyAnalyzerTest extends TestCase {
],
[
[
- 'Server version 11 or higher is required.',
+ 'Server version 9.2 or higher is required.',
],
[
'owncloud' => [
diff --git a/tests/lib/App/ManagerTest.php b/tests/lib/App/ManagerTest.php
index e04f7c82375..3dbcb8a5609 100644
--- a/tests/lib/App/ManagerTest.php
+++ b/tests/lib/App/ManagerTest.php
@@ -11,6 +11,7 @@ namespace Test\App;
use OC\Group\Group;
use OC\User\User;
+use OCP\App\AppPathNotFoundException;
use Test\TestCase;
/**
@@ -260,6 +261,15 @@ class ManagerTest extends TestCase {
$this->assertFalse($this->manager->isEnabledForUser('test', $user));
}
+ public function testGetAppPath() {
+ $this->assertEquals(\OC::$SERVERROOT . '/apps/files', $this->manager->getAppPath('files'));
+ }
+
+ public function testGetAppPathFail() {
+ $this->expectException(AppPathNotFoundException::class);
+ $this->manager->getAppPath('testnotexisting');
+ }
+
public function testIsEnabledForUserEnabledForGroup() {
$user = $this->newUser('user1');
$this->groupManager->expects($this->once())
diff --git a/tests/lib/AppFramework/Http/OutputTest.php b/tests/lib/AppFramework/Http/OutputTest.php
new file mode 100644
index 00000000000..5fe35d24bde
--- /dev/null
+++ b/tests/lib/AppFramework/Http/OutputTest.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\AppFramework\Http;
+
+use OC\AppFramework\Http\Output;
+
+class OutputTest extends \Test\TestCase {
+ public function testSetOutput() {
+ $this->expectOutputString('foo');
+ $output = new Output('');
+ $output->setOutput('foo');
+ }
+
+ public function testSetReadfile() {
+ $this->expectOutputString(file_get_contents(__FILE__));
+ $output = new Output('');
+ $output->setReadfile(__FILE__);
+ }
+
+ public function testSetReadfileStream() {
+ $this->expectOutputString(file_get_contents(__FILE__));
+ $output = new Output('');
+ $output->setReadfile(fopen(__FILE__, 'r'));
+ }
+}
diff --git a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
index 1fdcf485c28..480bff5f59f 100644
--- a/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
+++ b/tests/lib/AppFramework/Middleware/Security/SecurityMiddlewareTest.php
@@ -49,6 +49,7 @@ use OCP\IConfig;
use OCP\ILogger;
use OCP\INavigationManager;
use OCP\IRequest;
+use OCP\ISession;
use OCP\IURLGenerator;
use OCP\Security\ISecureRandom;
@@ -63,6 +64,8 @@ class SecurityMiddlewareTest extends \Test\TestCase {
private $secException;
/** @var SecurityException */
private $secAjaxException;
+ /** @var ISession|\PHPUnit_Framework_MockObject_MockObject */
+ private $session;
/** @var IRequest|\PHPUnit_Framework_MockObject_MockObject */
private $request;
/** @var ControllerMethodReflector */
@@ -88,6 +91,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->logger = $this->createMock(ILogger::class);
$this->navigationManager = $this->createMock(INavigationManager::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->session = $this->createMock(ISession::class);
$this->request = $this->createMock(IRequest::class);
$this->contentSecurityPolicyManager = $this->createMock(ContentSecurityPolicyManager::class);
$this->csrfTokenManager = $this->createMock(CsrfTokenManager::class);
@@ -109,6 +113,7 @@ class SecurityMiddlewareTest extends \Test\TestCase {
$this->navigationManager,
$this->urlGenerator,
$this->logger,
+ $this->session,
'files',
$isLoggedIn,
$isAdminUser,
diff --git a/tests/lib/Authentication/Token/DefaultTokenMapperTest.php b/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
index 418a4d14f62..8fe0762daad 100644
--- a/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
+++ b/tests/lib/Authentication/Token/DefaultTokenMapperTest.php
@@ -27,6 +27,7 @@ use OC\Authentication\Token\DefaultToken;
use OC\Authentication\Token\DefaultTokenMapper;
use OC\Authentication\Token\IToken;
use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
use OCP\IUser;
use Test\TestCase;
@@ -40,6 +41,8 @@ class DefaultTokenMapperTest extends TestCase {
/** @var DefaultTokenMapper */
private $mapper;
+
+ /** @var IDBConnection */
private $dbConnection;
private $time;
@@ -122,7 +125,6 @@ class DefaultTokenMapperTest extends TestCase {
}
public function testGetToken() {
- $token = '1504445f1524fc801035448a95681a9378ba2e83930c814546c56e5d6ebde221198792fd900c88ed5ead0555780dad1ebce3370d7e154941cd5de87eb419899b';
$token = new DefaultToken();
$token->setUid('user2');
$token->setLoginName('User2');
@@ -151,6 +153,42 @@ class DefaultTokenMapperTest extends TestCase {
$this->mapper->getToken($token);
}
+ public function testGetTokenById() {
+ $token = new DefaultToken();
+ $token->setUid('user2');
+ $token->setLoginName('User2');
+ $token->setPassword('971a337057853344700bbeccf836519f|UwOQwyb34sJHtqPV|036d4890f8c21d17bbc7b88072d8ef049a5c832a38e97f3e3d5f9186e896c2593aee16883f617322fa242728d0236ff32d163caeb4bd45e14ca002c57a88665f');
+ $token->setName('Firefox on Android');
+ $token->setToken('1504445f1524fc801035448a95681a9378ba2e83930c814546c56e5d6ebde221198792fd900c88ed5ead0555780dad1ebce3370d7e154941cd5de87eb419899b');
+ $token->setType(IToken::TEMPORARY_TOKEN);
+ $token->setRemember(IToken::DO_NOT_REMEMBER);
+ $token->setLastActivity($this->time - 60 * 60 * 24 * 3);
+ $token->setLastCheck($this->time - 10);
+
+ $dbToken = $this->mapper->getToken($token->getToken());
+ $token->setId($dbToken->getId()); // We don't know the ID
+ $token->resetUpdatedFields();
+
+ $dbToken = $this->mapper->getTokenById($token->getId());
+ $this->assertEquals($token, $dbToken);
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testGetTokenByIdNotFound() {
+ $this->mapper->getTokenById(-1);
+ }
+
+ /**
+ * @expectedException \OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function testGetInvalidTokenById() {
+ $id = 42;
+
+ $this->mapper->getToken($id);
+ }
+
public function testGetTokenByUser() {
$user = $this->createMock(IUser::class);
$user->expects($this->once())
diff --git a/tests/lib/Authentication/Token/DefaultTokenProviderTest.php b/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
index 5e4d4f94366..8d92ee405a1 100644
--- a/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
+++ b/tests/lib/Authentication/Token/DefaultTokenProviderTest.php
@@ -22,9 +22,11 @@
namespace Test\Authentication\Token;
+use OC\Authentication\Exceptions\InvalidTokenException;
use OC\Authentication\Token\DefaultToken;
use OC\Authentication\Token\DefaultTokenProvider;
use OC\Authentication\Token\IToken;
+use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\Mapper;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IConfig;
@@ -376,4 +378,25 @@ class DefaultTokenProviderTest extends TestCase {
$this->tokenProvider->renewSessionToken('oldId', 'newId');
}
+ public function testGetTokenById() {
+ $token = $this->createMock(DefaultToken::class);
+
+ $this->mapper->expects($this->once())
+ ->method('getTokenById')
+ ->with($this->equalTo(42))
+ ->willReturn($token);
+
+ $this->assertSame($token, $this->tokenProvider->getTokenById(42));
+ }
+
+ public function testGetInvalidTokenById() {
+ $this->expectException(InvalidTokenException::class);
+
+ $this->mapper->expects($this->once())
+ ->method('getTokenById')
+ ->with($this->equalTo(42))
+ ->willThrowException(new DoesNotExistException('nope'));
+
+ $this->tokenProvider->getTokenById(42);
+ }
}
diff --git a/tests/lib/Authentication/Token/DefaultTokenTest.php b/tests/lib/Authentication/Token/DefaultTokenTest.php
new file mode 100644
index 00000000000..f00c32ccaf5
--- /dev/null
+++ b/tests/lib/Authentication/Token/DefaultTokenTest.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Authentication\Token;
+
+use OC\Authentication\Token\DefaultToken;
+use Test\TestCase;
+
+class DefaultTokenTest extends TestCase {
+ public function testSetScopeAsArray() {
+ $scope = ['filesystem' => false];
+ $token = new DefaultToken();
+ $token->setScope($scope);
+ $this->assertEquals(json_encode($scope), $token->getScope());
+ $this->assertEquals($scope, $token->getScopeAsArray());
+ }
+
+ public function testSetScopeAsString() {
+ $scope = ['filesystem' => false];
+ $token = new DefaultToken();
+ $token->setScope(json_encode($scope));
+ $this->assertEquals(json_encode($scope), $token->getScope());
+ $this->assertEquals($scope, $token->getScopeAsArray());
+ }
+
+ public function testDefaultScope() {
+ $scope = ['filesystem' => true];
+ $token = new DefaultToken();
+ $this->assertEquals($scope, $token->getScopeAsArray());
+ }
+}
diff --git a/tests/lib/Files/Cache/UpdaterLegacyTest.php b/tests/lib/Files/Cache/UpdaterLegacyTest.php
index 7d247968ca9..707ed70af23 100644
--- a/tests/lib/Files/Cache/UpdaterLegacyTest.php
+++ b/tests/lib/Files/Cache/UpdaterLegacyTest.php
@@ -128,24 +128,26 @@ class UpdaterLegacyTest extends \Test\TestCase {
Filesystem::file_put_contents('folder/substorage/foo.txt', 'asd');
$this->assertTrue($cache2->inCache('foo.txt'));
$cachedData = $cache2->get('foo.txt');
+ $oldEtag = $substorageCachedData['etag'];
$this->assertEquals(3, $cachedData['size']);
$mtime = $cachedData['mtime'];
$cachedData = $cache2->get('');
$this->assertInternalType('string', $substorageCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
$cachedData = $view->getFileInfo('folder');
$this->assertInternalType('string', $folderCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
}
public function testDelete() {
$textSize = strlen("dummy file data\n");
$imageSize = filesize(\OC::$SERVERROOT . '/core/img/logo.png');
$rootCachedData = $this->cache->get('');
+ $oldEtag = $rootCachedData['etag'];
$this->assertEquals(3 * $textSize + $imageSize, $rootCachedData['size']);
$this->assertTrue($this->cache->inCache('foo.txt'));
@@ -155,7 +157,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
$this->assertEquals(2 * $textSize + $imageSize, $cachedData['size']);
$this->assertInternalType('string', $rootCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
$this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
$rootCachedData = $cachedData;
@@ -164,14 +166,15 @@ class UpdaterLegacyTest extends \Test\TestCase {
$cachedData = $this->cache->get('');
$this->assertInternalType('string', $rootCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
$rootCachedData = $cachedData;
+ $oldEtag = $rootCachedData['etag'];
Filesystem::rmdir('bar_folder');
$this->assertFalse($this->cache->inCache('bar_folder'));
$cachedData = $this->cache->get('');
$this->assertInternalType('string', $rootCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($rootCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
$this->assertGreaterThanOrEqual($rootCachedData['mtime'], $cachedData['mtime']);
}
@@ -184,19 +187,20 @@ class UpdaterLegacyTest extends \Test\TestCase {
$this->assertTrue($cache2->inCache('foo.txt'));
$folderCachedData = $view->getFileInfo('folder');
$substorageCachedData = $cache2->get('');
+ $oldEtag = $folderCachedData['etag'];
Filesystem::unlink('folder/substorage/foo.txt');
$this->assertFalse($cache2->inCache('foo.txt'));
$cachedData = $cache2->get('');
$this->assertInternalType('string', $substorageCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($substorageCachedData, $cachedData['etag']);
$this->assertGreaterThanOrEqual($substorageCachedData['mtime'], $cachedData['mtime']);
$cachedData = $view->getFileInfo('folder');
$this->assertInternalType('string', $folderCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
$this->assertGreaterThanOrEqual($folderCachedData['mtime'], $cachedData['mtime']);
}
@@ -238,6 +242,7 @@ class UpdaterLegacyTest extends \Test\TestCase {
$view = new View('/' . self::$user . '/files');
$this->assertTrue($cache2->inCache('foo.txt'));
$folderCachedData = $view->getFileInfo('folder');
+ $oldEtag = $folderCachedData['etag'];
$substorageCachedData = $cache2->get('');
$fooCachedData = $cache2->get('foo.txt');
Filesystem::rename('folder/substorage/foo.txt', 'folder/substorage/bar.txt');
@@ -250,14 +255,14 @@ class UpdaterLegacyTest extends \Test\TestCase {
$cachedData = $cache2->get('');
$this->assertInternalType('string', $substorageCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($substorageCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
// rename can cause mtime change - invalid assert
// $this->assertEquals($mtime, $cachedData['mtime']);
$cachedData = $view->getFileInfo('folder');
$this->assertInternalType('string', $folderCachedData['etag']);
$this->assertInternalType('string', $cachedData['etag']);
- $this->assertNotSame($folderCachedData['etag'], $cachedData['etag']);
+ $this->assertNotSame($oldEtag, $cachedData['etag']);
// rename can cause mtime change - invalid assert
// $this->assertEquals($mtime, $cachedData['mtime']);
}
diff --git a/tests/lib/Files/FileInfoTest.php b/tests/lib/Files/FileInfoTest.php
new file mode 100644
index 00000000000..ee7a10ccec4
--- /dev/null
+++ b/tests/lib/Files/FileInfoTest.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files;
+
+use OC\AllConfig;
+use OC\Files\FileInfo;
+use OC\Files\Storage\Home;
+use OC\Files\Storage\Temporary;
+use OC\User\User;
+use OCP\IConfig;
+use Test\TestCase;
+use Test\Traits\UserTrait;
+
+class FileInfoTest extends TestCase {
+ use UserTrait;
+
+ private $config;
+
+ public function setUp() {
+ parent::setUp();
+ $this->createUser('foo', 'foo');
+ $this->config = $this->getMockBuilder(IConfig::class)->getMock();
+ }
+
+ public function testIsMountedHomeStorage() {
+ $fileInfo = new FileInfo(
+ '',
+ new Home(['user' => new User('foo', $this->userBackend, null, $this->config)]),
+ '', [], null);
+ $this->assertFalse($fileInfo->isMounted());
+ }
+
+ public function testIsMountedNonHomeStorage() {
+ $fileInfo = new FileInfo(
+ '',
+ new Temporary(),
+ '', [], null);
+ $this->assertTrue($fileInfo->isMounted());
+ }
+}
diff --git a/tests/lib/Files/ObjectStore/LocalTest.php b/tests/lib/Files/ObjectStore/LocalTest.php
new file mode 100644
index 00000000000..99aa23e065d
--- /dev/null
+++ b/tests/lib/Files/ObjectStore/LocalTest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Files\ObjectStore;
+
+use OC\Files\ObjectStore\StorageObjectStore;
+use OC\Files\Storage\Temporary;
+
+class LocalTest extends ObjectStoreTest {
+ /**
+ * @return \OCP\Files\ObjectStore\IObjectStore
+ */
+ protected function getInstance() {
+ $storage = new Temporary();
+ return new StorageObjectStore($storage);
+ }
+
+}
diff --git a/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php b/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php
new file mode 100644
index 00000000000..c9d6c1bd922
--- /dev/null
+++ b/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * @author Jörn Friedrich Dreyer
+ * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Files\ObjectStore;
+
+use OC\Files\ObjectStore\ObjectStoreStorage;
+use OC\Files\ObjectStore\StorageObjectStore;
+use OC\Files\Storage\Temporary;
+use OCP\Files\ObjectStore\IObjectStore;
+use Test\Files\Storage\Storage;
+
+/**
+ * @group DB
+ */
+class ObjectStoreStorageTest extends Storage {
+
+ /**
+ * @var IObjectStore
+ */
+ private $objectStorage;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $baseStorage = new Temporary();
+ $this->objectStorage = new StorageObjectStore($baseStorage);
+ $config['objectstore'] = $this->objectStorage;
+ $this->instance = new ObjectStoreStorage($config);
+ }
+
+ protected function tearDown() {
+ if (is_null($this->instance)) {
+ return;
+ }
+ $this->instance->getCache()->clear();
+
+ parent::tearDown();
+ }
+
+ public function testStat() {
+
+ $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
+ $ctimeStart = time();
+ $this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
+ $this->assertTrue($this->instance->isReadable('/lorem.txt'));
+ $ctimeEnd = time();
+ $mTime = $this->instance->filemtime('/lorem.txt');
+
+ // 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');
+ //only size and mtime are required in the result
+ $this->assertEquals($stat['size'], $this->instance->filesize('/lorem.txt'));
+ $this->assertEquals($stat['mtime'], $mTime);
+
+ if ($this->instance->touch('/lorem.txt', 100) !== false) {
+ $mTime = $this->instance->filemtime('/lorem.txt');
+ $this->assertEquals($mTime, 100);
+ }
+ }
+
+ public function testCheckUpdate() {
+ $this->markTestSkipped('Detecting external changes is not supported on object storages');
+ }
+
+ /**
+ * @dataProvider copyAndMoveProvider
+ */
+ public function testMove($source, $target) {
+ $this->initSourceAndTarget($source);
+ $sourceId = $this->instance->getCache()->getId(ltrim('/',$source));
+ $this->assertNotEquals(-1, $sourceId);
+
+ $this->instance->rename($source, $target);
+
+ $this->assertTrue($this->instance->file_exists($target), $target.' was not created');
+ $this->assertFalse($this->instance->file_exists($source), $source.' still exists');
+ $this->assertSameAsLorem($target);
+
+ $targetId = $this->instance->getCache()->getId(ltrim('/',$target));
+ $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
+ }
+
+ public function testRenameDirectory() {
+ $this->instance->mkdir('source');
+ $this->instance->file_put_contents('source/test1.txt', 'foo');
+ $this->instance->file_put_contents('source/test2.txt', 'qwerty');
+ $this->instance->mkdir('source/subfolder');
+ $this->instance->file_put_contents('source/subfolder/test.txt', 'bar');
+ $sourceId = $this->instance->getCache()->getId('source');
+ $this->assertNotEquals(-1, $sourceId);
+ $this->instance->rename('source', 'target');
+
+ $this->assertFalse($this->instance->file_exists('source'));
+ $this->assertFalse($this->instance->file_exists('source/test1.txt'));
+ $this->assertFalse($this->instance->file_exists('source/test2.txt'));
+ $this->assertFalse($this->instance->file_exists('source/subfolder'));
+ $this->assertFalse($this->instance->file_exists('source/subfolder/test.txt'));
+
+ $this->assertTrue($this->instance->file_exists('target'));
+ $this->assertTrue($this->instance->file_exists('target/test1.txt'));
+ $this->assertTrue($this->instance->file_exists('target/test2.txt'));
+ $this->assertTrue($this->instance->file_exists('target/subfolder'));
+ $this->assertTrue($this->instance->file_exists('target/subfolder/test.txt'));
+
+ $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
+ $this->assertEquals('qwerty', $this->instance->file_get_contents('target/test2.txt'));
+ $this->assertEquals('bar', $this->instance->file_get_contents('target/subfolder/test.txt'));
+ $targetId = $this->instance->getCache()->getId('target');
+ $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
+ }
+
+ public function testRenameOverWriteDirectory() {
+ $this->instance->mkdir('source');
+ $this->instance->file_put_contents('source/test1.txt', 'foo');
+ $sourceId = $this->instance->getCache()->getId('source');
+ $this->assertNotEquals(-1, $sourceId);
+
+ $this->instance->mkdir('target');
+ $this->instance->file_put_contents('target/test1.txt', 'bar');
+ $this->instance->file_put_contents('target/test2.txt', 'bar');
+
+ $this->instance->rename('source', 'target');
+
+ $this->assertFalse($this->instance->file_exists('source'));
+ $this->assertFalse($this->instance->file_exists('source/test1.txt'));
+ $this->assertFalse($this->instance->file_exists('target/test2.txt'));
+ $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
+ $targetId = $this->instance->getCache()->getId('target');
+ $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
+ }
+
+ public function testRenameOverWriteDirectoryOverFile() {
+ $this->instance->mkdir('source');
+ $this->instance->file_put_contents('source/test1.txt', 'foo');
+ $sourceId = $this->instance->getCache()->getId('source');
+ $this->assertNotEquals(-1, $sourceId);
+
+ $this->instance->file_put_contents('target', 'bar');
+
+ $this->instance->rename('source', 'target');
+
+ $this->assertFalse($this->instance->file_exists('source'));
+ $this->assertFalse($this->instance->file_exists('source/test1.txt'));
+ $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
+ $targetId = $this->instance->getCache()->getId('target');
+ $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
+ }
+}
diff --git a/tests/lib/Files/ObjectStore/ObjectStoreTest.php b/tests/lib/Files/ObjectStore/ObjectStoreTest.php
new file mode 100644
index 00000000000..2116306053e
--- /dev/null
+++ b/tests/lib/Files/ObjectStore/ObjectStoreTest.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Files\ObjectStore;
+
+use Test\TestCase;
+
+abstract class ObjectStoreTest extends TestCase {
+
+ /**
+ * @return \OCP\Files\ObjectStore\IObjectStore
+ */
+ abstract protected function getInstance();
+
+ private function stringToStream($data) {
+ $stream = fopen('php://temp', 'w+');
+ fwrite($stream, $data);
+ rewind($stream);
+ return $stream;
+ }
+
+ public function testWriteRead() {
+ $stream = $this->stringToStream('foobar');
+
+ $instance = $this->getInstance();
+
+ $instance->writeObject('1', $stream);
+
+ $result = $instance->readObject('1');
+ $instance->deleteObject('1');
+
+ $this->assertEquals('foobar', stream_get_contents($result));
+
+ }
+
+ public function testDelete() {
+ $stream = $this->stringToStream('foobar');
+
+ $instance = $this->getInstance();
+
+ $instance->writeObject('2', $stream);
+
+ $instance->deleteObject('2');
+
+ try {
+ // to to read to verify that the object no longer exists
+ $instance->readObject('2');
+ $this->fail();
+ } catch (\Exception $e) {
+ // dummy assert to keep phpunit happy
+ $this->assertEquals(1, 1);
+ }
+ }
+
+ public function testReadNonExisting() {
+ $instance = $this->getInstance();
+
+ try {
+ $instance->readObject('non-existing');
+ $this->fail();
+ } catch (\Exception $e) {
+ // dummy assert to keep phpunit happy
+ $this->assertEquals(1, 1);
+ }
+ }
+
+ public function testDeleteNonExisting() {
+ $instance = $this->getInstance();
+
+ try {
+ $instance->deleteObject('non-existing');
+ $this->fail();
+ } catch (\Exception $e) {
+ // dummy assert to keep phpunit happy
+ $this->assertEquals(1, 1);
+ }
+ }
+}
diff --git a/tests/lib/Files/ObjectStore/S3Test.php b/tests/lib/Files/ObjectStore/S3Test.php
new file mode 100644
index 00000000000..10afb9a7aa8
--- /dev/null
+++ b/tests/lib/Files/ObjectStore/S3Test.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Files\ObjectStore;
+
+use OC\Files\ObjectStore\S3;
+
+class S3Test extends ObjectStoreTest {
+ /**
+ * @return \OCP\Files\ObjectStore\IObjectStore
+ */
+ protected function getInstance() {
+ $config = \OC::$server->getConfig()->getSystemValue('objectstore');
+ if (!is_array($config) || $config['class'] !== 'OC\\Files\\ObjectStore\\S3') {
+ $this->markTestSkipped('objectstore not configured for s3');
+ }
+
+ return new S3($config['arguments']);
+ }
+}
diff --git a/tests/lib/Files/ObjectStore/SwiftTest.php b/tests/lib/Files/ObjectStore/SwiftTest.php
index 9f69e040f87..f2aeace769c 100644
--- a/tests/lib/Files/ObjectStore/SwiftTest.php
+++ b/tests/lib/Files/ObjectStore/SwiftTest.php
@@ -1,198 +1,38 @@
<?php
/**
- * @author Jörn Friedrich Dreyer
- * @copyright (c) 2014 Jörn Friedrich Dreyer <jfd@owncloud.com>
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
*
- * 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.
+ * @license GNU AGPL version 3 or any later version
*
- * This library is distributed in the hope that it will be useful,
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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.
+ * 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 <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace Test\Files\ObjectStore;
-use OC\Files\ObjectStore\ObjectStoreStorage;
use OC\Files\ObjectStore\Swift;
-/**
- * Class SwiftTest
- *
- * @group DB
- *
- * @package Test\Files\Cache\ObjectStore
- */
-class SwiftTest extends \Test\Files\Storage\Storage {
-
+class SwiftTest extends ObjectStoreTest {
/**
- * @var Swift
+ * @return \OCP\Files\ObjectStore\IObjectStore
*/
- private $objectStorage;
-
- protected function setUp() {
- parent::setUp();
-
- if (!getenv('RUN_OBJECTSTORE_TESTS')) {
- $this->markTestSkipped('objectstore tests are unreliable in some environments');
- }
-
- // reset backend
- \OC_User::clearBackends();
- \OC_User::useBackend('database');
-
- // create users
- $users = array('test');
- foreach($users as $userName) {
- $user = \OC::$server->getUserManager()->get($userName);
- if ($user !== null) { $user->delete(); }
- \OC::$server->getUserManager()->createUser($userName, $userName);
- }
-
- // main test user
- \OC_Util::tearDownFS();
- \OC_User::setUserId('');
- \OC\Files\Filesystem::tearDown();
- \OC_User::setUserId('test');
-
+ protected function getInstance() {
$config = \OC::$server->getConfig()->getSystemValue('objectstore');
- $this->objectStorage = new Swift($config['arguments']);
- $config['objectstore'] = $this->objectStorage;
- $this->instance = new ObjectStoreStorage($config);
- }
-
- protected function tearDown() {
- if (is_null($this->instance)) {
- return;
- }
- $this->objectStorage->deleteContainer(true);
- $this->instance->getCache()->clear();
-
- $users = array('test');
- foreach($users as $userName) {
- $user = \OC::$server->getUserManager()->get($userName);
- if ($user !== null) { $user->delete(); }
- }
- parent::tearDown();
- }
-
- public function testStat() {
-
- $textFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
- $ctimeStart = time();
- $this->instance->file_put_contents('/lorem.txt', file_get_contents($textFile));
- $this->assertTrue($this->instance->isReadable('/lorem.txt'));
- $ctimeEnd = time();
- $mTime = $this->instance->filemtime('/lorem.txt');
-
- // 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');
- //only size and mtime are required in the result
- $this->assertEquals($stat['size'], $this->instance->filesize('/lorem.txt'));
- $this->assertEquals($stat['mtime'], $mTime);
-
- if ($this->instance->touch('/lorem.txt', 100) !== false) {
- $mTime = $this->instance->filemtime('/lorem.txt');
- $this->assertEquals($mTime, 100);
+ if (!is_array($config) || $config['class'] !== 'OC\\Files\\ObjectStore\\Swift') {
+ $this->markTestSkipped('objectstore not configured for swift');
}
- }
-
- public function testCheckUpdate() {
- $this->markTestSkipped('Detecting external changes is not supported on object storages');
- }
-
- /**
- * @dataProvider copyAndMoveProvider
- */
- public function testMove($source, $target) {
- $this->initSourceAndTarget($source);
- $sourceId = $this->instance->getCache()->getId(ltrim('/',$source));
- $this->assertNotEquals(-1, $sourceId);
-
- $this->instance->rename($source, $target);
-
- $this->assertTrue($this->instance->file_exists($target), $target.' was not created');
- $this->assertFalse($this->instance->file_exists($source), $source.' still exists');
- $this->assertSameAsLorem($target);
-
- $targetId = $this->instance->getCache()->getId(ltrim('/',$target));
- $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
- }
-
- public function testRenameDirectory() {
- $this->instance->mkdir('source');
- $this->instance->file_put_contents('source/test1.txt', 'foo');
- $this->instance->file_put_contents('source/test2.txt', 'qwerty');
- $this->instance->mkdir('source/subfolder');
- $this->instance->file_put_contents('source/subfolder/test.txt', 'bar');
- $sourceId = $this->instance->getCache()->getId('source');
- $this->assertNotEquals(-1, $sourceId);
- $this->instance->rename('source', 'target');
-
- $this->assertFalse($this->instance->file_exists('source'));
- $this->assertFalse($this->instance->file_exists('source/test1.txt'));
- $this->assertFalse($this->instance->file_exists('source/test2.txt'));
- $this->assertFalse($this->instance->file_exists('source/subfolder'));
- $this->assertFalse($this->instance->file_exists('source/subfolder/test.txt'));
-
- $this->assertTrue($this->instance->file_exists('target'));
- $this->assertTrue($this->instance->file_exists('target/test1.txt'));
- $this->assertTrue($this->instance->file_exists('target/test2.txt'));
- $this->assertTrue($this->instance->file_exists('target/subfolder'));
- $this->assertTrue($this->instance->file_exists('target/subfolder/test.txt'));
-
- $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
- $this->assertEquals('qwerty', $this->instance->file_get_contents('target/test2.txt'));
- $this->assertEquals('bar', $this->instance->file_get_contents('target/subfolder/test.txt'));
- $targetId = $this->instance->getCache()->getId('target');
- $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
- }
-
- public function testRenameOverWriteDirectory() {
- $this->instance->mkdir('source');
- $this->instance->file_put_contents('source/test1.txt', 'foo');
- $sourceId = $this->instance->getCache()->getId('source');
- $this->assertNotEquals(-1, $sourceId);
-
- $this->instance->mkdir('target');
- $this->instance->file_put_contents('target/test1.txt', 'bar');
- $this->instance->file_put_contents('target/test2.txt', 'bar');
-
- $this->instance->rename('source', 'target');
-
- $this->assertFalse($this->instance->file_exists('source'));
- $this->assertFalse($this->instance->file_exists('source/test1.txt'));
- $this->assertFalse($this->instance->file_exists('target/test2.txt'));
- $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
- $targetId = $this->instance->getCache()->getId('target');
- $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
- }
-
- public function testRenameOverWriteDirectoryOverFile() {
- $this->instance->mkdir('source');
- $this->instance->file_put_contents('source/test1.txt', 'foo');
- $sourceId = $this->instance->getCache()->getId('source');
- $this->assertNotEquals(-1, $sourceId);
-
- $this->instance->file_put_contents('target', 'bar');
-
- $this->instance->rename('source', 'target');
- $this->assertFalse($this->instance->file_exists('source'));
- $this->assertFalse($this->instance->file_exists('source/test1.txt'));
- $this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
- $targetId = $this->instance->getCache()->getId('target');
- $this->assertSame($sourceId, $targetId, 'fileid must be stable on move or shares will break');
+ return new Swift($config['arguments']);
}
}
diff --git a/tests/lib/Files/ViewTest.php b/tests/lib/Files/ViewTest.php
index b0233116ed5..4c264472385 100644
--- a/tests/lib/Files/ViewTest.php
+++ b/tests/lib/Files/ViewTest.php
@@ -842,10 +842,12 @@ class ViewTest extends \Test\TestCase {
'storage_mtime' => $past
));
+ $oldEtag = $oldFolderInfo->getEtag();
+
$view->getFileInfo('/test/sub/storage/test.txt');
$newFolderInfo = $view->getFileInfo('/test');
- $this->assertNotEquals($newFolderInfo->getEtag(), $oldFolderInfo->getEtag());
+ $this->assertNotEquals($newFolderInfo->getEtag(), $oldEtag);
}
/**
diff --git a/tests/lib/InstallerTest.php b/tests/lib/InstallerTest.php
index 1212d3d7559..dadaffe1879 100644
--- a/tests/lib/InstallerTest.php
+++ b/tests/lib/InstallerTest.php
@@ -547,7 +547,7 @@ MPLX6f5V9tCJtlH6ztmEcDROfvuVc0U3rEhqx2hphoyo+MZrPFpdcJL8KkIdMKbY
],
];
$this->appFetcher
- ->expects($this->once())
+ ->expects($this->at(0))
->method('get')
->willReturn($appArray);
$realTmpFile = \OC::$server->getTempManager()->getTemporaryFile('.tar.gz');
@@ -568,7 +568,7 @@ MPLX6f5V9tCJtlH6ztmEcDROfvuVc0U3rEhqx2hphoyo+MZrPFpdcJL8KkIdMKbY
->method('get')
->with('https://example.com', ['save_to' => $realTmpFile]);
$this->clientService
- ->expects($this->once())
+ ->expects($this->at(0))
->method('newClient')
->willReturn($client);
@@ -577,4 +577,91 @@ MPLX6f5V9tCJtlH6ztmEcDROfvuVc0U3rEhqx2hphoyo+MZrPFpdcJL8KkIdMKbY
$this->assertTrue(file_exists(__DIR__ . '/../../apps/testapp/appinfo/info.xml'));
$this->assertEquals('0.9', \OC_App::getAppVersionByPath(__DIR__ . '/../../apps/testapp/'));
}
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage App for id testapp has version 0.9 and tried to update to lower version 0.8
+ */
+ public function testDownloadAppWithDowngrade() {
+ $appArray = [
+ [
+ 'id' => 'testapp',
+ 'certificate' => '-----BEGIN CERTIFICATE-----
+MIIEAjCCAuoCAhAbMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
+VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
+MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
+dXRob3JpdHkwHhcNMTYxMDMxMTgxNTI2WhcNMjcwMjA2MTgxNTI2WjASMRAwDgYD
+VQQDEwd0ZXN0YXBwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqa0x
+FcVa0YcO/ABqSNdbf7Bzp2PBBJzVM9gI4/HzzBKU/NY9/RibBBpNjAIWEFAbTI4j
+ilFSoxHDQ8HrboFOeKCrOIdp9ATQ8SnYVNIQ12Ym3LA/XxcG0gG0H7DeS9C0uACe
+svN8fwD1wnKnLLU9GBzO77jwYkneed85wwKG4waHd3965gxQWq0N5gnYS0TTn7Yr
+l1veRiw+ryefXvfWI0cN1WBZJ/4XAkwVlpG1HP60AunIpcwn9bfG4XCka+7x26E4
+6Hw0Ot7D7j0yzVzimJDPB2h2buEtPVd6m+oNPueVvKGta+p6cEEaHlFVh2Pa9DI+
+me3nb6aXE2kABWXav3BmK18A5Rg4ZY4VFYvmHmxkOhT/ulGZRqy6TccL/optqs52
+KQ6P0e5dfmhLeoCvJObD+ZYKv+kJCRFtX1Hve/R4IHG6XSFKUfrRjyor9b6TX2L/
+l2vV0mFjmy4g3l05vWHg1Edtq7M29S/xNA3/hF29NjBq6NoMbLGcBtFced1iK07Z
+yHLjXRZRfURP671Svqqg8pjxuDqkJ2vIj/Vpod4kF2jeiZYXcfmNKhEhxpkccSe0
+dI6p76Ne7XSUpf8yCPiSnWZLadqKZdEulcB4SlrZO2+/pycgqrqihofDrvDeWeeg
+gQyvbZZKl4ylRNj6IRKnosKLVXNqMHQxLmxLHeUCAwEAATANBgkqhkiG9w0BAQsF
+AAOCAQEALkKQwa40HfuP4Q6ShwBFJbXLyodIAXCT014kBVjReDKNl5oHtMXRjPxj
+nj9doKu+3bLNuLCv9uU3H5+t/GFogReV3Av3z/fCqJ6wHv/KX+lacj31dWXZGD8G
+z+RYibrxKkPN0V6q1mSvkg3hJOOE+/4FPIdc8PNlgratv3WS4dT8QwGSUavHW2Kx
+89nIdnwtLEFpgML/bTG0dm8BH57xER8LCYixW1VmpV6A4IsoKVsnB7KUCRTK3iUJ
+Zh8Xg8UMNrOtXc1Wx1Wmjaa4ZE9dY6/KkU2ny2UWyDHKU/9VE8QQ4HN93gxU4+H7
+cUg0V1uAxqUvKytKkMfcyPWsz/AINA==
+-----END CERTIFICATE-----',
+ 'releases' => [
+ [
+ 'download' => 'https://example.com',
+ 'signature' => 'KMSao4cKdMIYxeT8Bm4lrmSeIQnk7YzJZh+Vz+4LVSBwF+OMmcujryQuWLXmbPfg
+4hGI9zS025469VNjUoCprn01H8NBq3O1cXz+ewG1oxYWMMQFZDkOtUQ+XZ27b91t
+y0l45H6C8j0sTeSrUb/LCjrdm+buUygkhC2RZxCI6tLi4rYWj0MiqDz98XkbB3te
+pW3ZND6mG6Jxn1fnd35paqZ/+URMftoLQ4K+6vJoBVGnug9nk1RpGLouICI0zCrz
+YPTsBHo0s2mPvQQ/ASacWYmSe5R6r5JCzNeGMpViGCqCYPbwuebgqK079s2zvSF9
+mSLAm2Tk6gCM29N8Vdfr6ppCvIbuNzlLU/dGdYHAILgxEsm/odZjt1Fhs4lOo3A5
+9ToaNl5+qOEkggwfE/QqceHAY2soW9V5d9izhTCDgXmxpPpPXkwPPTz04ZUpi1Yc
+OdZZOswbEcc2jUC5T7a7Tnp0uBOkdqat6jB4oMGwU1ldYLCGRyy546cPPTXJw5kH
+9WfeKJ/mavrSLVa7QqZ4RCcMigmijT1kdqbaEh05IZNrzs6VDcS2EIrbDX8SGXUk
+uDDkPXZEXqNDEjyONfDXVRLiqDa52Gg+I4vW/l/4ZOFgAWdZkqPPuZFaqzZpsJXm
+JXhrdaWDZ8fzpUjugrtC3qslsqL0dzgU37anS3HwrT8=',
+ ],
+ [
+ 'download' => 'https://nextcloud.com',
+ ],
+ ],
+ ],
+ ];
+ $this->appFetcher
+ ->expects($this->at(1))
+ ->method('get')
+ ->willReturn($appArray);
+ $realTmpFile = \OC::$server->getTempManager()->getTemporaryFile('.tar.gz');
+ copy(__DIR__ . '/../data/testapp.0.8.tar.gz', $realTmpFile);
+ $this->tempManager
+ ->expects($this->at(2))
+ ->method('getTemporaryFile')
+ ->with('.tar.gz')
+ ->willReturn($realTmpFile);
+ $realTmpFolder = \OC::$server->getTempManager()->getTemporaryFolder();
+ $this->tempManager
+ ->expects($this->at(3))
+ ->method('getTemporaryFolder')
+ ->willReturn($realTmpFolder);
+ $client = $this->createMock(IClient::class);
+ $client
+ ->expects($this->once())
+ ->method('get')
+ ->with('https://example.com', ['save_to' => $realTmpFile]);
+ $this->clientService
+ ->expects($this->at(1))
+ ->method('newClient')
+ ->willReturn($client);
+ $this->testDownloadAppSuccessful();
+ $this->assertTrue(file_exists(__DIR__ . '/../../apps/testapp/appinfo/info.xml'));
+ $this->assertEquals('0.9', \OC_App::getAppVersionByPath(__DIR__ . '/../../apps/testapp/'));
+
+ $this->installer->downloadApp('testapp');
+ $this->assertTrue(file_exists(__DIR__ . '/../../apps/testapp/appinfo/info.xml'));
+ $this->assertEquals('0.8', \OC_App::getAppVersionByPath(__DIR__ . '/../../apps/testapp/'));
+ }
}
diff --git a/tests/lib/Lockdown/Filesystem/NoFSTest.php b/tests/lib/Lockdown/Filesystem/NoFSTest.php
new file mode 100644
index 00000000000..a0900ad769d
--- /dev/null
+++ b/tests/lib/Lockdown/Filesystem/NoFSTest.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * @copyright 2016, Robin Appelman <robin@icewind.nl>
+ *
+ * @author Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Lockdown\Filesystem;
+
+use OC\Authentication\Token\DefaultToken;
+use OC\Files\Filesystem;
+use OC\Lockdown\Filesystem\NullStorage;
+use Test\Traits\UserTrait;
+
+/**
+ * @group DB
+ */
+class NoFSTest extends \Test\TestCase {
+ use UserTrait;
+
+ public function tearDown() {
+ $token = new DefaultToken();
+ $token->setScope([
+ 'filesystem' => true
+ ]);
+ \OC::$server->getLockdownManager()->setToken($token);
+ return parent::tearDown();
+ }
+
+ public function setUp() {
+ parent::setUp();
+ $token = new DefaultToken();
+ $token->setScope([
+ 'filesystem' => false
+ ]);
+
+ \OC::$server->getLockdownManager()->setToken($token);
+ $this->createUser('foo', 'var');
+ }
+
+ public function testSetupFS() {
+ \OC_Util::tearDownFS();
+ \OC_Util::setupFS('foo');
+
+ $this->assertInstanceOf(NullStorage::class, Filesystem::getStorage('/foo/files'));
+ }
+}
diff --git a/tests/lib/Lockdown/Filesystem/NullCacheTest.php b/tests/lib/Lockdown/Filesystem/NullCacheTest.php
new file mode 100644
index 00000000000..3a4e3f3a402
--- /dev/null
+++ b/tests/lib/Lockdown/Filesystem/NullCacheTest.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Lockdown\Filesystem;
+
+use OC\ForbiddenException;
+use OC\Lockdown\Filesystem\NullCache;
+use OCP\Constants;
+use OCP\Files\Cache\ICache;
+use OCP\Files\FileInfo;
+
+class NulLCacheTest extends \Test\TestCase {
+
+ /** @var NullCache */
+ private $cache;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->cache = new NullCache();
+ }
+
+ public function testGetNumericStorageId() {
+ $this->assertSame(-1, $this->cache->getNumericStorageId());
+ }
+
+ public function testGetEmpty() {
+ $this->assertNull($this->cache->get('foo'));
+ }
+
+ public function testGet() {
+ $data = $this->cache->get('');
+
+ $this->assertEquals(-1, $data['fileid']);
+ $this->assertEquals(-1, $data['parent']);
+ $this->assertEquals('', $data['name']);
+ $this->assertEquals('', $data['path']);
+ $this->assertEquals('0', $data['size']);
+ $this->assertEquals('', $data['etag']);
+ $this->assertEquals(FileInfo::MIMETYPE_FOLDER, $data['mimetype']);
+ $this->assertEquals('httpd', $data['mimepart']);
+ $this->assertEquals(Constants::PERMISSION_READ, $data['permissions']);
+ }
+
+ public function testGetFolderContents() {
+ $this->assertSame([], $this->cache->getFolderContents('foo'));
+ }
+
+ public function testGetFolderContentsById() {
+ $this->assertSame([], $this->cache->getFolderContentsById(42));
+ }
+
+ public function testPut() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->put('foo', ['size' => 100]);
+ }
+
+ public function testInsert() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->insert('foo', ['size' => 100]);
+ }
+
+ public function testUpdate() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->update('foo', ['size' => 100]);
+ }
+
+ public function testGetId() {
+ $this->assertSame(-1, $this->cache->getId('foo'));
+ }
+
+ public function testGetParentId() {
+ $this->assertSame(-1, $this->cache->getParentId('foo'));
+ }
+
+ public function testInCache() {
+ $this->assertTrue($this->cache->inCache(''));
+ $this->assertFalse($this->cache->inCache('foo'));
+ }
+
+ public function testRemove() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->remove('foo');
+ }
+
+ public function testMove() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->move('foo', 'bar');
+ }
+
+ public function testMoveFromCache() {
+ $sourceCache = $this->createMock(ICache::class);
+
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->cache->moveFromCache($sourceCache, 'foo', 'bar');
+ }
+
+ public function testGetStatus() {
+ $this->assertSame(ICache::COMPLETE, $this->cache->getStatus('foo'));
+ }
+
+ public function testSearch() {
+ $this->assertSame([], $this->cache->search('foo'));
+ }
+
+ public function testSearchByMime() {
+ $this->assertSame([], $this->cache->searchByMime('foo'));
+ }
+
+ public function testSearchByTag() {
+ $this->assertSame([], $this->cache->searchByTag('foo', 'user'));
+ }
+
+ public function testGetIncomplete() {
+ $this->assertSame([], $this->cache->getIncomplete());
+ }
+
+ public function testGetPathById() {
+ $this->assertSame('', $this->cache->getPathById(42));
+ }
+
+ public function testNormalize() {
+ $this->assertSame('foo/ bar /', $this->cache->normalize('foo/ bar /'));
+ }
+}
diff --git a/tests/lib/Lockdown/Filesystem/NullStorageTest.php b/tests/lib/Lockdown/Filesystem/NullStorageTest.php
new file mode 100644
index 00000000000..dc99eb4c03a
--- /dev/null
+++ b/tests/lib/Lockdown/Filesystem/NullStorageTest.php
@@ -0,0 +1,245 @@
+<?php
+/**
+ * @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Lockdown\Filesystem;
+
+use Icewind\Streams\IteratorDirectory;
+use OC\ForbiddenException;
+use OC\Lockdown\Filesystem\NullCache;
+use OC\Lockdown\Filesystem\NullStorage;
+use OCP\Files\Storage;
+use Test\TestCase;
+
+class NullStorageTest extends TestCase {
+
+ /** @var NullStorage */
+ private $storage;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->storage = new NullStorage([]);
+ }
+
+ public function testGetId() {
+ $this->assertSame('null', $this->storage->getId());
+ }
+
+ public function testMkdir() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->mkdir('foo');
+ }
+
+ public function testRmdir() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->rmdir('foo');
+ }
+
+ public function testOpendir() {
+ $this->assertInstanceOf(IteratorDirectory::class, $this->storage->opendir('foo'));
+ }
+
+ public function testIs_dir() {
+ $this->assertTrue($this->storage->is_dir(''));
+ $this->assertFalse($this->storage->is_dir('foo'));
+ }
+
+ public function testIs_file() {
+ $this->assertFalse($this->storage->is_file('foo'));
+ }
+
+ public function testStat() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->stat('foo');
+ }
+
+ public function testFiletype() {
+ $this->assertSame('dir', $this->storage->filetype(''));
+ $this->assertFalse($this->storage->filetype('foo'));
+ }
+
+ public function testFilesize() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->filesize('foo');
+ }
+
+ public function testIsCreatable() {
+ $this->assertFalse($this->storage->isCreatable('foo'));
+ }
+
+ public function testIsReadable() {
+ $this->assertTrue($this->storage->isReadable(''));
+ $this->assertFalse($this->storage->isReadable('foo'));
+ }
+
+ public function testIsUpdatable() {
+ $this->assertFalse($this->storage->isUpdatable('foo'));
+ }
+
+ public function testIsDeletable() {
+ $this->assertFalse($this->storage->isDeletable('foo'));
+ }
+
+ public function testIsSharable() {
+ $this->assertFalse($this->storage->isSharable('foo'));
+ }
+
+ public function testGetPermissions() {
+ $this->assertNull($this->storage->getPermissions('foo'));
+ }
+
+ public function testFile_exists() {
+ $this->assertTrue($this->storage->file_exists(''));
+ $this->assertFalse($this->storage->file_exists('foo'));
+ }
+
+ public function testFilemtime() {
+ $this->assertFalse($this->storage->filemtime('foo'));
+ }
+
+ public function testFile_get_contents() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->file_get_contents('foo');
+ }
+
+ public function testFile_put_contents() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->file_put_contents('foo', 'bar');
+ }
+
+ public function testUnlink() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->unlink('foo');
+ }
+
+ public function testRename() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->rename('foo', 'bar');
+ }
+
+ public function testCopy() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->copy('foo', 'bar');
+ }
+
+ public function testFopen() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->fopen('foo', 'R');
+ }
+
+ public function testGetMimeType() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->getMimeType('foo');
+ }
+
+ public function testHash() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->hash('md5', 'foo', true);
+ }
+
+ public function testFree_space() {
+ $this->assertSame(0, $this->storage->free_space('foo'));
+ }
+
+ public function testTouch() {
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->touch('foo');
+ }
+
+ public function testGetLocalFile() {
+ $this->assertFalse($this->storage->getLocalFile('foo'));
+ }
+
+ public function testHasUpdated() {
+ $this->assertFalse($this->storage->hasUpdated('foo', 42));
+ }
+
+ public function testGetETag() {
+ $this->assertSame('', $this->storage->getETag('foo'));
+ }
+
+ public function testIsLocal() {
+ $this->assertFalse($this->storage->isLocal());
+ }
+
+ public function testGetDirectDownload() {
+ $this->assertFalse($this->storage->getDirectDownload('foo'));
+ }
+
+ public function testCopyFromStorage() {
+ $sourceStorage = $this->createMock(Storage::class);
+
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->copyFromStorage($sourceStorage, 'foo', 'bar');
+ }
+
+ public function testMoveFromStorage() {
+ $sourceStorage = $this->createMock(Storage::class);
+
+ $this->expectException(ForbiddenException::class);
+ $this->expectExceptionMessage('This request is not allowed to access the filesystem');
+
+ $this->storage->moveFromStorage($sourceStorage, 'foo', 'bar');
+ }
+
+ public function testTest() {
+ $this->assertTrue($this->storage->test());
+ return true;
+ }
+
+ public function testGetOwner() {
+ $this->assertNull($this->storage->getOwner('foo'));
+ }
+
+ public function testGetCache() {
+ $this->assertInstanceOf(NullCache::class, $this->storage->getCache('foo'));
+ }
+}
diff --git a/tests/lib/Lockdown/LockdownManagerTest.php b/tests/lib/Lockdown/LockdownManagerTest.php
new file mode 100644
index 00000000000..4cbd9d71a5c
--- /dev/null
+++ b/tests/lib/Lockdown/LockdownManagerTest.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test\Lockdown;
+
+use OC\Authentication\Token\DefaultToken;
+use OC\Lockdown\LockdownManager;
+use Test\TestCase;
+
+class LockdownManagerTest extends TestCase {
+ public function testCanAccessFilesystemDisabled() {
+ $manager = new LockdownManager();
+ $this->assertTrue($manager->canAccessFilesystem());
+ }
+
+ public function testCanAccessFilesystemAllowed() {
+ $token = new DefaultToken();
+ $token->setScope(['filesystem' => true]);
+ $manager = new LockdownManager();
+ $manager->setToken($token);
+ $this->assertTrue($manager->canAccessFilesystem());
+ }
+
+ public function testCanAccessFilesystemNotAllowed() {
+ $token = new DefaultToken();
+ $token->setScope(['filesystem' => false]);
+ $manager = new LockdownManager();
+ $manager->setToken($token);
+ $this->assertFalse($manager->canAccessFilesystem());
+ }
+}
diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php
index c1fe9c382fa..f115c11938a 100644
--- a/tests/lib/TestCase.php
+++ b/tests/lib/TestCase.php
@@ -24,7 +24,6 @@ namespace Test;
use DOMDocument;
use DOMNode;
-use OC\Cache\CappedMemoryCache;
use OC\Command\QueueBus;
use OC\Files\Filesystem;
use OC\Template\Base;
@@ -34,7 +33,7 @@ use OCP\IDBConnection;
use OCP\IL10N;
use OCP\Security\ISecureRandom;
-abstract class TestCase extends \PHPUnit_Framework_TestCase {
+abstract class TestCase extends TestCasePhpUnitCompatibility {
/** @var \OC\Command\QueueBus */
private $commandBus;
@@ -153,7 +152,7 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
}
}
- protected function onNotSuccessfulTest($e) {
+ protected function realOnNotSuccessfulTest() {
$this->restoreAllServices();
// restore database connection
@@ -162,8 +161,6 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
return self::$realDatabase;
});
}
-
- parent::onNotSuccessfulTest($e);
}
protected function tearDown() {
@@ -377,6 +374,10 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
self::logout();
\OC\Files\Filesystem::tearDown();
\OC_User::setUserId($user);
+ $userObject = \OC::$server->getUserManager()->get($user);
+ if (!is_null($userObject)) {
+ $userObject->updateLastLoginTimestamp();
+ }
\OC_Util::setupFS($user);
if (\OC_User::userExists($user)) {
\OC::$server->getUserFolder($user);
diff --git a/tests/lib/TestCasePhpUnit4.php b/tests/lib/TestCasePhpUnit4.php
new file mode 100644
index 00000000000..f49cf7d40f3
--- /dev/null
+++ b/tests/lib/TestCasePhpUnit4.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test;
+
+/**
+ * FIXME Remove this once phpunit 5 is the lowest supported version, by reverting:
+ * https://github.com/nextcloud/server/pull/2137
+ */
+abstract class TestCasePhpUnit4 extends \PHPUnit_Framework_TestCase {
+
+ abstract protected function realOnNotSuccessfulTest();
+
+ protected function onNotSuccessfulTest(\Exception $e) {
+ $this->realOnNotSuccessfulTest();
+
+ parent::onNotSuccessfulTest($e);
+ }
+}
diff --git a/tests/lib/TestCasePhpUnit5.php b/tests/lib/TestCasePhpUnit5.php
new file mode 100644
index 00000000000..5def70e57fa
--- /dev/null
+++ b/tests/lib/TestCasePhpUnit5.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test;
+
+/**
+ * FIXME Remove this once phpunit 5 is the lowest supported version, by reverting:
+ * https://github.com/nextcloud/server/pull/2137
+ */
+abstract class TestCasePhpUnit5 extends \PHPUnit_Framework_TestCase {
+
+ abstract protected function realOnNotSuccessfulTest();
+
+ protected function onNotSuccessfulTest($e) {
+ $this->realOnNotSuccessfulTest();
+
+ parent::onNotSuccessfulTest($e);
+ }
+}
diff --git a/tests/lib/TestCasePhpUnitCompatibility.php b/tests/lib/TestCasePhpUnitCompatibility.php
new file mode 100644
index 00000000000..cb243d1ce6f
--- /dev/null
+++ b/tests/lib/TestCasePhpUnitCompatibility.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Test;
+
+/**
+ * FIXME Remove this once phpunit 5 is the lowest supported version, by reverting:
+ * https://github.com/nextcloud/server/pull/2137
+ */
+if (version_compare(\PHPUnit_Runner_Version::id(), '5.0.0', '>=')) {
+ abstract class TestCasePhpUnitCompatibility extends TestCasePhpUnit5 {}
+} else {
+ abstract class TestCasePhpUnitCompatibility extends TestCasePhpUnit4 {}
+}