summaryrefslogtreecommitdiffstats
path: root/build/acceptance/run-drone.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build/acceptance/run-drone.sh')
-rwxr-xr-xbuild/acceptance/run-drone.sh75
1 files changed, 75 insertions, 0 deletions
diff --git a/build/acceptance/run-drone.sh b/build/acceptance/run-drone.sh
new file mode 100755
index 00000000000..93e91c474c6
--- /dev/null
+++ b/build/acceptance/run-drone.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+
+# @copyright Copyright (c) 2017, 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 script to run the acceptance tests, which test a running Nextcloud
+# instance from the point of view of a real user, in a Drone step.
+#
+# The acceptance tests are written in Behat so, besides running the tests, this
+# script installs Behat, its dependencies, and some related packages in the
+# "vendor" subdirectory of the acceptance tests. The acceptance tests also use
+# the Selenium server to control a web browser, and they require a Nextcloud
+# server to be available, so this script waits for the Selenium server and the
+# Nextcloud server (both provided in their own Drone service) to be ready before
+# running the tests.
+
+# Exit immediately on errors.
+set -o errexit
+
+# Ensure working directory is script directory, as some actions (like installing
+# Behat through Composer or running Behat) expect that.
+cd "$(dirname $0)"
+
+SCENARIO_TO_RUN=$1
+
+composer install
+
+# Although Behat documentation states that using the BEHAT_PARAMS environment
+# variable "You can set any value for any option that is available in a
+# behat.yml file" this is currently not true for the constructor parameters of
+# contexts (see https://github.com/Behat/Behat/issues/983). Thus, the default
+# "behat.yml" configuration file has to be adjusted to provide the appropriate
+# parameters for NextcloudTestServerContext.
+ORIGINAL="\
+ - NextcloudTestServerContext"
+REPLACEMENT="\
+ - NextcloudTestServerContext:\n\
+ nextcloudTestServerHelper: NextcloudTestServerDroneHelper\n\
+ nextcloudTestServerHelperParameters:\n\
+ - $NEXTCLOUD_SERVER_CONTROL_PORT"
+sed "s/$ORIGINAL/$REPLACEMENT/" config/behat.yml > config/behat-drone.yml
+
+# Both the Selenium server and the Nextcloud server control should be ready by
+# now, as Composer typically takes way longer to execute than their startup
+# (which is done in parallel in Drone services), but just in case.
+
+echo "Waiting for Selenium"
+timeout 60s bash -c "while ! curl 127.0.0.1:4444 >/dev/null 2>&1; do sleep 1; done"
+
+# This just checks if it can connect to the port in which the Nextcloud server
+# control should be listening on.
+NEXTCLOUD_SERVER_CONTROL_PORT="12345"
+PHP_CHECK_NEXTCLOUD_SERVER="\
+if ((\\\$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { exit(1); } \
+if (socket_connect(\\\$socket, \\\"127.0.0.1\\\", \\\"$NEXTCLOUD_SERVER_CONTROL_PORT\\\") === false) { exit(1); } \
+socket_close(\\\$socket);"
+
+echo "Waiting for Nextcloud server control"
+timeout 60s bash -c "while ! php -r \"$PHP_CHECK_NEXTCLOUD_SERVER\" >/dev/null 2>&1; do sleep 1; done"
+
+vendor/bin/behat --config=config/behat-drone.yml $SCENARIO_TO_RUN