diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/core/avatar/avatarcontrollertest.php | 22 | ||||
-rw-r--r-- | tests/core/command/config/listconfigstest.php | 17 | ||||
-rw-r--r-- | tests/data/setUploadLimit/htaccess | 60 | ||||
-rw-r--r-- | tests/data/setUploadLimit/user.ini | 7 | ||||
-rw-r--r-- | tests/lib/app/manager.php | 70 | ||||
-rw-r--r-- | tests/lib/files.php | 135 | ||||
-rw-r--r-- | tests/lib/files/mount/mountpoint.php | 21 |
7 files changed, 300 insertions, 32 deletions
diff --git a/tests/core/avatar/avatarcontrollertest.php b/tests/core/avatar/avatarcontrollertest.php index 952e013bb8f..e8fb977fae1 100644 --- a/tests/core/avatar/avatarcontrollertest.php +++ b/tests/core/avatar/avatarcontrollertest.php @@ -26,6 +26,8 @@ use OCP\AppFramework\IAppContainer; use OC\Files\Filesystem; use OCP\AppFramework\Http; use OCP\Image; +use OCP\Files\Folder; +use OCP\Files\File; /** * Overwrite is_uploaded_file in this namespace to allow proper unit testing of @@ -72,6 +74,8 @@ class AvatarControllerTest extends \Test\TestCase { ->disableOriginalConstructor()->getMock(); $this->container['Request'] = $this->getMockBuilder('OCP\IRequest') ->disableOriginalConstructor()->getMock(); + $this->container['UserFolder'] = $this->getMockBuilder('OCP\Files\Folder') + ->disableOriginalConstructor()->getMock(); $this->avatarMock = $this->getMockBuilder('OCP\IAvatar') ->disableOriginalConstructor()->getMock(); @@ -89,10 +93,6 @@ class AvatarControllerTest extends \Test\TestCase { OC::$server->getUserManager()->createUser($this->user, $this->user); $this->loginAsUser($this->user); - // Create Cache dir - $view = new \OC\Files\View('/'.$this->user); - $view->mkdir('cache'); - // Configure userMock $this->userMock->method('getDisplayName')->willReturn($this->user); $this->userMock->method('getUID')->willReturn($this->user); @@ -259,8 +259,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertTrue($copyRes); //Create file in cache - $view = new \OC\Files\View('/'.$this->user.'/cache'); - $view->file_put_contents('avatar_upload', file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->container['Cache']->method('get')->willReturn(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); //Create request return $reqRet = ['error' => [0], 'tmp_name' => [$fileName], 'size' => [filesize(OC::$SERVERROOT.'/tests/data/testimage.jpg')]]; @@ -298,8 +297,7 @@ class AvatarControllerTest extends \Test\TestCase { $this->assertTrue($copyRes); //Create file in cache - $view = new \OC\Files\View('/'.$this->user.'/cache'); - $view->file_put_contents('avatar_upload', file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.gif')); + $this->container['Cache']->method('get')->willReturn(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.gif')); //Create request return $reqRet = ['error' => [0], 'tmp_name' => [$fileName], 'size' => filesize(OC::$SERVERROOT.'/tests/data/testimage.gif')]; @@ -317,9 +315,11 @@ class AvatarControllerTest extends \Test\TestCase { * Test posting avatar from existing file */ public function testPostAvatarFromFile() { - //Create file in cache - $view = new \OC\Files\View('/'.$this->user.'/files'); - $view->file_put_contents('avatar.jpg', file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); + //Mock node API call + $file = $this->getMockBuilder('OCP\Files\File') + ->disableOriginalConstructor()->getMock(); + $file->method('getContent')->willReturn(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg')); + $this->container['UserFolder']->method('get')->willReturn($file); //Create request return $response = $this->avatarController->postAvatar('avatar.jpg'); diff --git a/tests/core/command/config/listconfigstest.php b/tests/core/command/config/listconfigstest.php index c9913d83f7f..7492701cce3 100644 --- a/tests/core/command/config/listconfigstest.php +++ b/tests/core/command/config/listconfigstest.php @@ -81,6 +81,7 @@ class ListConfigsTest extends TestCase { false, json_encode([ 'system' => [ + 'secret' => ListConfigs::SENSITIVE_VALUE, 'overwrite.cli.url' => 'http://localhost', ], 'apps' => [ @@ -134,10 +135,18 @@ class ListConfigsTest extends TestCase { // config.php [ 'secret', + 'objectstore', 'overwrite.cli.url', ], [ ['secret', 'N;', 'my secret'], + ['objectstore', 'N;', [ + 'class' => 'OC\\Files\\ObjectStore\\Swift', + 'arguments' => [ + 'username' => 'facebook100000123456789', + 'password' => 'Secr3tPaSSWoRdt7', + ], + ]], ['overwrite.cli.url', 'N;', 'http://localhost'], ], // app config @@ -152,6 +161,14 @@ class ListConfigsTest extends TestCase { false, json_encode([ 'system' => [ + 'secret' => ListConfigs::SENSITIVE_VALUE, + 'objectstore' => [ + 'class' => 'OC\\Files\\ObjectStore\\Swift', + 'arguments' => [ + 'username' => 'facebook100000123456789', + 'password' => ListConfigs::SENSITIVE_VALUE, + ], + ], 'overwrite.cli.url' => 'http://localhost', ], ]), diff --git a/tests/data/setUploadLimit/htaccess b/tests/data/setUploadLimit/htaccess new file mode 100644 index 00000000000..65957a29838 --- /dev/null +++ b/tests/data/setUploadLimit/htaccess @@ -0,0 +1,60 @@ +# Version: 8.2.0 +<IfModule mod_headers.c> + <IfModule mod_fcgid.c> + <IfModule mod_setenvif.c> + SetEnvIfNoCase ^Authorization$ "(.+)" XAUTHORIZATION=$1 + RequestHeader set XAuthorization %{XAUTHORIZATION}e env=XAUTHORIZATION + </IfModule> + </IfModule> + + <IfModule mod_env.c> + # Add security and privacy related headers + Header set X-Content-Type-Options "nosniff" + Header set X-XSS-Protection "1; mode=block" + Header set X-Robots-Tag "none" + Header set X-Frame-Options "SAMEORIGIN" + SetEnv modHeadersAvailable true + </IfModule> + + # Add cache control for CSS and JS files + <FilesMatch "\.(css|js)$"> + Header set Cache-Control "max-age=7200, public" + </FilesMatch> +</IfModule> +<IfModule mod_php5.c> +php_value upload_max_filesize 513M +php_value post_max_size 513M +php_value memory_limit 512M +php_value mbstring.func_overload 0 +php_value always_populate_raw_post_data -1 +php_value default_charset 'UTF-8' +php_value output_buffering off +<IfModule mod_env.c> + SetEnv htaccessWorking true +</IfModule> +</IfModule> +<IfModule mod_rewrite.c> +RewriteEngine on +RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L] +RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L] +RewriteRule ^\.well-known/carddav /remote.php/carddav/ [R=301,L] +RewriteRule ^\.well-known/caldav /remote.php/caldav/ [R=301,L] +RewriteRule ^apps/calendar/caldav\.php remote.php/caldav/ [QSA,L] +RewriteRule ^apps/contacts/carddav\.php remote.php/carddav/ [QSA,L] +RewriteRule ^remote/(.*) remote.php [QSA,L] +RewriteRule ^(build|tests|config|lib|3rdparty|templates)/.* - [R=404,L] +RewriteRule ^(\.|autotest|occ|issue|indie|db_|console).* - [R=404,L] +</IfModule> +<IfModule mod_mime.c> +AddType image/svg+xml svg svgz +AddEncoding gzip svgz +</IfModule> +<IfModule mod_dir.c> +DirectoryIndex index.php index.html +</IfModule> +AddDefaultCharset utf-8 +Options -Indexes +<IfModule pagespeed_module> + ModPagespeed Off +</IfModule> diff --git a/tests/data/setUploadLimit/user.ini b/tests/data/setUploadLimit/user.ini new file mode 100644 index 00000000000..c5996e8d47e --- /dev/null +++ b/tests/data/setUploadLimit/user.ini @@ -0,0 +1,7 @@ +upload_max_filesize=513M +post_max_size=513M +memory_limit=512M +mbstring.func_overload=0 +always_populate_raw_post_data=-1 +default_charset='UTF-8' +output_buffering=off diff --git a/tests/lib/app/manager.php b/tests/lib/app/manager.php index 6cf7eb3bb6c..7333d7601b1 100644 --- a/tests/lib/app/manager.php +++ b/tests/lib/app/manager.php @@ -204,4 +204,74 @@ class Manager extends \PHPUnit_Framework_TestCase { $this->appConfig->setValue('test4', 'enabled', '["asd"]'); $this->assertEquals(['test1', 'test3'], $this->manager->getEnabledAppsForUser($user)); } + + public function testGetAppsNeedingUpgrade() { + $this->manager = $this->getMockBuilder('\OC\App\AppManager') + ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory]) + ->setMethods(['getAppInfo']) + ->getMock(); + + $appInfos = [ + 'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '9.0.0'], + 'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'], + 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], + 'test4' => ['id' => 'test4', 'version' => '3.0.0', 'requiremin' => '8.1.0'], + 'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'], + ]; + + $this->manager->expects($this->any()) + ->method('getAppInfo') + ->will($this->returnCallback( + function($appId) use ($appInfos) { + return $appInfos[$appId]; + } + )); + + $this->appConfig->setValue('test1', 'enabled', 'yes'); + $this->appConfig->setValue('test1', 'installed_version', '1.0.0'); + $this->appConfig->setValue('test2', 'enabled', 'yes'); + $this->appConfig->setValue('test2', 'installed_version', '1.0.0'); + $this->appConfig->setValue('test3', 'enabled', 'yes'); + $this->appConfig->setValue('test3', 'installed_version', '1.0.0'); + $this->appConfig->setValue('test4', 'enabled', 'yes'); + $this->appConfig->setValue('test4', 'installed_version', '2.4.0'); + + $apps = $this->manager->getAppsNeedingUpgrade('8.2.0'); + + $this->assertCount(2, $apps); + $this->assertEquals('test1', $apps[0]['id']); + $this->assertEquals('test4', $apps[1]['id']); + } + + public function testGetIncompatibleApps() { + $this->manager = $this->getMockBuilder('\OC\App\AppManager') + ->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory]) + ->setMethods(['getAppInfo']) + ->getMock(); + + $appInfos = [ + 'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '8.0.0'], + 'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'], + 'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'], + 'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'], + ]; + + $this->manager->expects($this->any()) + ->method('getAppInfo') + ->will($this->returnCallback( + function($appId) use ($appInfos) { + return $appInfos[$appId]; + } + )); + + $this->appConfig->setValue('test1', 'enabled', 'yes'); + $this->appConfig->setValue('test2', 'enabled', 'yes'); + $this->appConfig->setValue('test3', 'enabled', 'yes'); + + $apps = $this->manager->getIncompatibleApps('8.2.0'); + + $this->assertCount(2, $apps); + $this->assertEquals('test1', $apps[0]['id']); + $this->assertEquals('test3', $apps[1]['id']); + } } diff --git a/tests/lib/files.php b/tests/lib/files.php new file mode 100644 index 00000000000..6808b3e9f64 --- /dev/null +++ b/tests/lib/files.php @@ -0,0 +1,135 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@karoshi.org.uk> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * 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; + +class Files extends \Test\TestCase { + + const UPLOAD_LIMIT_DEFAULT_STR = '513M'; + const UPLOAD_LIMIT_SETTING_STR = '2M'; + const UPLOAD_LIMIT_SETTING_BYTES = 2097152; + + /** @var array $tmpDirs */ + private $tmpDirs = []; + + /** + * @return array + */ + private function getUploadLimitTestFiles() { + $dir = \OC::$server->getTempManager()->getTemporaryFolder(); + $this->tmpDirs[] = $dir; + $result = [ + '.htaccess' => $dir . '/htaccess', + '.user.ini' => $dir . '/user.ini' + ]; + copy(\OC::$SERVERROOT . '/tests/data/setUploadLimit/htaccess', $result['.htaccess']); + copy(\OC::$SERVERROOT . '/tests/data/setUploadLimit/user.ini', $result['.user.ini']); + return $result; + } + + protected function tearDown() { + foreach ($this->tmpDirs as $dir) { + \OC_Helper::rmdirr($dir); + } + parent::tearDown(); + } + + public function testSetUploadLimitSizeSanity() { + $this->assertFalse(\OC_Files::setUploadLimit(PHP_INT_MAX + 10)); + $this->assertFalse(\OC_Files::setUploadLimit(\OC_Files::UPLOAD_MIN_LIMIT_BYTES - 10)); + $this->assertFalse(\OC_Files::setUploadLimit('foobar')); + } + + public function setUploadLimitWriteProvider() { + return [ + [ + // both files writable + true, true, + self::UPLOAD_LIMIT_SETTING_BYTES, self::UPLOAD_LIMIT_SETTING_BYTES, + self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_SETTING_STR + ], + [ + // neither file writable + false, false, + self::UPLOAD_LIMIT_SETTING_BYTES, false, + self::UPLOAD_LIMIT_DEFAULT_STR, self::UPLOAD_LIMIT_DEFAULT_STR + ], + [ + // only .htaccess writable + true, false, + self::UPLOAD_LIMIT_SETTING_BYTES, false, + self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_DEFAULT_STR + ], + [ + // only .user.ini writable + false, true, + self::UPLOAD_LIMIT_SETTING_BYTES, false, + self::UPLOAD_LIMIT_DEFAULT_STR, self::UPLOAD_LIMIT_SETTING_STR + ], + [ + // test rounding of values + true, true, + self::UPLOAD_LIMIT_SETTING_BYTES + 20, self::UPLOAD_LIMIT_SETTING_BYTES, + self::UPLOAD_LIMIT_SETTING_STR, self::UPLOAD_LIMIT_SETTING_STR + ] + ]; + } + + /** + * @dataProvider setUploadLimitWriteProvider + */ + public function testSetUploadLimitWrite( + $htaccessWritable, $userIniWritable, + $setSize, $expectedSize, + $htaccessStr, $userIniStr + ) { + $files = $this->getUploadLimitTestFiles(); + chmod($files['.htaccess'], ($htaccessWritable ? 0644 : 0444)); + chmod($files['.user.ini'], ($userIniWritable ? 0644 : 0444)); + + $htaccessSize = filesize($files['.htaccess']); + $userIniSize = filesize($files['.user.ini']); + $htaccessSizeMod = 2*(strlen($htaccessStr) - strlen(self::UPLOAD_LIMIT_DEFAULT_STR)); + $userIniSizeMod = 2*(strlen($userIniStr) - strlen(self::UPLOAD_LIMIT_DEFAULT_STR)); + + $this->assertEquals($expectedSize, \OC_Files::setUploadLimit($setSize, $files)); + + // check file contents + $htaccess = file_get_contents($files['.htaccess']); + $this->assertEquals(1, + preg_match('/php_value upload_max_filesize '.$htaccessStr.'/', $htaccess) + ); + $this->assertEquals(1, + preg_match('/php_value post_max_size '.$htaccessStr.'/', $htaccess) + ); + $this->assertEquals($htaccessSize + $htaccessSizeMod, filesize($files['.htaccess'])); + + $userIni = file_get_contents($files['.user.ini']); + $this->assertEquals(1, + preg_match('/upload_max_filesize='.$userIniStr.'/', $userIni) + ); + $this->assertEquals(1, + preg_match('/post_max_size='.$userIniStr.'/', $userIni) + ); + $this->assertEquals($userIniSize + $userIniSizeMod, filesize($files['.user.ini'])); + } +} diff --git a/tests/lib/files/mount/mountpoint.php b/tests/lib/files/mount/mountpoint.php index d758c1b8d4d..29610e6058d 100644 --- a/tests/lib/files/mount/mountpoint.php +++ b/tests/lib/files/mount/mountpoint.php @@ -70,25 +70,4 @@ class MountPoint extends \Test\TestCase { // storage wrapper never called $this->assertFalse($called); } - - public function testWrappedStorage() { - $storage = $this->getMockBuilder('\OC\Files\Storage\Wrapper\Wrapper') - ->disableOriginalConstructor() - ->getMock(); - - $loader = $this->getMock('\OCP\Files\Storage\IStorageFactory'); - $loader->expects($this->never()) - ->method('getInstance'); - $loader->expects($this->never()) - ->method('wrap'); - - $mountPoint = new \OC\Files\Mount\MountPoint( - $storage, - '/mountpoint', - null, - $loader - ); - - $this->assertEquals($storage, $mountPoint->getStorage()); - } } |