Signed-off-by: Michael Weimann <mail@michael-weimann.eu>tags/v14.0.0RC1
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
}); | }); | ||||
}); | }); | ||||
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) { | it('should return an error if the response has no statuscode 200', function(done) { | ||||
var async = OC.SetupChecks.checkSetup(); | var async = OC.SetupChecks.checkSetup(); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
cronErrors: [], | cronErrors: [], | ||||
cronInfo: { | cronInfo: { | ||||
diffInSeconds: 0 | diffInSeconds: 0 | ||||
} | |||||
}, | |||||
isTheMemoryLimitHighEnough: true | |||||
}) | }) | ||||
); | ); | ||||
namespace Tests\Settings\Controller; | namespace Tests\Settings\Controller; | ||||
use OC\DB\Connection; | use OC\DB\Connection; | ||||
use OC\MemoryInfo; | |||||
use OC\Settings\Controller\CheckSetupController; | use OC\Settings\Controller\CheckSetupController; | ||||
use OCP\AppFramework\Http; | use OCP\AppFramework\Http; | ||||
use OCP\AppFramework\Http\DataDisplayResponse; | use OCP\AppFramework\Http\DataDisplayResponse; | ||||
use OCP\IURLGenerator; | use OCP\IURLGenerator; | ||||
use OC_Util; | use OC_Util; | ||||
use OCP\Lock\ILockingProvider; | use OCP\Lock\ILockingProvider; | ||||
use PHPUnit\Framework\MockObject\MockObject; | |||||
use Psr\Http\Message\ResponseInterface; | use Psr\Http\Message\ResponseInterface; | ||||
use Symfony\Component\EventDispatcher\EventDispatcher; | use Symfony\Component\EventDispatcher\EventDispatcher; | ||||
use Test\TestCase; | use Test\TestCase; | ||||
private $lockingProvider; | private $lockingProvider; | ||||
/** @var IDateTimeFormatter|\PHPUnit_Framework_MockObject_MockObject */ | /** @var IDateTimeFormatter|\PHPUnit_Framework_MockObject_MockObject */ | ||||
private $dateTimeFormatter; | private $dateTimeFormatter; | ||||
/** @var MemoryInfo|MockObject */ | |||||
private $memoryInfo; | |||||
/** | |||||
* Backup of the "memory_limit" ini value before tests. | |||||
* | |||||
* @var string | |||||
*/ | |||||
private $memoryLimitIniValueBeforeTest; | |||||
public function setUp() { | public function setUp() { | ||||
parent::setUp(); | parent::setUp(); | ||||
->disableOriginalConstructor()->getMock(); | ->disableOriginalConstructor()->getMock(); | ||||
$this->lockingProvider = $this->getMockBuilder(ILockingProvider::class)->getMock(); | $this->lockingProvider = $this->getMockBuilder(ILockingProvider::class)->getMock(); | ||||
$this->dateTimeFormatter = $this->getMockBuilder(IDateTimeFormatter::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') | $this->checkSetupController = $this->getMockBuilder('\OC\Settings\Controller\CheckSetupController') | ||||
->setConstructorArgs([ | ->setConstructorArgs([ | ||||
'settings', | 'settings', | ||||
$this->db, | $this->db, | ||||
$this->lockingProvider, | $this->lockingProvider, | ||||
$this->dateTimeFormatter, | $this->dateTimeFormatter, | ||||
$this->memoryInfo, | |||||
]) | ]) | ||||
->setMethods([ | ->setMethods([ | ||||
'isReadOnlyConfig', | 'isReadOnlyConfig', | ||||
->expects($this->once()) | ->expects($this->once()) | ||||
->method('hasPassedCheck') | ->method('hasPassedCheck') | ||||
->willReturn(true); | ->willReturn(true); | ||||
$this->memoryInfo | |||||
->method('getMemoryLimit') | |||||
->willReturn(512 * 1024 * 1024); | |||||
$expected = new DataResponse( | $expected = new DataResponse( | ||||
[ | [ | ||||
'missingIndexes' => [], | 'missingIndexes' => [], | ||||
'isPhpMailerUsed' => false, | 'isPhpMailerUsed' => false, | ||||
'mailSettingsDocumentation' => 'https://server/index.php/settings/admin', | 'mailSettingsDocumentation' => 'https://server/index.php/settings/admin', | ||||
'isTheMemoryLimitHighEnough' => true, | |||||
] | ] | ||||
); | ); | ||||
$this->assertEquals($expected, $this->checkSetupController->check()); | $this->assertEquals($expected, $this->checkSetupController->check()); | ||||
$this->db, | $this->db, | ||||
$this->lockingProvider, | $this->lockingProvider, | ||||
$this->dateTimeFormatter, | $this->dateTimeFormatter, | ||||
$this->memoryInfo, | |||||
]) | ]) | ||||
->setMethods(null)->getMock(); | ->setMethods(null)->getMock(); | ||||
); | ); | ||||
$this->assertEquals($expected, $this->checkSetupController->getFailedIntegrityCheckFiles()); | $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') | |||||
); | |||||
} | |||||
} | } |
<?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()); | |||||
} | |||||
} |