Adds tests for the setup memory limit checks
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
This commit is contained in:
parent
c2fced4463
commit
1d2bc9c45e
|
@ -170,7 +170,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -217,7 +218,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -265,7 +267,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -311,7 +314,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -355,7 +359,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -399,7 +404,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -443,7 +449,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
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) {
|
it('should return an error if the response has no statuscode 200', function(done) {
|
||||||
var async = OC.SetupChecks.checkSetup();
|
var async = OC.SetupChecks.checkSetup();
|
||||||
|
|
||||||
|
@ -508,7 +560,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -553,7 +606,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -598,7 +652,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -643,7 +698,8 @@ describe('OC.SetupChecks tests', function() {
|
||||||
cronErrors: [],
|
cronErrors: [],
|
||||||
cronInfo: {
|
cronInfo: {
|
||||||
diffInSeconds: 0
|
diffInSeconds: 0
|
||||||
}
|
},
|
||||||
|
isTheMemoryLimitHighEnough: true
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
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;
|
||||||
|
@ -36,6 +37,7 @@ use OCP\IRequest;
|
||||||
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;
|
||||||
|
@ -73,6 +75,15 @@ class CheckSetupControllerTest extends 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();
|
||||||
|
@ -103,6 +114,9 @@ class CheckSetupControllerTest extends TestCase {
|
||||||
->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',
|
||||||
|
@ -118,6 +132,7 @@ class CheckSetupControllerTest extends TestCase {
|
||||||
$this->db,
|
$this->db,
|
||||||
$this->lockingProvider,
|
$this->lockingProvider,
|
||||||
$this->dateTimeFormatter,
|
$this->dateTimeFormatter,
|
||||||
|
$this->memoryInfo,
|
||||||
])
|
])
|
||||||
->setMethods([
|
->setMethods([
|
||||||
'isReadOnlyConfig',
|
'isReadOnlyConfig',
|
||||||
|
@ -424,6 +439,9 @@ class CheckSetupControllerTest extends TestCase {
|
||||||
->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(
|
||||||
[
|
[
|
||||||
|
@ -465,6 +483,7 @@ class CheckSetupControllerTest extends TestCase {
|
||||||
'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());
|
||||||
|
@ -486,6 +505,7 @@ class CheckSetupControllerTest extends TestCase {
|
||||||
$this->db,
|
$this->db,
|
||||||
$this->lockingProvider,
|
$this->lockingProvider,
|
||||||
$this->dateTimeFormatter,
|
$this->dateTimeFormatter,
|
||||||
|
$this->memoryInfo,
|
||||||
])
|
])
|
||||||
->setMethods(null)->getMock();
|
->setMethods(null)->getMock();
|
||||||
|
|
||||||
|
@ -1160,4 +1180,37 @@ Array
|
||||||
);
|
);
|
||||||
$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')
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue