123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- namespace Test;
- /**
- * Tests for server check functions
- *
- * @group DB
- */
- class UtilCheckServerTest extends \Test\TestCase {
- private $datadir;
- /**
- * @param array $systemOptions
- * @return \OC\SystemConfig | \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('\OC\SystemConfig')
- ->disableOriginalConstructor()
- ->getMock();
- $config->expects($this->any())
- ->method('getValue')
- ->willReturnCallback(function ($key, $default) use ($systemOptions) {
- return $systemOptions[$key] ?? $default;
- });
- return $config;
- }
- protected function setUp(): void {
- parent::setUp();
- $this->datadir = \OC::$server->getTempManager()->getTemporaryFolder();
- file_put_contents($this->datadir . '/.ncdata', '# Nextcloud data directory');
- \OC::$server->getSession()->set('checkServer_succeeded', false);
- }
- protected function tearDown(): void {
- // clean up
- @unlink($this->datadir . '/.ncdata');
- parent::tearDown();
- }
- /**
- * Test that checkServer() returns no errors in the regular case.
- */
- public function testCheckServer(): void {
- $result = \OC_Util::checkServer($this->getConfig([
- '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(): void {
- // simulate old version that didn't have it
- unlink($this->datadir . '/.ncdata');
- // even though ".ncdata" is missing, the error isn't
- // triggered to allow setup to run
- $result = \OC_Util::checkServer($this->getConfig([
- '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(): void {
- // simulate old version that didn't have it
- unlink($this->datadir . '/.ncdata');
- $session = \OC::$server->getSession();
- $oldCurrentVersion = $session->get('OC_Version');
- // upgrade condition to simulate needUpgrade() === true
- $session->set('OC_Version', [6, 0, 0, 2]);
- // even though ".ncdata" is missing, the error isn't
- // triggered to allow for upgrade
- $result = \OC_Util::checkServer($this->getConfig([
- 'installed' => true,
- 'version' => '6.0.0.1'
- ]));
- $this->assertEmpty($result);
- // restore versions
- $session->set('OC_Version', $oldCurrentVersion);
- }
- /**
- * Test that checkDataDirectoryValidity returns no error
- * when ".ncdata" is present.
- */
- public function testCheckDataDirValidity(): void {
- $result = \OC_Util::checkDataDirectoryValidity($this->datadir);
- $this->assertEmpty($result);
- }
- /**
- * Test that checkDataDirectoryValidity and checkServer
- * both return an error when ".ncdata" is missing.
- */
- public function testCheckDataDirValidityWhenFileMissing(): void {
- unlink($this->datadir . '/.ncdata');
- $result = \OC_Util::checkDataDirectoryValidity($this->datadir);
- $this->assertEquals(1, count($result));
- $result = \OC_Util::checkServer($this->getConfig([
- '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(): void {
- $result = \OC_Util::checkServer($this->getConfig([
- 'installed' => true,
- 'version' => implode('.', \OCP\Util::getVersion())
- ]));
- $this->assertEmpty($result);
- }
- /**
- * Tests an error is given when the datadir is not writable
- */
- public function testDataDirNotWritable(): void {
- $this->markTestSkipped('TODO: Disable because fails on drone');
- chmod($this->datadir, 0300);
- $result = \OC_Util::checkServer($this->getConfig([
- '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(): void {
- chmod($this->datadir, 0300);
- $result = \OC_Util::checkServer($this->getConfig([
- 'installed' => false,
- 'version' => implode('.', \OCP\Util::getVersion())
- ]));
- chmod($this->datadir, 0700); //needed for cleanup
- $this->assertEmpty($result);
- }
- }
|