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: [],
|
||||
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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue