summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/acceptance/features/core/NextcloudTestServerLocalApacheHelper.php130
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/acceptance/features/core/NextcloudTestServerLocalApacheHelper.php b/tests/acceptance/features/core/NextcloudTestServerLocalApacheHelper.php
new file mode 100644
index 00000000000..b552a86d250
--- /dev/null
+++ b/tests/acceptance/features/core/NextcloudTestServerLocalApacheHelper.php
@@ -0,0 +1,130 @@
+<?php
+
+/**
+ *
+ * @copyright Copyright (c) 2018, Daniel Calviño Sánchez (danxuliu@gmail.com)
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/**
+ * Helper to manage a Nextcloud test server started directly by the acceptance
+ * tests themselves using the Apache web server.
+ *
+ * The Nextcloud test server is executed using the Apache web server; the
+ * default Apache directory is expected to have been set to the root directory
+ * of the Nextcloud server (for example, by linking "var/www/html" to it); in
+ * any case, 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. When the Nextcloud server is reset the
+ * owner of "apps", "config" and "data" must be set to the user that Apache
+ * server is run as; it is assumed that Apache is run as "www-data".
+ *
+ * The Nextcloud server is available at "$nextcloudServerDomain", which can be
+ * optionally specified when the NextcloudTestServerLocalApacheHelper 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 NextcloudTestServerLocalApacheHelper implements NextcloudTestServerHelper {
+
+ /**
+ * @var string
+ */
+ private $nextcloudServerDomain;
+
+ /**
+ * Creates a new NextcloudTestServerLocalApacheHelper.
+ */
+ public function __construct($nextcloudServerDomain = "127.0.0.1") {
+ $this->nextcloudServerDomain = $nextcloudServerDomain;
+ }
+
+ /**
+ * 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 Apache server is not running (as cleanUp may not
+ // have been called).
+ $this->stopApacheServer();
+
+ $this->execOrException("cd ../../ && git reset --hard HEAD");
+ $this->execOrException("cd ../../ && git clean -d --force");
+ $this->execOrException("cd ../../ && chown -R www-data:www-data apps config data");
+
+ $this->execOrException("service apache2 start");
+
+ $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 stops the running Nextcloud test server, if any.
+ */
+ public function cleanUp() {
+ $this->stopApacheServer();
+ }
+
+ /**
+ * 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));
+ }
+ }
+
+ /**
+ * Stops the Apache server started in setUp, if any.
+ */
+ private function stopApacheServer() {
+ $this->execOrException("service apache2 stop");
+ }
+
+}
>305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350