mirror of
https://github.com/YunoHost-Apps/mattermost_ynh.git
synced 2024-09-03 19:36:29 +02:00
We used to copy the app content, to avoid the tests accidentally mutating it. But it makes it difficult to change the source code and having it reflected inside the VM. Also Yunohost copies the app files itself before executing scripts. So this should be more convenient and safe enough.
160 lines
4.4 KiB
Bash
Executable file
160 lines
4.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# Run tests against Mattermost installation on a Vagrant virtual machine.
|
|
#
|
|
# The VM is provisioned with a fresh Yunohost install, then snapshotted
|
|
# for subsequent runs.
|
|
|
|
# Fail on first error
|
|
set -e
|
|
|
|
# Configuration constants
|
|
APP_NAME="mattermost"
|
|
APP_DIR="/vagrant"
|
|
DOMAIN="ynh-tests.local"
|
|
VM_ROOT_PASSWORD="alpine"
|
|
YUNOHOST_ADMIN_PASSWORD="alpine"
|
|
|
|
function _usage() {
|
|
echo "Run tests against ${APP_NAME} installation on a Vagrant virtual machine."
|
|
echo "Usage: test.sh [--skip-snapshot] [--verbose] [--help]"
|
|
}
|
|
|
|
# Configuration arguments
|
|
function _parse_args() {
|
|
VERBOSE=false
|
|
VERBOSE_OPT=''
|
|
SKIP_SNAPSHOT=false
|
|
while [ "$1" != "" ]; do
|
|
case $1 in
|
|
"-v" | "--verbose")
|
|
shift
|
|
VERBOSE=true
|
|
VERBOSE_OPT='--verbose';;
|
|
"-s" | "--skip-snapshot")
|
|
shift
|
|
SKIP_SNAPSHOT=true;;
|
|
"--help")
|
|
_usage
|
|
exit;;
|
|
*)
|
|
_usage
|
|
exit 1;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Execute an ssh command on the vagrant box
|
|
function _vagrant_ssh() {
|
|
local command="$1"
|
|
local tty_output=$([ $VERBOSE ] && echo '/dev/stdout' || echo '/dev/null')
|
|
|
|
[ $VERBOSE == true ] && echo "vagrant ssh -c \"$command\""
|
|
|
|
vagrant ssh -c "$command" \
|
|
> $tty_output \
|
|
2> >(grep --invert-match 'Connection to 127.0.0.1 closed.' 1>&2) # Filter out the SSH deconnection message printed on stderr
|
|
local exit_code=$?
|
|
return $exit_code
|
|
}
|
|
|
|
function _assert_success() {
|
|
local message="$1"
|
|
local command="$2"
|
|
if [ -z "$command" ]; then
|
|
echo "Invalid arguments: command missing."
|
|
echo "Usage: _assert_success <message> <command>"
|
|
return -1
|
|
fi
|
|
|
|
local RED=`tput setaf 1`
|
|
local GREEN=`tput setaf 2`
|
|
local BOLD=`tput bold`
|
|
local RESET=`tput sgr0`
|
|
|
|
set +e # Allow continuing the script on failures
|
|
if _vagrant_ssh "$command"; then
|
|
printf "[${GREEN}${BOLD}OK${RESET}] $message\n"
|
|
else
|
|
printf "[${RED}${BOLD}KO${RESET}] $message\n"
|
|
fi
|
|
set -e # Fail again on first error
|
|
}
|
|
|
|
function _assert_mattermost_frontpage_up() {
|
|
local domain="$1"
|
|
|
|
# On the default Yunohost Vagrant box, this file
|
|
# bypass all SSOWAT configurations, and redirects the root of the domain to the SSO login form.
|
|
# We need to access the frontpage, so we remove this bypass.
|
|
_vagrant_ssh "sudo rm -f /etc/ssowat/conf.json.persistent"
|
|
|
|
_assert_success \
|
|
"Mattermost frontpage is reachable" \
|
|
"curl --silent --show-error --insecure -L -H 'Host: ${DOMAIN}' --resolve ${DOMAIN}:443:127.0.0.1 https://${DOMAIN}/ | grep -q 'Mattermost'"
|
|
}
|
|
|
|
function setup() {
|
|
if $SKIP_SNAPSHOT; then
|
|
echo "--- Starting Vagrant box ---"
|
|
vagrant up --no-provision
|
|
echo "--- (Skipping snapshot restore) ---"
|
|
return
|
|
fi
|
|
|
|
if (vagrant snapshot list | grep 'yunohost-jessie-pristine' > /dev/null); then
|
|
echo "--- Restoring Vagrant snapshot ---"
|
|
vagrant snapshot restore yunohost-jessie-pristine
|
|
else
|
|
echo "--- Provisioning Vagrant box ---"
|
|
vagrant up --provision
|
|
echo "--- Saving Vagrant snapshot ---"
|
|
vagrant snapshot save yunohost-jessie-pristine
|
|
fi
|
|
}
|
|
|
|
function test_simple_install() {
|
|
echo "--- Running simple installation test ---"
|
|
_vagrant_ssh "sudo yunohost app install '$APP_DIR' --args 'domain=${DOMAIN}&public_site=Yes&analytics=0' $VERBOSE_OPT"
|
|
_assert_mattermost_frontpage_up "$DOMAIN"
|
|
}
|
|
|
|
function test_simple_upgrade() {
|
|
echo "--- Running simple upgrade test ---"
|
|
_vagrant_ssh "sudo yunohost app upgrade $APP_NAME --file '$APP_DIR' $VERBOSE_OPT"
|
|
_assert_mattermost_frontpage_up "$DOMAIN"
|
|
}
|
|
|
|
function test_simple_backup() {
|
|
echo "--- Running simple backup test ---"
|
|
_vagrant_ssh "sudo yunohost backup create --name mattermost-test-backup --ignore-system $VERBOSE_OPT --apps $APP_NAME"
|
|
}
|
|
|
|
function test_simple_remove() {
|
|
echo "--- Running simple remove test ---"
|
|
_vagrant_ssh "sudo yunohost app remove $APP_NAME"
|
|
}
|
|
|
|
function test_simple_restore() {
|
|
echo "--- Running simple restore test ---"
|
|
_vagrant_ssh "sudo yunohost backup restore mattermost-test-backup --force --ignore-system $VERBOSE_OPT --apps $APP_NAME"
|
|
_assert_mattermost_frontpage_up "$DOMAIN"
|
|
}
|
|
|
|
function test_package_check() {
|
|
echo "--- Running package_check ---"
|
|
_vagrant_ssh "package_check/package_check.sh --bash-mode '$APP_DIR'"
|
|
}
|
|
|
|
function teardown() {
|
|
echo "--- Cleaning up ---"
|
|
}
|
|
|
|
_parse_args $*
|
|
setup
|
|
test_simple_install
|
|
test_simple_upgrade
|
|
test_simple_backup
|
|
test_simple_remove
|
|
test_simple_restore
|
|
test_package_check
|
|
teardown
|