[Pkg-owncloud-commits] [owncloud] 159/205: Use new updater URL + add unit tests

David Prévot taffit at moszumanska.debian.org
Thu Jul 2 17:37:08 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch stable8
in repository owncloud.

commit 04fe9e05f0414076cefc99b03faf7896b6f3ec14
Author: Lukas Reschke <lukas at owncloud.com>
Date:   Sun Jun 28 11:25:28 2015 +0200

    Use new updater URL + add unit tests
    
    Uses the new updater url "https://updates.owncloud.com/server/"
---
 lib/private/updater.php |  35 +++--
 tests/lib/updater.php   | 378 ++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 327 insertions(+), 86 deletions(-)

diff --git a/lib/private/updater.php b/lib/private/updater.php
index 2894a82..fa9c1a5 100644
--- a/lib/private/updater.php
+++ b/lib/private/updater.php
@@ -74,7 +74,9 @@ class Updater extends BasicEmitter {
 	 * @param IConfig $config
 	 * @param ILogger $log
 	 */
-	public function __construct(HTTPHelper $httpHelper, IConfig $config, ILogger $log = null) {
+	public function __construct(HTTPHelper $httpHelper,
+								IConfig $config,
+								ILogger $log = null) {
 		$this->httpHelper = $httpHelper;
 		$this->log = $log;
 		$this->config = $config;
@@ -127,12 +129,12 @@ class Updater extends BasicEmitter {
 		}
 
 		if (is_null($updaterUrl)) {
-			$updaterUrl = 'https://apps.owncloud.com/updater.php';
+			$updaterUrl = 'https://updates.owncloud.com/server/';
 		}
 
 		$this->config->setAppValue('core', 'lastupdatedat', time());
 
-		if ($this->config->getAppValue('core', 'installedat', '') == '') {
+		if ($this->config->getAppValue('core', 'installedat', '') === '') {
 			$this->config->setAppValue('core', 'installedat', microtime(true));
 		}
 
@@ -147,22 +149,20 @@ class Updater extends BasicEmitter {
 		//fetch xml data from updater
 		$url = $updaterUrl . '?version=' . $versionString;
 
-		// set a sensible timeout of 10 sec to stay responsive even if the update server is down.
-
-		$tmp = array();
+		$tmp = [];
 		$xml = $this->httpHelper->getUrlContent($url);
 		if ($xml) {
 			$loadEntities = libxml_disable_entity_loader(true);
 			$data = @simplexml_load_string($xml);
 			libxml_disable_entity_loader($loadEntities);
 			if ($data !== false) {
-				$tmp['version'] = $data->version;
-				$tmp['versionstring'] = $data->versionstring;
-				$tmp['url'] = $data->url;
-				$tmp['web'] = $data->web;
+				$tmp['version'] = (string)$data->version;
+				$tmp['versionstring'] = (string)$data->versionstring;
+				$tmp['url'] = (string)$data->url;
+				$tmp['web'] = (string)$data->web;
 			}
 		} else {
-			$data = array();
+			$data = [];
 		}
 
 		// Cache the result
@@ -360,7 +360,6 @@ class Updater extends BasicEmitter {
 		include \OC_App::getAppPath($appId) . '/appinfo/preupdate.php';
 	}
 
-
 	/**
 	 * upgrades all apps within a major ownCloud upgrade. Also loads "priority"
 	 * (types authentication, filesystem, logging, in that order) afterwards.
@@ -411,6 +410,9 @@ class Updater extends BasicEmitter {
 	 * ownCloud version. disable them if not.
 	 * This is important if you upgrade ownCloud and have non ported 3rd
 	 * party apps installed.
+	 *
+	 * @return array
+	 * @throws \Exception
 	 */
 	private function checkAppsRequirements() {
 		$isCoreUpgrade = $this->isCodeUpgrade();
@@ -447,6 +449,9 @@ class Updater extends BasicEmitter {
 		return $disabledApps;
 	}
 
+	/**
+	 * @return bool
+	 */
 	private function isCodeUpgrade() {
 		$installedVersion = $this->config->getSystemValue('version', '0.0.0');
 		$currentVersion = implode('.', OC_Util::getVersion());
@@ -456,7 +461,11 @@ class Updater extends BasicEmitter {
 		return false;
 	}
 
-	private function upgradeAppStoreApps($disabledApps) {
+	/**
+	 * @param array $disabledApps
+	 * @throws \Exception
+	 */
+	private function upgradeAppStoreApps(array $disabledApps) {
 		foreach($disabledApps as $app) {
 			if (OC_Installer::isUpdateAvailable($app)) {
 				$ocsId = \OC::$server->getConfig()->getAppValue($app, 'ocsid', '');
diff --git a/tests/lib/updater.php b/tests/lib/updater.php
index 13b45b3..9935d7d 100644
--- a/tests/lib/updater.php
+++ b/tests/lib/updater.php
@@ -1,107 +1,339 @@
 <?php
 /**
- * Copyright (c) 2014 Lukas Reschke <lukas at 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 at owncloud.com>
+ * @author Victor Dubiniuk <dubiniuk at 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());
+	}
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list