diff options
author | Lukas Reschke <lukas@owncloud.com> | 2015-06-28 11:25:28 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2015-06-28 11:25:28 +0200 |
commit | 04fe9e05f0414076cefc99b03faf7896b6f3ec14 (patch) | |
tree | 65bd87e23dd0ee117896379b6a429578124b579b /tests/lib | |
parent | 4d565a84475bca92b851c9ca39b96cda9ff9b18a (diff) | |
download | nextcloud-server-04fe9e05f0414076cefc99b03faf7896b6f3ec14.tar.gz nextcloud-server-04fe9e05f0414076cefc99b03faf7896b6f3ec14.zip |
Use new updater URL + add unit tests
Uses the new updater url "https://updates.owncloud.com/server/"
Diffstat (limited to 'tests/lib')
-rw-r--r-- | tests/lib/updater.php | 378 |
1 files changed, 305 insertions, 73 deletions
diff --git a/tests/lib/updater.php b/tests/lib/updater.php index 13b45b3d8e7..9935d7d11da 100644 --- a/tests/lib/updater.php +++ b/tests/lib/updater.php @@ -1,107 +1,339 @@ <?php /** - * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Lukas Reschke <lukas@owncloud.com> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC; +use OCP\IConfig; +use OCP\ILogger; + class UpdaterTest extends \Test\TestCase { + /** @var IConfig */ + private $config; + /** @var HTTPHelper */ + private $httpHelper; + /** @var ILogger */ + private $logger; + /** @var Updater */ + private $updater; - public function versionCompatibilityTestData() { - return array( - array('1.0.0.0', '2.2.0', true), - array('1.1.1.1', '2.0.0', true), - array('5.0.3', '4.0.3', false), - array('12.0.3', '13.4.5', true), - array('1', '2', true), - array('2', '2', true), - array('6.0.5', '6.0.6', true), - array('5.0.6', '7.0.4', false) + public function setUp() { + parent::setUp(); + $this->config = $this->getMockBuilder('\\OCP\\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $this->httpHelper = $this->getMockBuilder('\\OC\\HTTPHelper') + ->disableOriginalConstructor() + ->getMock(); + $this->logger = $this->getMockBuilder('\\OCP\\ILogger') + ->disableOriginalConstructor() + ->getMock(); + + $this->updater = new Updater( + $this->httpHelper, + $this->config, + $this->logger ); } /** + * @return array + */ + public function versionCompatibilityTestData() { + return [ + ['1.0.0.0', '2.2.0', true], + ['1.1.1.1', '2.0.0', true], + ['5.0.3', '4.0.3', false], + ['12.0.3', '13.4.5', true], + ['1', '2', true], + ['2', '2', true], + ['6.0.5', '6.0.6', true], + ['5.0.6', '7.0.4', false], + ]; + } + + public function testSetSimulateStepEnabled() { + $this->updater->setSimulateStepEnabled(true); + $this->assertSame(true, $this->invokePrivate($this->updater, 'simulateStepEnabled')); + $this->updater->setSimulateStepEnabled(false); + $this->assertSame(false, $this->invokePrivate($this->updater, 'simulateStepEnabled')); + } + + public function testSetUpdateStepEnabled() { + $this->updater->setUpdateStepEnabled(true); + $this->assertSame(true, $this->invokePrivate($this->updater, 'updateStepEnabled')); + $this->updater->setUpdateStepEnabled(false); + $this->assertSame(false, $this->invokePrivate($this->updater, 'updateStepEnabled')); + } + + public function testSetSkip3rdPartyAppsDisable() { + $this->updater->setSkip3rdPartyAppsDisable(true); + $this->assertSame(true, $this->invokePrivate($this->updater, 'skip3rdPartyAppsDisable')); + $this->updater->setSkip3rdPartyAppsDisable(false); + $this->assertSame(false, $this->invokePrivate($this->updater, 'skip3rdPartyAppsDisable')); + } + + /** * @dataProvider versionCompatibilityTestData + * + * @param string $oldVersion + * @param string $newVersion + * @param bool $result */ public function testIsUpgradePossible($oldVersion, $newVersion, $result) { - $updater = new Updater(\OC::$server->getHTTPHelper(), \OC::$server->getConfig()); + $updater = new Updater($this->httpHelper, $this->config); $this->assertSame($result, $updater->isUpgradePossible($oldVersion, $newVersion)); } - public function testBrokenXmlResponse(){ - $invalidUpdater = $this->getUpdaterMock('OMG!'); - $invalidResult = $invalidUpdater->check(); - $this->assertEmpty($invalidResult); + public function testCheckInCache() { + $expectedResult = [ + 'version' => '8.0.4.2', + 'versionstring' => 'ownCloud 8.0.4', + 'url' => 'https://download.owncloud.org/community/owncloud-8.0.4.zip', + 'web' => 'http://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html', + ]; + + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(time())); + $this->config + ->expects($this->at(1)) + ->method('getAppValue') + ->with('core', 'lastupdateResult') + ->will($this->returnValue(json_encode($expectedResult))); + + $this->assertSame($expectedResult, $this->updater->check()); } - public function testEmptyResponse(){ - $emptyUpdater = $this->getUpdaterMock(''); - $emptyResult = $emptyUpdater->check(); - $this->assertEmpty($emptyResult); + public function testCheckWithoutUpdateUrl() { + $expectedResult = [ + 'version' => '8.0.4.2', + 'versionstring' => 'ownCloud 8.0.4', + 'url' => 'https://download.owncloud.org/community/owncloud-8.0.4.zip', + 'web' => 'http://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html', + ]; - // Error while fetching new contents e.g. too many redirects - $falseUpdater = $this->getUpdaterMock(false); - $falseResult = $falseUpdater->check(); - $this->assertEmpty($falseResult); + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(0)); + $this->config + ->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'lastupdatedat', time()); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'installedat') + ->will($this->returnValue('installedat')); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue('lastupdatedat')); + $this->config + ->expects($this->at(5)) + ->method('setAppValue') + ->with('core', 'lastupdateResult', json_encode($expectedResult)); + + $updateXml = '<?xml version="1.0"?> +<owncloud> + <version>8.0.4.2</version> + <versionstring>ownCloud 8.0.4</versionstring> + <url>https://download.owncloud.org/community/owncloud-8.0.4.zip</url> + <web>http://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html</web> +</owncloud>'; + $this->httpHelper + ->expects($this->once()) + ->method('getUrlContent') + ->with('https://updates.owncloud.com/server/?version=8x1x0x7xinstalledatxlastupdatedatxgitxEnterprisex') + ->will($this->returnValue($updateXml)); + + $this->assertSame($expectedResult, $this->updater->check()); } - public function testValidEmptyXmlResponse(){ - $updater = $this->getUpdaterMock( - '<?xml version="1.0"?><owncloud><version></version><versionstring></versionstring><url></url><web></web></owncloud>' - ); - $result = array_map('strval', $updater->check()); - - $this->assertArrayHasKey('version', $result); - $this->assertArrayHasKey('versionstring', $result); - $this->assertArrayHasKey('url', $result); - $this->assertArrayHasKey('web', $result); - $this->assertEmpty($result['version']); - $this->assertEmpty($result['versionstring']); - $this->assertEmpty($result['url']); - $this->assertEmpty($result['web']); + public function testCheckWithInvalidXml() { + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(0)); + $this->config + ->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'lastupdatedat', time()); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'installedat') + ->will($this->returnValue('installedat')); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue('lastupdatedat')); + $this->config + ->expects($this->at(5)) + ->method('setAppValue') + ->with('core', 'lastupdateResult', 'false'); + + $updateXml = 'Invalid XML Response!'; + $this->httpHelper + ->expects($this->once()) + ->method('getUrlContent') + ->with('https://updates.owncloud.com/server/?version=8x1x0x7xinstalledatxlastupdatedatxgitxEnterprisex') + ->will($this->returnValue($updateXml)); + + $this->assertSame([], $this->updater->check()); } - public function testValidUpdateResponse(){ - $newUpdater = $this->getUpdaterMock( - '<?xml version="1.0"?> + public function testCheckWithUpdateUrl() { + $expectedResult = [ + 'version' => '8.0.4.2', + 'versionstring' => 'ownCloud 8.0.4', + 'url' => 'https://download.owncloud.org/community/owncloud-8.0.4.zip', + 'web' => 'http://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html', + ]; + + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(0)); + $this->config + ->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'lastupdatedat', time()); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'installedat') + ->will($this->returnValue('installedat')); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue('lastupdatedat')); + $this->config + ->expects($this->at(5)) + ->method('setAppValue') + ->with('core', 'lastupdateResult', json_encode($expectedResult)); + + $updateXml = '<?xml version="1.0"?> <owncloud> - <version>7.0.3.4</version> - <versionstring>ownCloud 7.0.3</versionstring> - <url>http://download.owncloud.org/community/owncloud-7.0.3.zip</url> - <web>http://owncloud.org/</web> -</owncloud>' - ); - $newResult = array_map('strval', $newUpdater->check()); - - $this->assertArrayHasKey('version', $newResult); - $this->assertArrayHasKey('versionstring', $newResult); - $this->assertArrayHasKey('url', $newResult); - $this->assertArrayHasKey('web', $newResult); - $this->assertEquals('7.0.3.4', $newResult['version']); - $this->assertEquals('ownCloud 7.0.3', $newResult['versionstring']); - $this->assertEquals('http://download.owncloud.org/community/owncloud-7.0.3.zip', $newResult['url']); - $this->assertEquals('http://owncloud.org/', $newResult['web']); + <version>8.0.4.2</version> + <versionstring>ownCloud 8.0.4</versionstring> + <url>https://download.owncloud.org/community/owncloud-8.0.4.zip</url> + <web>http://doc.owncloud.org/server/8.0/admin_manual/maintenance/upgrade.html</web> +</owncloud>'; + $this->httpHelper + ->expects($this->once()) + ->method('getUrlContent') + ->with('https://myupdater.com/?version=8x1x0x7xinstalledatxlastupdatedatxgitxEnterprisex') + ->will($this->returnValue($updateXml)); + + $this->assertSame($expectedResult, $this->updater->check('https://myupdater.com/')); } - protected function getUpdaterMock($content){ - // Invalidate cache - $mockedConfig = $this->getMockBuilder('\OCP\IConfig') - ->disableOriginalConstructor() - ->getMock() - ; + public function testCheckWithEmptyValidXmlResponse() { + $expectedResult = [ + 'version' => '', + 'versionstring' => '', + 'url' => '', + 'web' => '', + ]; - $clientService = $this->getMock('\OCP\Http\Client\IClientService'); - $mockedHTTPHelper = $this->getMockBuilder('\OC\HTTPHelper') - ->setConstructorArgs([\OC::$server->getConfig(), $clientService]) - ->getMock() - ; + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(0)); + $this->config + ->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'lastupdatedat', time()); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'installedat') + ->will($this->returnValue('installedat')); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue('lastupdatedat')); - $mockedHTTPHelper->expects($this->once())->method('getUrlContent')->will($this->returnValue($content)); + $updateXml = '<?xml version="1.0"?> +<owncloud> + <version></version> + <versionstring></versionstring> + <url></url> + <web></web> +</owncloud>'; + $this->httpHelper + ->expects($this->once()) + ->method('getUrlContent') + ->with('https://updates.owncloud.com/server/?version=8x1x0x7xinstalledatxlastupdatedatxgitxEnterprisex') + ->will($this->returnValue($updateXml)); - return new Updater($mockedHTTPHelper, $mockedConfig); + $this->assertSame($expectedResult, $this->updater->check()); } + public function testCheckWithEmptyInvalidXmlResponse() { + $expectedResult = []; + + $this->config + ->expects($this->at(0)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue(0)); + $this->config + ->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'lastupdatedat', time()); + $this->config + ->expects($this->at(3)) + ->method('getAppValue') + ->with('core', 'installedat') + ->will($this->returnValue('installedat')); + $this->config + ->expects($this->at(4)) + ->method('getAppValue') + ->with('core', 'lastupdatedat') + ->will($this->returnValue('lastupdatedat')); + $this->config + ->expects($this->at(5)) + ->method('setAppValue') + ->with('core', 'lastupdateResult', json_encode($expectedResult)); + + $updateXml = ''; + $this->httpHelper + ->expects($this->once()) + ->method('getUrlContent') + ->with('https://updates.owncloud.com/server/?version=8x1x0x7xinstalledatxlastupdatedatxgitxEnterprisex') + ->will($this->returnValue($updateXml)); + + $this->assertSame($expectedResult, $this->updater->check()); + } } |