Эх сурвалжийг харах

Merge pull request #5839 from J0WI/nc-tests

Add tests for NextCloud
Tianon Gravi 6 жил өмнө
parent
commit
7ed224bfff

+ 11 - 0
test/config.sh

@@ -128,6 +128,17 @@ imageTests+=(
 		mysql-initdb
 		mysql-log-bin
 	'
+	[nextcloud]='
+		nextcloud-cli-mysql
+		nextcloud-cli-postgres
+		nextcloud-cli-sqlite
+	'
+	[nextcloud:apache]='
+		nextcloud-apache-run
+	'
+	[nextcloud:fpm]='
+		nextcloud-fpm-run
+	'
 	[node]='
 		node-hello-world
 	'

+ 31 - 0
test/tests/nextcloud-apache-run/run.sh

@@ -0,0 +1,31 @@
+#!/bin/bash
+set -eo pipefail
+
+dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
+
+# since we have curl in the php image, we'll use that
+clientImage="$1"
+serverImage="$1"
+
+# Create an instance of the container-under-test
+cid="$(docker run -d "$serverImage")"
+trap "docker rm -vf $cid > /dev/null" EXIT
+
+_request() {
+	local method="$1"
+	shift
+
+	local url="${1#/}"
+	shift
+
+	docker run --rm --link "$cid":apache "$clientImage" \
+		curl -fsL -X"$method" "$@" "http://apache/$url"
+}
+
+# Make sure that Apache is listening and ready
+. "$dir/../../retry.sh" --tries 30 '_request GET / --output /dev/null'
+
+# Check that we can request / and that it contains the pattern "Finish setup" somewhere
+# <input type="submit" class="primary" value="Finish setup" data-finishing="Finishing …">
+_request GET '/' |tac|tac| grep -iq "Finish setup"
+# (without "|tac|tac|" we get "broken pipe" since "grep" closes the pipe before "curl" is done reading it)

+ 39 - 0
test/tests/nextcloud-cli-mysql/run.sh

@@ -0,0 +1,39 @@
+#!/bin/bash
+set -eo pipefail
+
+dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
+
+mysqlImage='mariadb:10'
+serverImage="$1"
+dbPass="test-$RANDOM-password-$RANDOM-$$"
+dbName="test-$RANDOM-db"
+dbUsr="test-$RANDOM-db"
+
+# Create an instance of the container-under-test
+mysqlCid="$(docker run -d \
+	-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
+	-e MYSQL_USER="$dbUsr" \
+	-e MYSQL_PASSWORD="$dbPass" \
+	-e MYSQL_DATABASE="$dbName" \
+	"$mysqlImage")"
+trap "docker rm -vf $mysqlCid > /dev/null" EXIT
+cid="$(docker run -d --link "$mysqlCid":mysql \
+	-e MYSQL_HOST="mysql" \
+	-e MYSQL_USER="$dbUsr" \
+	-e MYSQL_PASSWORD="$dbPass" \
+	-e MYSQL_DATABASE="$dbName" \
+	-e NEXTCLOUD_ADMIN_USER="test-$RANDOM-user" \
+	-e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \
+	"$serverImage")"
+trap "docker rm -vf $cid $mysqlCid > /dev/null" EXIT
+
+_occ() {
+	docker exec -u www-data $cid php occ $1
+}
+
+# Give some time to install
+. "$dir/../../retry.sh" --tries 30 '_occ app:list' > /dev/null
+
+# Check if NextCloud is installed
+_occ status | grep -iq "installed: true"
+_occ check

+ 39 - 0
test/tests/nextcloud-cli-postgres/run.sh

@@ -0,0 +1,39 @@
+#!/bin/bash
+set -eo pipefail
+
+dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
+
+postgresImage='postgres:11-alpine'
+serverImage="$1"
+dbPass="test-$RANDOM-password-$RANDOM-$$"
+dbName="test-$RANDOM-db"
+dbUsr="test-$RANDOM-db"
+
+# Create an instance of the container-under-test
+# Static username due https://github.com/nextcloud/docker/issues/345
+postgresCid="$(docker run -d \
+	-e POSTGRES_USER="oc_postgres" \
+	-e POSTGRES_PASSWORD="$dbPass" \
+	-e POSTGRES_DB="$dbName" \
+	"$postgresImage")"
+trap "docker rm -vf $postgresCid > /dev/null" EXIT
+cid="$(docker run -d --link "$postgresCid":postgres \
+	-e POSTGRES_HOST="postgres" \
+	-e POSTGRES_USER="oc_postgres" \
+	-e POSTGRES_PASSWORD="$dbPass" \
+	-e POSTGRES_DB="$dbName" \
+	-e NEXTCLOUD_ADMIN_USER="postgres" \
+	-e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \
+	"$serverImage")"
+trap "docker rm -vf $cid $postgresCid > /dev/null" EXIT
+
+_occ() {
+	docker exec -u www-data $cid php occ $1
+}
+
+# Give some time to install
+. "$dir/../../retry.sh" --tries 30 '_occ app:list' > /dev/null
+
+# Check if NextCloud is installed
+_occ status | grep -iq "installed: true"
+_occ check

+ 26 - 0
test/tests/nextcloud-cli-sqlite/run.sh

@@ -0,0 +1,26 @@
+#!/bin/bash
+set -eo pipefail
+
+dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
+
+serverImage="$1"
+dbName="test-$RANDOM-db"
+
+# Create an instance of the container-under-test
+cid="$(docker run -d \
+	-e SQLITE_DATABASE="$dbName" \
+	-e NEXTCLOUD_ADMIN_USER="test-$RANDOM-user" \
+	-e NEXTCLOUD_ADMIN_PASSWORD="test-$RANDOM-password" \
+	"$serverImage")"
+trap "docker rm -vf $cid > /dev/null" EXIT
+
+_occ() {
+	docker exec -u www-data $cid php occ $1
+}
+
+# Give some time to install
+. "$dir/../../retry.sh" --tries 30 '_occ app:list' > /dev/null
+
+# Check if NextCloud is installed
+_occ status | grep -iq "installed: true"
+_occ check

+ 36 - 0
test/tests/nextcloud-fpm-run/nginx-default.conf

@@ -0,0 +1,36 @@
+# Minimal server config
+
+server {
+	listen 80;
+	root /var/www/html;
+
+	location = /.well-known/carddav {
+		return 301 $scheme://$host/remote.php/dav;
+	}
+	location = /.well-known/caldav {
+		return 301 $scheme://$host/remote.php/dav;
+	}
+
+	location / {
+		rewrite ^ /index.php$request_uri;
+	}
+
+	location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
+		deny all;
+	}
+	location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
+		deny all;
+	}
+
+	location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
+		fastcgi_split_path_info ^(.+\.php)(/.*)$;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+		fastcgi_pass fpm:9000;
+	}
+
+	location ~ ^/(?:updater|ocs-provider)(?:$|/) {
+		try_files $uri/ =404;
+		index index.php;
+	}
+}

+ 46 - 0
test/tests/nextcloud-fpm-run/run.sh

@@ -0,0 +1,46 @@
+#!/bin/bash
+set -eo pipefail
+
+dir="$(dirname "$(readlink -f "$BASH_SOURCE")")"
+
+# since we have curl in the php image, we'll use that
+clientImage="$1"
+serverImage="$1"
+
+# Create an instance of the container-under-test
+cid="$(docker run -d "$serverImage")"
+trap "docker rm -vf $cid > /dev/null" EXIT
+
+# Build a client image with cgi-fcgi for testing
+nginxImage="$("$dir/../image-name.sh" librarytest/nextcloud-fpm-run-nginx "$1")"
+"$dir/../docker-build.sh" "$dir" "$nginxImage" <<EOD
+FROM nginx:alpine
+COPY dir/nginx-default.conf /etc/nginx/conf.d/default.conf
+EOD
+
+serverImage="$1"
+
+# Create an instance of the container-under-test
+cid="$(docker run -d "$serverImage")"
+trap "docker rm -vf $cid > /dev/null" EXIT
+nginxCid="$(docker run -d --link "$cid":fpm --volumes-from "$cid" "$nginxImage")"
+trap "docker rm -vf $nginxCid $cid > /dev/null" EXIT
+
+_request() {
+	local method="$1"
+	shift
+
+	local url="${1#/}"
+	shift
+
+	docker run --rm --link "$nginxCid":nginx "$clientImage" \
+		curl -fsL -X"$method" "$@" "http://nginx/$url"
+}
+
+# Make sure that PHP-FPM is listening and ready
+. "$dir/../../retry.sh" --tries 30 '_request GET / --output /dev/null'
+
+# Check that we can request / and that it contains the pattern "Finish setup" somewhere
+# <input type="submit" class="primary" value="Finish setup" data-finishing="Finishing …">
+_request GET '/' |tac|tac| grep -iq "Finish setup"
+# (without "|tac|tac|" we get "broken pipe" since "grep" closes the pipe before "curl" is done reading it)