mirror of
https://github.com/YunoHost-Apps/mattermost_ynh.git
synced 2024-09-03 19:36:29 +02:00
e4d568319d
For now only the linter is enabled. LXC-based tests fail because the LXC can’t connect to the internet. Maybe it can only run in the yunohost official vagrant box?
148 lines
3.9 KiB
Bash
Executable file
148 lines
3.9 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"
|
|
TESTS_DIR="/home/vagrant/tests"
|
|
APP_DIR="$TESTS_DIR/app"
|
|
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
|
|
}
|
|
|
|
function _assert_success() {
|
|
local message="$1"
|
|
local command="$2"
|
|
|
|
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 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 --no-provision yunohost-jessie-pristine
|
|
else
|
|
echo "--- Provisioning Vagrant box ---"
|
|
vagrant up --provision
|
|
echo "--- Saving Vagrant snapshot ---"
|
|
vagrant snapshot save yunohost-jessie-pristine
|
|
fi
|
|
|
|
# Copy the files inside the VM, rather than using the mounted
|
|
# files directly.
|
|
# This avoids tests screwing up our files if something goes wrong.
|
|
echo "--- Copying app content into the box ---"
|
|
if ! [ -d "$APP_DIR" ]; then
|
|
_vagrant_ssh "mkdir -p '$TESTS_DIR'"
|
|
_vagrant_ssh "cp -R '/vagrant' '$APP_DIR'"
|
|
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"
|
|
}
|
|
|
|
function test_simple_upgrade() {
|
|
echo "--- Running simple upgrade test ---"
|
|
_vagrant_ssh "sudo yunohost app upgrade $APP_NAME --file '$APP_DIR' $VERBOSE_OPT"
|
|
}
|
|
|
|
function test_simple_backup() {
|
|
echo "--- Running simple backup test ---"
|
|
_vagrant_ssh "sudo yunohost backup create --ignore-hooks --apps $APP_NAME $VERBOSE_OPT"
|
|
}
|
|
|
|
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 list | cut -d ' ' -f 2 > backup_name"
|
|
_vagrant_ssh "sudo yunohost backup restore \$(cat backup_name) --force --ignore-hooks --apps $APP_NAME $VERBOSE_OPT"
|
|
}
|
|
|
|
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
|