diff options
-rw-r--r-- | .drone.yml | 43 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | index.php | 23 | ||||
-rw-r--r-- | lib/Updater.php | 23 | ||||
-rw-r--r-- | tests/features/bootstrap/FeatureContext.php | 70 | ||||
-rw-r--r-- | tests/features/cli.feature | 74 | ||||
-rw-r--r-- | tests/features/master.feature | 2 | ||||
-rw-r--r-- | tests/features/stable10.feature | 2 | ||||
-rw-r--r-- | tests/features/stable11.feature | 27 | ||||
-rw-r--r-- | tests/features/stable12.feature | 40 | ||||
-rw-r--r-- | tests/features/stable9.feature | 2 |
11 files changed, 245 insertions, 64 deletions
@@ -23,13 +23,6 @@ pipeline: when: matrix: TESTS: check-same-code-base - php54-cli: - image: nextcloudci/php5.4:php5.4-5 - commands: - - make test-cli - when: - matrix: - TESTS: php54-cli php55-cli: image: nextcloudci/php5.5:php5.5-5 commands: @@ -58,13 +51,6 @@ pipeline: when: matrix: TESTS: php71-cli - php54-stable9: - image: nextcloudci/php5.4:php5.4-5 - commands: - - make test-stable9 - when: - matrix: - TESTS: php54-stable9 php55-stable9: image: nextcloudci/php5.5:php5.5-5 commands: @@ -128,6 +114,27 @@ pipeline: when: matrix: TESTS: php71-stable11 + php56-stable12: + image: nextcloudci/php5.6:php5.6-7 + commands: + - make test-stable12 + when: + matrix: + TESTS: php56-stable12 + php70-stable12: + image: nextcloudci/php7.0:php7.0-6 + commands: + - make test-stable12 + when: + matrix: + TESTS: php70-stable12 + php71-stable12: + image: nextcloudci/php7.1:php7.1-9 + commands: + - make test-stable12 + when: + matrix: + TESTS: php71-stable12 php56-master: image: nextcloudci/php5.6:php5.6-7 commands: @@ -151,12 +158,9 @@ pipeline: TESTS: php71-master matrix: include: - #- TESTS: php54-cli # TODO currently the php built in server can't be used - - TESTS: php55-cli - TESTS: php56-cli - TESTS: php70-cli - #- TESTS: php71-cli - not supported on Nextcloud up to 10 - #- TESTS: php54-stable9 # TODO currently the php built in server can't be used + - TESTS: php71-cli - TESTS: php55-stable9 - TESTS: php56-stable9 - TESTS: php70-stable9 @@ -165,6 +169,9 @@ matrix: - TESTS: php56-stable11 - TESTS: php70-stable11 - TESTS: php71-stable11 + - TESTS: php56-stable12 + - TESTS: php70-stable12 + - TESTS: php71-stable12 - TESTS: php56-master - TESTS: php70-master - TESTS: php71-master @@ -32,6 +32,9 @@ test-stable10: updater.phar test/vendor test-stable11: updater.phar test/vendor cd tests && vendor/behat/behat/bin/behat features/stable11.feature +test-stable12: updater.phar test/vendor + cd tests && vendor/behat/behat/bin/behat features/stable12.feature + test-master: updater.phar test/vendor cd tests && vendor/behat/behat/bin/behat features/master.feature @@ -289,7 +289,7 @@ class Updater { * @return array */ private function getExpectedElementsList() { - return [ + $expected = [ // Generic '.', '..', @@ -327,6 +327,26 @@ class Updater { 'occ', 'db_structure.xml', ]; + return array_merge($expected, $this->getAppDirectories()); + } + + /** + * Returns app directories specified in config.php + * + * @return array + */ + private function getAppDirectories() { + $expected = []; + if($appsPaths = $this->getConfigOption('apps_paths')) { + foreach ($appsPaths as $appsPath) { + $parentDir = realpath($this->baseDir . '/../'); + $appDir = basename($appsPath['path']); + if(strpos($appsPath['path'], $parentDir) === 0 && $appDir !== 'apps') { + $expected[] = $appDir; + } + } + } + return $expected; } /** @@ -873,6 +893,7 @@ EOF; 'apps', 'updater', ]; + $excludedElements = array_merge($excludedElements, $this->getAppDirectories()); /** * @var string $path * @var \SplFileInfo $fileInfo diff --git a/lib/Updater.php b/lib/Updater.php index 822b760..5d0b480 100644 --- a/lib/Updater.php +++ b/lib/Updater.php @@ -174,7 +174,7 @@ class Updater { * @return array */ private function getExpectedElementsList() { - return [ + $expected = [ // Generic '.', '..', @@ -212,6 +212,26 @@ class Updater { 'occ', 'db_structure.xml', ]; + return array_merge($expected, $this->getAppDirectories()); + } + + /** + * Returns app directories specified in config.php + * + * @return array + */ + private function getAppDirectories() { + $expected = []; + if($appsPaths = $this->getConfigOption('apps_paths')) { + foreach ($appsPaths as $appsPath) { + $parentDir = realpath($this->baseDir . '/../'); + $appDir = basename($appsPath['path']); + if(strpos($appsPath['path'], $parentDir) === 0 && $appDir !== 'apps') { + $expected[] = $appDir; + } + } + } + return $expected; } /** @@ -758,6 +778,7 @@ EOF; 'apps', 'updater', ]; + $excludedElements = array_merge($excludedElements, $this->getAppDirectories()); /** * @var string $path * @var \SplFileInfo $fileInfo diff --git a/tests/features/bootstrap/FeatureContext.php b/tests/features/bootstrap/FeatureContext.php index 7d8ef5a..4de6da9 100644 --- a/tests/features/bootstrap/FeatureContext.php +++ b/tests/features/bootstrap/FeatureContext.php @@ -212,6 +212,42 @@ S6riPZk2uRmx5W2XZ+IUHSTVlAOKOQaflTlo3xConuKfcyojJ3PGsO8x7awtRNA7 QYwN9zVszIoWo31nlVz7QSzUZ4iyEVnbY4gT5EVPKfflIPQblp2bN485pYamuPe5 CYB6S4AUzuyYS2zxt7MMdoaWHXY8hxdst1AF/kGKZ5Bdct4qVw7pup77c+uMNBvT jFSE6+KKI+HAE132eaXY5A==', + '11.0.2' => 'hvw4zZs6gSeP4TlU0kkfpJ1tgaSrD2M8V/MANX/YqwZBy9mG8z67Mtt07sbYByHh +kWVd2uVmVoiEcmNEtiJUE1WEcrC+YSAFUTl8P4MjUa2jEC3k37zIn1WcFI8ZqRiH +EBYiSef87rZXjcvuta5fC4O0cOaxU3pVkNVqeP9T0tHEI4Oorj5Uj8qoiuIH2Xbc +chLfk+x/EatNAlTE6NJo6rJnquCErooOPgLl6k48oOcgJZZtOQ1xDhb69Yug25bv +V12smv+3iUGpQBIJnBhIZY+Ww7SOCCca/ss1f+/uEMr3NFGiDgJ4KYoxF/pYaGo4 +MgK0pHPeAIesiUnEEq8y6w==', + '11.0.4' => 'trn0fADgH12IioNSPDzYlkIAhlXg2ETpmkm+dENefK2HqVdDJBJX62kCYug4WovB +PTS455VNR43dFFCgqjvQiip/XTLHpG2ppAZq35gDslHbD8HcACS+T0OpW/mJYseD +1+eCbaYShguIcCLlTXaPhbesIh2iO2guBzv6xODSFDKlAWHXwZ3xcumX8QE+7oex +E9HDBL7XYkvMavCvMQjYgAQ6CTCgAxe0wYpa6O8HWhk0AgidDJgevHyHFOssxrTm +TCDZ2VgqwydUVcs+pfKC3VJkutrPOOH2JcltremBpYjkL4d25BDqPNDGi5FOKWyI +tJejM2uk8UEjo4mJ6q7BIA==', + '12.0.0' => 'My4ZSUly2nD1t+pKhS4uzzlkVt08TQi64DbICxO2nIGB1I3RpyqXgd+BXWobTG35 +116 J7DiJ6LEbHw/YMuzYj/vi+XJxbmkGrsHxWhlc5jdn3sc406Dgr4ywyZztiS2SCMy +117 tTAg0vwiH3pBP68rx/2ltPN7hS3HkReqb/28rAegntXVd35R9w9YGbOl4zfqmnSJ +118 zUBXGiOmKhh6KPcPaiavxDXCgR+4v2pgu9J3RmPgkq0m2AsDl6YPOxN+FGVHKbBP +119 TJw0efCxt7Q3Mdo70zmJbyE+Dal+UV+EgZC3tU+zd2vUckrs6B2xNoSBlo1UOjo2 +120 dL+1Gy7Ry+R0Y1eFw+XYJQ==', + '12.0.0beta1' => 'ho8LV/2eB0kSI89JJDTn8BtDnUBlAnFOVaDgcBim+N2yUUzsGy8Q+nWeffrL0bPU +951fuSIHpjByfJxiSL5GipoT6555992PV6B8BckyTgVvWXxKGH2htQVdYUDTKfaB +DCe59CvjNe4YR/qqBitTyJYeWqGD4FCrmAGmbQmhINm70H1TUl2zHBFi7rqFKwcw +et3H3uSKf1UNGKx/HE1RSlGCukTc/o+UcwT7wAPlm3YfIMG9vrLX5s27JG6p5MlW +N8VZ0VTtBZY0EAqedrHWZ4FxFOwmmxfdVoUbJgq8ZUlWBmAIj9t4vbHzXAVxu437 +6Jx1KWDwCnir1GssOSy2FQ==', + '12.0.0beta2' => 'd8f33pXCXVpkSpqlYYXWgjbq0uj5NrIDzwWCvtaU0C/B9g42hK4vJwOPGeQcdHh/ +A4xDB/BtSv01KvSd1kECrGFW7rH9HlHFq1LmMRAOj3slnKHZN4XLmJ5whMobfTip +qfoxA4FJuhzInr3MK3Kbg8VsiX1BHlD6UDS1Uyif5JinUR1BvYaDhTQAzzyRI8hC +OXJ3Dug6SCBQFbvRsBSWoAVufyjENg3JSOmKl6X0ROKw4nPg+BL8ZZhiF9t8gldZ +iXeCFpAF+JdF9xEmO0KqTi10DuLG7Svr0gzA5B8joLWQHGGOJY3+8mr9RaF4QMcH +VKXfKG/PZfQKKIk6qALaaw==', + '12.0.1' => 'R6+aQoW/L0L7RyM/ER06kH7XJHyskvmuOHcUKIydWGbFN1PQTjblqXiiUcsmFtsD ++ZLeiPtWg3wquzuA3GWk7vrJrRvIKguULBEdtaDv76jeOxX8IVtPZYyq9ywSleHU +qd9CCurtREBZVmaQLy79+aXvan+pSvq4f9kl9jVVDp/v9QDpaHSLtKrUCHGgyQZO +0APf4QTMn+Jlw40JD3vbQSPkxWb7dcQEE6gGg6htN7iLHRRVXf8sJWFrLGotCHCH +RVY+A9o0d/+e49hXBsqNA03y1ZETQkVle1X7618aFj+Rfekq+yANXG1w2yD69Erv +DB8RQvd5QS/1Igt4LyTdMw==', ]; if(isset($signatures[$version])) { @@ -423,4 +459,38 @@ jFSE6+KKI+HAE132eaXY5A==', $content = preg_replace("!'version'\s*=>\s*'(\d+\.\d+\.\d+)\.\d+!", "'version' => '$1", $content); file_put_contents($configFile, $content); } + + /** + * @Given there is a folder called :name + */ + public function thereIsAFolderCalled($name) + { + mkdir($this->serverDir . 'nextcloud/' . $name); + } + + /** + * @Given there is a config for a secondary apps directory called :name + */ + public function thereIsAConfigForASecondaryAppsDirectoryCalled($name) + { + $configFile = $this->serverDir . 'nextcloud/config/config.php'; + $content = file_get_contents($configFile); + $appsPaths = <<<EOF + 'apps_paths' => [ + [ + 'path'=> dirname(__DIR__) . '/apps', + 'url' => '/apps', + 'writable' => true, + ], + [ + 'path'=> dirname(__DIR__) . '/%s', + 'url' => '/%s', + 'writable' => true, + ], + ], +EOF; + $appsPaths = sprintf($appsPaths, $name, $name); + $content = preg_replace("!\);!", $appsPaths . ');', $content); + file_put_contents($configFile, $content); + } } diff --git a/tests/features/cli.feature b/tests/features/cli.feature index 99af2f1..3ba08e6 100644 --- a/tests/features/cli.feature +++ b/tests/features/cli.feature @@ -1,71 +1,93 @@ Feature: CLI updater - Scenario: No update is available - 10.0.0 - Given the current version is 10.0.0 + Scenario: No update is available - 12.0.0 + Given the current version is 12.0.0 When the CLI updater is run Then the output should contain "Could not find config.php. Is this file in the "updater" subfolder of Nextcloud?" - Scenario: No update is available - 10.0.0 - Given the current installed version is 10.0.0 + Scenario: No update is available - 12.0.0 + Given the current installed version is 12.0.0 And there is no update available When the CLI updater is run successfully - Then the installed version should be 10.0.0 + Then the installed version should be 12.0.0 And maintenance mode should be off And upgrade is not required - Scenario: Update is available - 10.0.0 to 10.0.1 - Given the current installed version is 10.0.0 - And there is an update to version 10.0.1 available + Scenario: Update is available - 12.0.0 to 12.0.1 + Given the current installed version is 12.0.0 + And there is an update to version 12.0.1 available When the CLI updater is run successfully - Then the installed version should be 10.0.1 + Then the installed version should be 12.0.1 And maintenance mode should be off And upgrade is not required - Scenario: Invalid update is available - 10.0.0 to 10.0.503 - Given the current installed version is 10.0.0 - And there is an update to version 10.0.503 available + Scenario: Invalid update is available - 12.0.0 to 12.0.503 + Given the current installed version is 12.0.0 + And there is an update to version 12.0.503 available When the CLI updater is run Then the return code should not be 0 And the output should contain "Download failed - Not Found (HTTP 404)" - And the installed version should be 10.0.0 + And the installed version should be 12.0.0 # known issue: And maintenance mode should be on # TODO - it should be: #And maintenance mode should be off And upgrade is not required - Scenario: Update without valid signature is being offered - 10.0.0 to 10.0.2 - Given the current installed version is 10.0.0 - # This works because 10.0.2 is not in the signature list - And there is an update to version 10.0.2 available + Scenario: Update without valid signature is being offered - 11.0.0 to 11.0.1 + Given the current installed version is 11.0.0 + # This works because 11.0.1 is not in the signature list + And there is an update to version 11.0.1 available When the CLI updater is run Then the return code should not be 0 And the output should contain "Signature of update is not valid" - And the installed version should be 10.0.0 + And the installed version should be 11.0.0 # known issue: And maintenance mode should be on # TODO - it should be: #And maintenance mode should be off And upgrade is not required - Scenario: Update to older version - 10.0.0 to 9.0.54 - Given the current installed version is 10.0.0 - And there is an update to version 9.0.54 available + Scenario: Update to older version - 12.0.0 to 11.0.2 + Given the current installed version is 12.0.0 + And there is an update to version 11.0.2 available When the CLI updater is run Then the return code should not be 0 And the output should contain "Downloaded version is lower than installed version" - And the installed version should be 10.0.0 + And the installed version should be 12.0.0 # known issue: And maintenance mode should be on # TODO - it should be: #And maintenance mode should be off And upgrade is not required - Scenario: Update is available but autoupdate is disabled - 10.0.0 to 10.0.1 - Given the current installed version is 10.0.0 + Scenario: Update is available but autoupdate is disabled - 12.0.0 to 12.0.1 + Given the current installed version is 12.0.0 And the autoupdater is disabled - And there is an update to version 10.0.1 available + And there is an update to version 12.0.1 available When the CLI updater is run - Then the installed version should be 10.0.0 + Then the installed version should be 12.0.0 + And maintenance mode should be off + And upgrade is not required + + Scenario: Update is available and apps2 folder is there and configured - 12.0.0 to 12.0.1 + Given the current installed version is 12.0.0 + And there is an update to version 12.0.1 available + And there is a folder called "apps2" + And there is a config for a secondary apps directory called "apps2" + When the CLI updater is run successfully + Then the installed version should be 12.0.1 + And maintenance mode should be off + And upgrade is not required + + Scenario: Update is available and apps2 folder is there and not configured - 12.0.0 to 12.0.1 + Given the current installed version is 12.0.0 + And there is an update to version 12.0.1 available + And there is a folder called "apps2" + When the CLI updater is run + Then the return code should not be 0 + And the output should contain "The following extra files have been found" + And the output should contain "apps2" + And the installed version should be 12.0.0 And maintenance mode should be off And upgrade is not required diff --git a/tests/features/master.feature b/tests/features/master.feature index 5fd4817..486f8f1 100644 --- a/tests/features/master.feature +++ b/tests/features/master.feature @@ -7,6 +7,6 @@ Feature: CLI updater - master base And the version number is decreased in the config.php to enforce upgrade When the CLI updater is run successfully And the output should contain "Update successful" - Then the installed version should be 12.0 + Then the installed version should be 13.0 And maintenance mode should be off And upgrade is not required diff --git a/tests/features/stable10.feature b/tests/features/stable10.feature index bcc5367..bb65144 100644 --- a/tests/features/stable10.feature +++ b/tests/features/stable10.feature @@ -106,7 +106,7 @@ Feature: CLI updater - stable10 base Scenario: Update is available - 10.0.2 RC1 to 10.0.2RC1 to check if the updater will run on the RC onwards Given the current installed version is 10.0.2RC1 - And there is an update to prerelease version of 10.0.2RC1 available + And there is an update to prerelease version "10.0.2RC1" available And the version number is decreased in the config.php to enforce upgrade When the CLI updater is run successfully And the output should contain "Update successful" diff --git a/tests/features/stable11.feature b/tests/features/stable11.feature index c96f1dc..c30f434 100644 --- a/tests/features/stable11.feature +++ b/tests/features/stable11.feature @@ -1,31 +1,28 @@ Feature: CLI updater - stable11 base - Scenario: Update is available - 11.0.0 beta to 11.0.0 beta 2 - Given the current installed version is 11.0.0beta - And there is an update to prerelease version "11.0.0beta2" available - And the version number is decreased in the config.php to enforce upgrade + Scenario: Update is available - 11.0.3 to 11.0.4 + Given the current installed version is 11.0.3 + And there is an update to version 11.0.4 available When the CLI updater is run successfully And the output should contain "Update successful" - Then the installed version should be 11.0.0.5 + Then the installed version should be 11.0.4 And maintenance mode should be off And upgrade is not required - Scenario: Update is available - 11.0.2 to master daily - Given the current installed version is 11.0.2 - And the current channel is "daily" - And there is an update to daily version of master available + Scenario: Update is available - 11.0.3 to 12.0.1 + Given the current installed version is 11.0.3 + And there is an update to version 12.0.1 available When the CLI updater is run successfully And the output should contain "Update successful" - Then the installed version should be 12.0 + Then the installed version should be 12.0.1 And maintenance mode should be off And upgrade is not required - Scenario: Update is available - 11.0.2 to master daily - Given the current installed version is 11.0.2 - And the current channel is "daily" - And there is an update to daily version of master available + Scenario: Update is available - 11.0.4 to 12.0.1 + Given the current installed version is 11.0.4 + And there is an update to version 12.0.1 available When the CLI updater is run successfully And the output should contain "Update successful" - Then the installed version should be 12.0 + Then the installed version should be 12.0.1 And maintenance mode should be off And upgrade is not required diff --git a/tests/features/stable12.feature b/tests/features/stable12.feature new file mode 100644 index 0000000..d9b67e7 --- /dev/null +++ b/tests/features/stable12.feature @@ -0,0 +1,40 @@ +Feature: CLI updater - stable12 base + + Scenario: Update is available - 12.0.0 beta 1 to 12.0.0 beta 2 + Given the current installed version is 12.0.0beta1 + And there is an update to prerelease version "12.0.0beta2" available + And the version number is decreased in the config.php to enforce upgrade + When the CLI updater is run successfully + And the output should contain "Update successful" + Then the installed version should be 12.0 + And maintenance mode should be off + And upgrade is not required + + Scenario: Update is available - 12.0.0 to 12.0.1 + Given the current installed version is 12.0.0 + And there is an update to version 12.0.1 available + When the CLI updater is run successfully + And the output should contain "Update successful" + Then the installed version should be 12.0.1 + And maintenance mode should be off + And upgrade is not required + + Scenario: Update is available - 12.0.1 to master daily + Given the current installed version is 12.0.1 + And the current channel is "daily" + And there is an update to daily version of master available + When the CLI updater is run successfully + And the output should contain "Update successful" + Then the installed version should be 13.0 + And maintenance mode should be off + And upgrade is not required + + Scenario: Update is available - 12.0.1 to master daily + Given the current installed version is 12.0.1 + And the current channel is "daily" + And there is an update to daily version of master available + When the CLI updater is run successfully + And the output should contain "Update successful" + Then the installed version should be 13.0 + And maintenance mode should be off + And upgrade is not required diff --git a/tests/features/stable9.feature b/tests/features/stable9.feature index a23ce5a..e5009a4 100644 --- a/tests/features/stable9.feature +++ b/tests/features/stable9.feature @@ -48,7 +48,7 @@ Feature: CLI updater - stable9 base Scenario: Update is available - 9.0.53 to 9.0.55 RC1 Given the current installed version is 9.0.53 - And there is an update to prerelease version 9.0.55RC1 available + And there is an update to prerelease version "9.0.55RC1" available When the CLI updater is run successfully And the output should contain "Update successful" Then the installed version should be 9.0.55 |