From 4341d8731e6cd4ea59f3f23156979e7689f066d7 Mon Sep 17 00:00:00 2001 From: Daniel Calviño Sánchez Date: Mon, 9 Apr 2018 19:07:19 +0200 Subject: Rename helper for PHP built-in web server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For consistency with the helper for the Apache web server the helper for the PHP built-in web server was renamed too. Signed-off-by: Daniel Calviño Sánchez --- .../features/core/NextcloudTestServerContext.php | 14 +- .../core/NextcloudTestServerLocalBuiltInHelper.php | 144 +++++++++++++++++++++ .../core/NextcloudTestServerLocalHelper.php | 144 --------------------- 3 files changed, 151 insertions(+), 151 deletions(-) create mode 100644 tests/acceptance/features/core/NextcloudTestServerLocalBuiltInHelper.php delete mode 100644 tests/acceptance/features/core/NextcloudTestServerLocalHelper.php diff --git a/tests/acceptance/features/core/NextcloudTestServerContext.php b/tests/acceptance/features/core/NextcloudTestServerContext.php index f8d13a656b9..ff1296ba18a 100644 --- a/tests/acceptance/features/core/NextcloudTestServerContext.php +++ b/tests/acceptance/features/core/NextcloudTestServerContext.php @@ -40,12 +40,12 @@ use Behat\Behat\Hook\Scope\BeforeScenarioScope; * * The Nextcloud server is provided by an instance of NextcloudTestServerHelper; * its class must be specified when this context is created. By default, - * "NextcloudTestServerLocalHelper" is used, although that can be customized - * using the "nextcloudTestServerHelper" parameter in "behat.yml". In the same - * way, the parameters to be passed to the helper when it is created can be - * customized using the "nextcloudTestServerHelperParameters" parameter, which - * is an array (without keys) with the value of the parameters in the same order - * as in the constructor of the helper class (by default, [ ]). + * "NextcloudTestServerLocalBuiltInHelper" is used, although that can be + * customized using the "nextcloudTestServerHelper" parameter in "behat.yml". In + * the same way, the parameters to be passed to the helper when it is created + * can be customized using the "nextcloudTestServerHelperParameters" parameter, + * which is an array (without keys) with the value of the parameters in the same + * order as in the constructor of the helper class (by default, [ ]). * * Example of custom parameters in "behat.yml": * default: @@ -73,7 +73,7 @@ class NextcloudTestServerContext implements Context { * @param array $nextcloudTestServerHelperParameters the parameters for the * constructor of the $nextcloudTestServerHelper class. */ - public function __construct($nextcloudTestServerHelper = "NextcloudTestServerLocalHelper", + public function __construct($nextcloudTestServerHelper = "NextcloudTestServerLocalBuiltInHelper", $nextcloudTestServerHelperParameters = [ ]) { $nextcloudTestServerHelperClass = new ReflectionClass($nextcloudTestServerHelper); diff --git a/tests/acceptance/features/core/NextcloudTestServerLocalBuiltInHelper.php b/tests/acceptance/features/core/NextcloudTestServerLocalBuiltInHelper.php new file mode 100644 index 00000000000..722f580171a --- /dev/null +++ b/tests/acceptance/features/core/NextcloudTestServerLocalBuiltInHelper.php @@ -0,0 +1,144 @@ +. + * + */ + +/** + * Helper to manage a Nextcloud test server started directly by the acceptance + * tests themselves using the PHP built-in web server. + * + * The Nextcloud test server is executed using the PHP built-in web server + * directly from the grandparent directory of the acceptance tests directory + * (that is, the root directory of the Nextcloud server); note that the + * acceptance tests must be run from the acceptance tests directory. The "setUp" + * method resets the Nextcloud server to its initial state and starts it, while + * the "cleanUp" method stops it. To be able to reset the Nextcloud server to + * its initial state a Git repository must be provided in the root directory of + * the Nextcloud server; the last commit in that Git repository must provide the + * initial state for the Nextcloud server expected by the acceptance tests. + * + * The Nextcloud server is available at "$nextcloudServerDomain", which can be + * optionally specified when the NextcloudTestServerLocalBuiltInHelper is + * created; if no value is given "127.0.0.1" is used by default. In any case, + * the value of "$nextcloudServerDomain" must be seen as a trusted domain by the + * Nextcloud server (which would be the case for "127.0.0.1" if it was installed + * by running "occ maintenance:install"). The base URL to access the Nextcloud + * server can be got from "getBaseUrl". + */ +class NextcloudTestServerLocalBuiltInHelper implements NextcloudTestServerHelper { + + /** + * @var string + */ + private $nextcloudServerDomain; + + /** + * @var string + */ + private $phpServerPid; + + /** + * Creates a new NextcloudTestServerLocalBuiltInHelper. + */ + public function __construct($nextcloudServerDomain = "127.0.0.1") { + $this->nextcloudServerDomain = $nextcloudServerDomain; + + $this->phpServerPid = ""; + } + + /** + * Sets up the Nextcloud test server. + * + * It resets the Nextcloud test server restoring its last saved Git state + * and then waits for the Nextcloud test server to start again; if the + * server can not be reset or if it does not start again after some time an + * exception is thrown (as it is just a warning for the test runner and + * nothing to be explicitly catched a plain base Exception is used). + * + * @throws \Exception if the Nextcloud test server can not be reset or + * started again. + */ + public function setUp() { + // Ensure that previous PHP server is not running (as cleanUp may not + // have been called). + $this->killPhpServer(); + + $this->execOrException("cd ../../ && git reset --hard HEAD"); + $this->execOrException("cd ../../ && git clean -d --force"); + + // execOrException is not used because the server is started in the + // background, so the command will always succeed even if the server + // itself fails. + $this->phpServerPid = exec("php -S " . $this->nextcloudServerDomain . ":80 -t ../../ >/dev/null 2>&1 & echo $!"); + + $timeout = 60; + if (!Utils::waitForServer($this->getBaseUrl(), $timeout)) { + throw new Exception("Nextcloud test server could not be started"); + } + } + + /** + * Cleans up the Nextcloud test server. + * + * It kills the running Nextcloud test server, if any. + */ + public function cleanUp() { + $this->killPhpServer(); + } + + /** + * Returns the base URL of the Nextcloud test server. + * + * @return string the base URL of the Nextcloud test server. + */ + public function getBaseUrl() { + return "http://" . $this->nextcloudServerDomain . "/index.php"; + } + + /** + * Executes the given command, throwing an Exception if it fails. + * + * @param string $command the command to execute. + * @throws \Exception if the command fails to execute. + */ + private function execOrException($command) { + exec($command . " 2>&1", $output, $returnValue); + if ($returnValue != 0) { + throw new Exception("'$command' could not be executed: " . implode("\n", $output)); + } + } + + /** + * Kills the PHP built-in web server started in setUp, if any. + */ + private function killPhpServer() { + if ($this->phpServerPid == "") { + return; + } + + // execOrException is not used because the PID may no longer exist when + // trying to kill it. + exec("kill " . $this->phpServerPid); + + $this->phpServerPid = ""; + } + +} diff --git a/tests/acceptance/features/core/NextcloudTestServerLocalHelper.php b/tests/acceptance/features/core/NextcloudTestServerLocalHelper.php deleted file mode 100644 index b11a9ae8217..00000000000 --- a/tests/acceptance/features/core/NextcloudTestServerLocalHelper.php +++ /dev/null @@ -1,144 +0,0 @@ -. - * - */ - -/** - * Helper to manage a Nextcloud test server started directly by the acceptance - * tests themselves using the PHP built-in web server. - * - * The Nextcloud test server is executed using the PHP built-in web server - * directly from the grandparent directory of the acceptance tests directory - * (that is, the root directory of the Nextcloud server); note that the - * acceptance tests must be run from the acceptance tests directory. The "setUp" - * method resets the Nextcloud server to its initial state and starts it, while - * the "cleanUp" method stops it. To be able to reset the Nextcloud server to - * its initial state a Git repository must be provided in the root directory of - * the Nextcloud server; the last commit in that Git repository must provide the - * initial state for the Nextcloud server expected by the acceptance tests. - * - * The Nextcloud server is available at "$nextcloudServerDomain", which can be - * optionally specified when the NextcloudTestServerLocalHelper is created; if - * no value is given "127.0.0.1" is used by default. In any case, the value of - * "$nextcloudServerDomain" must be seen as a trusted domain by the Nextcloud - * server (which would be the case for "127.0.0.1" if it was installed by - * running "occ maintenance:install"). The base URL to access the Nextcloud - * server can be got from "getBaseUrl". - */ -class NextcloudTestServerLocalHelper implements NextcloudTestServerHelper { - - /** - * @var string - */ - private $nextcloudServerDomain; - - /** - * @var string - */ - private $phpServerPid; - - /** - * Creates a new NextcloudTestServerLocalHelper. - */ - public function __construct($nextcloudServerDomain = "127.0.0.1") { - $this->nextcloudServerDomain = $nextcloudServerDomain; - - $this->phpServerPid = ""; - } - - /** - * Sets up the Nextcloud test server. - * - * It resets the Nextcloud test server restoring its last saved Git state - * and then waits for the Nextcloud test server to start again; if the - * server can not be reset or if it does not start again after some time an - * exception is thrown (as it is just a warning for the test runner and - * nothing to be explicitly catched a plain base Exception is used). - * - * @throws \Exception if the Nextcloud test server can not be reset or - * started again. - */ - public function setUp() { - // Ensure that previous PHP server is not running (as cleanUp may not - // have been called). - $this->killPhpServer(); - - $this->execOrException("cd ../../ && git reset --hard HEAD"); - $this->execOrException("cd ../../ && git clean -d --force"); - - // execOrException is not used because the server is started in the - // background, so the command will always succeed even if the server - // itself fails. - $this->phpServerPid = exec("php -S " . $this->nextcloudServerDomain . ":80 -t ../../ >/dev/null 2>&1 & echo $!"); - - $timeout = 60; - if (!Utils::waitForServer($this->getBaseUrl(), $timeout)) { - throw new Exception("Nextcloud test server could not be started"); - } - } - - /** - * Cleans up the Nextcloud test server. - * - * It kills the running Nextcloud test server, if any. - */ - public function cleanUp() { - $this->killPhpServer(); - } - - /** - * Returns the base URL of the Nextcloud test server. - * - * @return string the base URL of the Nextcloud test server. - */ - public function getBaseUrl() { - return "http://" . $this->nextcloudServerDomain . "/index.php"; - } - - /** - * Executes the given command, throwing an Exception if it fails. - * - * @param string $command the command to execute. - * @throws \Exception if the command fails to execute. - */ - private function execOrException($command) { - exec($command . " 2>&1", $output, $returnValue); - if ($returnValue != 0) { - throw new Exception("'$command' could not be executed: " . implode("\n", $output)); - } - } - - /** - * Kills the PHP built-in web server started in setUp, if any. - */ - private function killPhpServer() { - if ($this->phpServerPid == "") { - return; - } - - // execOrException is not used because the PID may no longer exist when - // trying to kill it. - exec("kill " . $this->phpServerPid); - - $this->phpServerPid = ""; - } - -} -- cgit v1.2.3