summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Weimann <mail@michael-weimann.eu>2018-08-04 20:39:51 +0200
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2018-08-20 15:24:10 +0200
commit1d2bc9c45ecbbb7521dbf14dba6560d925691f01 (patch)
treea2f3ba70eb4b38b8b793ed9acd239ec52f98f5b0
parentc2fced446396dad822404f3fae3ccb1c7df0dc89 (diff)
downloadnextcloud-server-1d2bc9c45ecbbb7521dbf14dba6560d925691f01.tar.gz
nextcloud-server-1d2bc9c45ecbbb7521dbf14dba6560d925691f01.zip
Adds tests for the setup memory limit checks
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
-rw-r--r--core/js/tests/specs/setupchecksSpec.js78
-rw-r--r--tests/Settings/Controller/CheckSetupControllerTest.php53
-rw-r--r--tests/lib/MemoryInfoTest.php73
3 files changed, 193 insertions, 11 deletions
diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js
index e22fb35102e..bde1f6d6a79 100644
--- a/core/js/tests/specs/setupchecksSpec.js
+++ b/core/js/tests/specs/setupchecksSpec.js
@@ -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
})
);
diff --git a/tests/Settings/Controller/CheckSetupControllerTest.php b/tests/Settings/Controller/CheckSetupControllerTest.php
index 305e2ba22ce..617394682e7 100644
--- a/tests/Settings/Controller/CheckSetupControllerTest.php
+++ b/tests/Settings/Controller/CheckSetupControllerTest.php
@@ -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')
+ );
+ }
}
diff --git a/tests/lib/MemoryInfoTest.php b/tests/lib/MemoryInfoTest.php
new file mode 100644
index 00000000000..9cd4fd56038
--- /dev/null
+++ b/tests/lib/MemoryInfoTest.php
@@ -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());
+ }
+}