Signed-off-by: Michael Weimann <mail@michael-weimann.eu>tags/v14.0.0RC1
@@ -170,7 +170,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -217,7 +218,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -265,7 +267,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -311,7 +314,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -355,7 +359,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -399,7 +404,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -443,7 +449,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -456,6 +463,51 @@ describe('OC.SetupChecks tests', function() { | |||
}); | |||
}); | |||
it('should return a warning if the memory limit is too small', function(done) { | |||
var async = OC.SetupChecks.checkSetup(); | |||
suite.server.requests[0].respond( | |||
200, | |||
{ | |||
'Content-Type': 'application/json', | |||
}, | |||
JSON.stringify({ | |||
hasFileinfoInstalled: true, | |||
isGetenvServerWorking: true, | |||
isReadOnlyConfig: false, | |||
hasWorkingFileLocking: true, | |||
hasValidTransactionIsolationLevel: true, | |||
suggestedOverwriteCliURL: '', | |||
isUrandomAvailable: true, | |||
serverHasInternetConnection: true, | |||
isMemcacheConfigured: true, | |||
forwardedForHeadersWorking: true, | |||
reverseProxyDocs: 'https://docs.owncloud.org/foo/bar.html', | |||
isCorrectMemcachedPHPModuleInstalled: true, | |||
hasPassedCodeIntegrityCheck: true, | |||
isOpcacheProperlySetup: true, | |||
hasOpcacheLoaded: true, | |||
isSettimelimitAvailable: true, | |||
hasFreeTypeSupport: true, | |||
missingIndexes: [], | |||
outdatedCaches: [], | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
}, | |||
isTheMemoryLimitHighEnough: false | |||
}) | |||
); | |||
async.done(function( data, s, x ){ | |||
expect(data).toEqual([{ | |||
msg: 'The PHP memory limit is below the recommended value of 512MB.', | |||
type: OC.SetupChecks.MESSAGE_TYPE_WARNING | |||
}]); | |||
done(); | |||
}); | |||
}); | |||
it('should return an error if the response has no statuscode 200', function(done) { | |||
var async = OC.SetupChecks.checkSetup(); | |||
@@ -508,7 +560,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -553,7 +606,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -598,7 +652,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -643,7 +698,8 @@ describe('OC.SetupChecks tests', function() { | |||
cronErrors: [], | |||
cronInfo: { | |||
diffInSeconds: 0 | |||
} | |||
}, | |||
isTheMemoryLimitHighEnough: true | |||
}) | |||
); | |||
@@ -22,6 +22,7 @@ | |||
namespace Tests\Settings\Controller; | |||
use OC\DB\Connection; | |||
use OC\MemoryInfo; | |||
use OC\Settings\Controller\CheckSetupController; | |||
use OCP\AppFramework\Http; | |||
use OCP\AppFramework\Http\DataDisplayResponse; | |||
@@ -36,6 +37,7 @@ use OCP\IRequest; | |||
use OCP\IURLGenerator; | |||
use OC_Util; | |||
use OCP\Lock\ILockingProvider; | |||
use PHPUnit\Framework\MockObject\MockObject; | |||
use Psr\Http\Message\ResponseInterface; | |||
use Symfony\Component\EventDispatcher\EventDispatcher; | |||
use Test\TestCase; | |||
@@ -73,6 +75,15 @@ class CheckSetupControllerTest extends TestCase { | |||
private $lockingProvider; | |||
/** @var IDateTimeFormatter|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $dateTimeFormatter; | |||
/** @var MemoryInfo|MockObject */ | |||
private $memoryInfo; | |||
/** | |||
* Backup of the "memory_limit" ini value before tests. | |||
* | |||
* @var string | |||
*/ | |||
private $memoryLimitIniValueBeforeTest; | |||
public function setUp() { | |||
parent::setUp(); | |||
@@ -103,6 +114,9 @@ class CheckSetupControllerTest extends TestCase { | |||
->disableOriginalConstructor()->getMock(); | |||
$this->lockingProvider = $this->getMockBuilder(ILockingProvider::class)->getMock(); | |||
$this->dateTimeFormatter = $this->getMockBuilder(IDateTimeFormatter::class)->getMock(); | |||
$this->memoryInfo = $this->getMockBuilder(MemoryInfo::class) | |||
->setMethods(['getMemoryLimit',]) | |||
->getMock(); | |||
$this->checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController') | |||
->setConstructorArgs([ | |||
'settings', | |||
@@ -118,6 +132,7 @@ class CheckSetupControllerTest extends TestCase { | |||
$this->db, | |||
$this->lockingProvider, | |||
$this->dateTimeFormatter, | |||
$this->memoryInfo, | |||
]) | |||
->setMethods([ | |||
'isReadOnlyConfig', | |||
@@ -424,6 +439,9 @@ class CheckSetupControllerTest extends TestCase { | |||
->expects($this->once()) | |||
->method('hasPassedCheck') | |||
->willReturn(true); | |||
$this->memoryInfo | |||
->method('getMemoryLimit') | |||
->willReturn(512 * 1024 * 1024); | |||
$expected = new DataResponse( | |||
[ | |||
@@ -465,6 +483,7 @@ class CheckSetupControllerTest extends TestCase { | |||
'missingIndexes' => [], | |||
'isPhpMailerUsed' => false, | |||
'mailSettingsDocumentation' => 'https://server/index.php/settings/admin', | |||
'isTheMemoryLimitHighEnough' => true, | |||
] | |||
); | |||
$this->assertEquals($expected, $this->checkSetupController->check()); | |||
@@ -486,6 +505,7 @@ class CheckSetupControllerTest extends TestCase { | |||
$this->db, | |||
$this->lockingProvider, | |||
$this->dateTimeFormatter, | |||
$this->memoryInfo, | |||
]) | |||
->setMethods(null)->getMock(); | |||
@@ -1160,4 +1180,37 @@ Array | |||
); | |||
$this->assertEquals($expected, $this->checkSetupController->getFailedIntegrityCheckFiles()); | |||
} | |||
/** | |||
* This function returns test values for the memory limit check. | |||
* 1. the memory limit | |||
* 2. the expected check value | |||
* | |||
* @return array | |||
*/ | |||
public function getMemoryLimitTestData(): array { | |||
return [ | |||
'unlimited' => [-1, true,], | |||
'512M' => [512 * 1024 * 1024, true,], | |||
'1G' => [1024 * 1024 * 1024, true,], | |||
'64M' => [64 * 1024 * 1024, false,], | |||
]; | |||
} | |||
/** | |||
* Tests that if the memory limit is high enough, there is no message. | |||
* | |||
* @param string $memoryLimit The memory limit reported by MemoryInfo. | |||
* @param bool $expected The expected memory check return value. | |||
* @dataProvider getMemoryLimitTestData | |||
*/ | |||
public function testMemoryLimit(string $memoryLimit, bool $expected) { | |||
$this->memoryInfo | |||
->method('getMemoryLimit') | |||
->willReturn($memoryLimit); | |||
$this->assertSame( | |||
$expected, | |||
$this->invokePrivate($this->checkSetupController, 'isTheMemoryLimitHighEnough') | |||
); | |||
} | |||
} |
@@ -0,0 +1,73 @@ | |||
<?php | |||
namespace Test; | |||
use OC\MemoryInfo; | |||
/** | |||
* This class provides tests for the MemoryInfo class. | |||
*/ | |||
class MemoryInfoTest extends TestCase { | |||
/** | |||
* @var MemoryInfo | |||
*/ | |||
private $memoryInfo; | |||
/** | |||
* The "memory_limit" value before tests. | |||
* | |||
* @var string | |||
*/ | |||
private $iniSettingBeforeTest; | |||
/** | |||
* @beforeClass | |||
*/ | |||
public function backupMemoryInfoIniSetting() { | |||
$this->iniSettingBeforeTest = ini_get('memory_limit'); | |||
} | |||
/** | |||
* @afterClass | |||
*/ | |||
public function restoreMemoryInfoIniSetting() { | |||
ini_set('memory_limit', $this->iniSettingBeforeTest); | |||
} | |||
/** | |||
* Setups a MemoryInfo instance for tests. | |||
* | |||
* @before | |||
*/ | |||
public function setupMemoryInfo() { | |||
$this->memoryInfo = new MemoryInfo(); | |||
} | |||
/** | |||
* Provides test data. | |||
* | |||
* @return array | |||
*/ | |||
public function getMemoryLimitTestData(): array { | |||
return [ | |||
'unlimited' => ['-1', -1,], | |||
'0' => ['0', 0,], | |||
'134217728 bytes' => ['134217728', 134217728,], | |||
'128M' => ['128M', 134217728,], | |||
'131072K' => ['131072K', 134217728,], | |||
'2G' => ['2G', 2147483648,], | |||
]; | |||
} | |||
/** | |||
* Tests that getMemoryLimit works as expected. | |||
* | |||
* @param string $iniValue The "memory_limit" ini data. | |||
* @param int $expected The expected detected memory limit. | |||
* @dataProvider getMemoryLimitTestData | |||
*/ | |||
public function testMemoryLimit($iniValue, $expected) { | |||
ini_set('memory_limit', $iniValue); | |||
self::assertEquals($expected, $this->memoryInfo->getMemoryLimit()); | |||
} | |||
} |