summaryrefslogtreecommitdiffstats
path: root/tests/lib/UtilCheckServerTest.php
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-05-19 09:38:52 +0200
committerJoas Schilling <nickvergessen@owncloud.com>2016-05-19 09:38:52 +0200
commit9a4253ef7c34f9dc71a6a9f7828a10df769f0c32 (patch)
treefebe8415af243c7f69867d095a3f281c65071d40 /tests/lib/UtilCheckServerTest.php
parent55fc6536d33bd044a72437ac61d3c5ade09111cb (diff)
downloadnextcloud-server-9a4253ef7c34f9dc71a6a9f7828a10df769f0c32.tar.gz
nextcloud-server-9a4253ef7c34f9dc71a6a9f7828a10df769f0c32.zip
Fix lib/
Diffstat (limited to 'tests/lib/UtilCheckServerTest.php')
-rw-r--r--tests/lib/UtilCheckServerTest.php172
1 files changed, 172 insertions, 0 deletions
diff --git a/tests/lib/UtilCheckServerTest.php b/tests/lib/UtilCheckServerTest.php
new file mode 100644
index 00000000000..b864af6888a
--- /dev/null
+++ b/tests/lib/UtilCheckServerTest.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+/**
+ * Tests for server check functions
+ *
+ * @group DB
+ */
+class UtilCheckServerTest extends \Test\TestCase {
+
+ private $datadir;
+
+ /**
+ * @param array $systemOptions
+ * @return \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function getConfig($systemOptions) {
+ $systemOptions['datadirectory'] = $this->datadir;
+ $systemOptions['appstoreenabled'] = false; //it's likely that there is no app folder we can write in
+ $config = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $config->expects($this->any())
+ ->method('getSystemValue')
+ ->will($this->returnCallback(function ($key, $default) use ($systemOptions) {
+ return isset($systemOptions[$key]) ? $systemOptions[$key] : $default;
+ }));
+ return $config;
+ }
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->datadir = \OC::$server->getTempManager()->getTemporaryFolder();
+
+ file_put_contents($this->datadir . '/.ocdata', '');
+ \OC::$server->getSession()->set('checkServer_succeeded', false);
+ }
+
+ protected function tearDown() {
+ // clean up
+ @unlink($this->datadir . '/.ocdata');
+ parent::tearDown();
+ }
+
+ /**
+ * Test that checkServer() returns no errors in the regular case.
+ */
+ public function testCheckServer() {
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => true
+ )));
+ $this->assertEmpty($result);
+ }
+
+ /**
+ * Test that checkServer() does not check the data dir validity
+ * when the server is not installed yet (else the setup cannot
+ * be run...)
+ */
+ public function testCheckServerSkipDataDirValidityOnSetup() {
+ // simulate old version that didn't have it
+ unlink($this->datadir . '/.ocdata');
+
+ // even though ".ocdata" is missing, the error isn't
+ // triggered to allow setup to run
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => false
+ )));
+ $this->assertEmpty($result);
+ }
+
+ /**
+ * Test that checkServer() does not check the data dir validity
+ * when an upgrade is required (else the upgrade cannot be
+ * performed...)
+ */
+ public function testCheckServerSkipDataDirValidityOnUpgrade() {
+ // simulate old version that didn't have it
+ unlink($this->datadir . '/.ocdata');
+
+ $session = \OC::$server->getSession();
+ $oldCurrentVersion = $session->get('OC_Version');
+
+ // upgrade condition to simulate needUpgrade() === true
+ $session->set('OC_Version', array(6, 0, 0, 2));
+
+ // even though ".ocdata" is missing, the error isn't
+ // triggered to allow for upgrade
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => true,
+ 'version' => '6.0.0.1'
+ )));
+ $this->assertEmpty($result);
+
+ // restore versions
+ $session->set('OC_Version', $oldCurrentVersion);
+ }
+
+ /**
+ * Test that checkDataDirectoryValidity returns no error
+ * when ".ocdata" is present.
+ */
+ public function testCheckDataDirValidity() {
+ $result = \OC_Util::checkDataDirectoryValidity($this->datadir);
+ $this->assertEmpty($result);
+ }
+
+ /**
+ * Test that checkDataDirectoryValidity and checkServer
+ * both return an error when ".ocdata" is missing.
+ */
+ public function testCheckDataDirValidityWhenFileMissing() {
+ unlink($this->datadir . '/.ocdata');
+ $result = \OC_Util::checkDataDirectoryValidity($this->datadir);
+ $this->assertEquals(1, count($result));
+
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => true,
+ 'version' => implode('.', \OCP\Util::getVersion())
+ )));
+ $this->assertCount(1, $result);
+ }
+
+ /**
+ * Tests that no error is given when the datadir is writable
+ */
+ public function testDataDirWritable() {
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => true,
+ 'version' => implode('.', \OCP\Util::getVersion())
+ )));
+ $this->assertEmpty($result);
+ }
+
+ /**
+ * Tests an error is given when the datadir is not writable
+ */
+ public function testDataDirNotWritable() {
+ if (\OC_Util::runningOnWindows()) {
+ $this->markTestSkipped('[Windows] chmod() does not work as intended on Windows.');
+ }
+
+ chmod($this->datadir, 0300);
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => true,
+ 'version' => implode('.', \OCP\Util::getVersion())
+ )));
+ $this->assertCount(1, $result);
+ }
+
+ /**
+ * Tests no error is given when the datadir is not writable during setup
+ */
+ public function testDataDirNotWritableSetup() {
+ chmod($this->datadir, 0300);
+ $result = \OC_Util::checkServer($this->getConfig(array(
+ 'installed' => false,
+ 'version' => implode('.', \OCP\Util::getVersion())
+ )));
+ chmod($this->datadir, 0700); //needed for cleanup
+ $this->assertEmpty($result);
+ }
+}