Files
f7_talk/tests/integration/run.sh
glb_adm 01acfa3b40
Type checking / changes (push) Has been cancelled
Type checking / test (push) Has been cancelled
Type checking / typescript-summary (push) Has been cancelled
Node tests / changes (push) Has been cancelled
Node tests / test (push) Has been cancelled
Node tests / test-summary (push) Has been cancelled
UPSTREAM BASELINE: nextcloud/spreed v22.0.12 (без изменений)
Источник: https://github.com/nextcloud/spreed/archive/refs/tags/v22.0.12.tar.gz
С этого коммита ветка официального Nextcloud Talk отрезана (решение владельца 2026-07-06).
Все дальнейшие изменения — только наши; версии релизов: 22.0.12-f7.N.
2026-07-06 14:07:50 +00:00

249 lines
10 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
PROCESS_ID=$$
APP_NAME=spreed
NOTIFICATIONS_BRANCH="master"
GUESTS_BRANCH="main"
CIRCLES_BRANCH="master"
APP_INTEGRATION_DIR=$PWD
ROOT_DIR=${APP_INTEGRATION_DIR}/../../../..
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Installing composer dependencies from tests/integration/\033[0m"
echo -e "\033[0;36m#\033[0m"
composer install
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Starting PHP webserver\033[0m"
echo -e "\033[0;36m#\033[0m"
echo "" > phpserver.log
PHP_CLI_SERVER_WORKERS=3 php -S localhost:8080 -t ${ROOT_DIR} &> phpserver.log &
PHPPID1=$!
echo -e "Running on process ID: \033[1;35m$PHPPID1\033[0m"
# Output filtered php server logs
tail -f phpserver.log | grep --line-buffered -v -E ":[0-9]+ Accepted$" | grep --line-buffered -v -E ":[0-9]+ Closing$" &
occ_host() {
NEXTCLOUD_CONFIG_DIR=${MAIN_SERVER_CONFIG_DIR} ${ROOT_DIR}/occ "$@"
}
occ_remote() {
NEXTCLOUD_CONFIG_DIR=${REAL_FEDERATED_SERVER_CONFIG_DIR} ${REMOTE_ROOT_DIR}/occ "$@"
}
MAIN_SERVER_CONFIG_DIR=${ROOT_DIR}/config
MAIN_SERVER_DATA_DIR=$(occ_host config:system:get datadirectory)
MAIN_SERVER_APPS_PATHS=$(occ_host config:system:get apps_paths --output json)
if [ $REMOTE_ROOT_DIR ]; then
REAL_FEDERATED_SERVER_CONFIG_DIR="$REMOTE_ROOT_DIR/config"
REAL_FEDERATED_SERVER_DATA_DIR="$REMOTE_ROOT_DIR/data"
DESTROY_REAL_FEDERATED_SERVER=false
else
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Setting up real federated server\033[0m"
echo -e "\033[0;36m#\033[0m"
REMOTE_ROOT_DIR=$ROOT_DIR
REAL_FEDERATED_SERVER_CONFIG_DIR="$MAIN_SERVER_DATA_DIR/tests-talk-real-federated-server/config"
REAL_FEDERATED_SERVER_DATA_DIR="$MAIN_SERVER_DATA_DIR/tests-talk-real-federated-server/data"
DESTROY_REAL_FEDERATED_SERVER=false
if [ ! -d "$REAL_FEDERATED_SERVER_CONFIG_DIR" ] || occ_remote status | grep "installed: false"; then
DESTROY_REAL_FEDERATED_SERVER=true
if [ $CI ]; then
DESTROY_REAL_FEDERATED_SERVER=false
fi
echo ''
echo -e "\033[0;31mReal federated server not installed in $REAL_FEDERATED_SERVER_CONFIG_DIR\033[0m"
echo -e "\033[0;33mPerforming basic SQLite installation with data directory in $REAL_FEDERATED_SERVER_DATA_DIR\033[0m"
mkdir --parents "$REAL_FEDERATED_SERVER_CONFIG_DIR" "$REAL_FEDERATED_SERVER_DATA_DIR"
occ_remote maintenance:install --admin-pass=admin --data-dir="$REAL_FEDERATED_SERVER_DATA_DIR"
echo ''
if [ $MAIN_SERVER_APPS_PATHS ]; then
echo -e "\033[0;33mCopying custom apps_paths\033[0m"
echo "{\"system\":{\"apps_paths\":$MAIN_SERVER_APPS_PATHS}}" > "$REAL_FEDERATED_SERVER_CONFIG_DIR/apps_paths.json"
occ_remote config:import < "$REAL_FEDERATED_SERVER_CONFIG_DIR/apps_paths.json"
echo ''
fi
fi
fi
PORT_FED_REAL=8280
export PORT_FED_REAL
echo "" > phpserver_fed_real.log
PHP_CLI_SERVER_WORKERS=3 NEXTCLOUD_CONFIG_DIR="$REAL_FEDERATED_SERVER_CONFIG_DIR" php -S localhost:${PORT_FED_REAL} -t ${REMOTE_ROOT_DIR} &> phpserver_fed_real.log &
PHPPID3=$!
echo -e "Running on process ID: \033[1;35m$PHPPID3\033[0m"
# Output filtered real federated php server logs
tail -f phpserver_fed_real.log | grep --line-buffered -v -E ":[0-9]+ Accepted$" | grep --line-buffered -v -E ":[0-9]+ Closing$" &
# Kill all sub-processes in case of ctrl+c
trap 'pkill -P $PHPPID1; pkill -P $PHPPID3; pkill -P $PROCESS_ID; wait $PHPPID1; wait $PHPPID3;' INT TERM
export NEXTCLOUD_HOST_ROOT_DIR=${ROOT_DIR}
export NEXTCLOUD_HOST_CONFIG_DIR=${MAIN_SERVER_CONFIG_DIR}
export NEXTCLOUD_REMOTE_ROOT_DIR=${REMOTE_ROOT_DIR}
export NEXTCLOUD_REMOTE_CONFIG_DIR=${REAL_FEDERATED_SERVER_CONFIG_DIR}
export TEST_SERVER_URL="http://localhost:8080/"
export TEST_REMOTE_URL="http://localhost:8280/"
export NEXTCLOUD_CONFIG_DIR="$MAIN_SERVER_CONFIG_DIR"
MAIN_OVERWRITE_CLI_URL=$(occ_host config:system:get overwrite.cli.url)
MAIN_SKELETON_DIR=$(occ_host config:system:get skeletondirectory)
occ_host config:system:set overwrite.cli.url --value "http://localhost:8080/"
occ_host config:app:set dav enableDefaultContact --value false --type boolean
occ_host config:app:set guests hash_user_ids --value false --type boolean
if [[ "$MAIN_SKELETON_DIR" != "" ]]; then
echo "Resetting custom skeletondirectory so that tests pass"
occ_host config:system:delete skeletondirectory
fi
REAL_FEDERATED_OVERWRITE_CLI_URL=$(occ_remote config:system:get overwrite.cli.url)
REAL_FEDERATED_SKELETON_DIR=$(occ_remote config:system:get skeletondirectory)
occ_remote config:system:set overwrite.cli.url --value "$TEST_REMOTE_URL"
occ_remote config:app:set dav enableDefaultContact --value false --type boolean
occ_remote config:app:set guests hash_user_ids --value false --type boolean
if [[ "$REAL_FEDERATED_SKELETON_DIR" != "" ]]; then
echo "Resetting custom skeletondirectory so that tests pass"
occ_remote config:system:delete skeletondirectory
fi
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Setting up apps\033[0m"
echo -e "\033[0;36m#\033[0m"
cp -R ./spreedcheats ../../../spreedcheats
occ_host app:getpath spreedcheats
cp -R ./talk_webhook_demo ../../../talk_webhook_demo
occ_host app:getpath talk_webhook_demo
REMOTE_SPREED_DIR=$(occ_remote app:getpath spreed)
if [ ! -d ${REMOTE_ROOT_DIR}/apps/spreedcheats ]; then
cp -R ${REMOTE_SPREED_DIR}/tests/integration/spreedcheats ${REMOTE_ROOT_DIR}/apps/spreedcheats
fi
if [ ! -d ${REMOTE_ROOT_DIR}/apps/talk_webhook_demo ]; then
cp -R ${REMOTE_SPREED_DIR}/tests/integration/talk_webhook_demo ${REMOTE_ROOT_DIR}/apps/talk_webhook_demo
fi
# Add apps to the parent directory of "spreed" (unless they are
# already there or in "apps").
occ_host app:getpath notifications || (cd ../../../ && git clone --depth 1 --branch ${NOTIFICATIONS_BRANCH} https://github.com/nextcloud/notifications)
occ_host app:getpath guests || (cd ../../../ && git clone --depth 1 --branch ${GUESTS_BRANCH} https://github.com/nextcloud/guests)
occ_host app:getpath circles || (cd ../../../ && git clone --depth 1 --branch ${CIRCLES_BRANCH} https://github.com/nextcloud/circles)
for OCC in occ_host occ_remote; do
${OCC} app:enable spreed || exit 1
${OCC} app:enable --force spreedcheats || exit 1
${OCC} app:enable --force talk_webhook_demo || exit 1
${OCC} app:enable --force notifications || exit 1
${OCC} app:enable --force guests || exit 1
${OCC} app:enable --force circles || exit 1
${OCC} app:list | grep spreed
${OCC} app:list | grep talk_webhook_demo
${OCC} app:list | grep notifications
${OCC} app:list | grep guests
${OCC} app:list | grep circles
done
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Optimizing configuration\033[0m"
echo -e "\033[0;36m#\033[0m"
for OCC in occ_host occ_remote; do
# Disable bruteforce protection because the integration tests do trigger them
${OCC} config:system:set auth.bruteforce.protection.enabled --value false --type bool
# Disable rate limit protection because the integration tests do trigger them
${OCC} config:system:set ratelimit.protection.enabled --value false --type bool
# Allow local remote urls otherwise we can not share
${OCC} config:system:set allow_local_remote_servers --value true --type bool
# Enable debug mode as it is required to enable developer commands
${OCC} config:system:set debug --value true --type bool
# Use faster password hashing
${OCC} config:system:set hashing_default_password --value=true --type=bool
done
# Restore default config dir to local server in case it is used from the tests
export NEXTCLOUD_CONFIG_DIR="$MAIN_SERVER_CONFIG_DIR"
echo ''
echo -e "\033[1;33m#\033[0m"
echo -e "\033[1;33m# ██████╗ ██╗ ██╗███╗ ██╗ ████████╗███████╗███████╗████████╗███████╗\033[0m"
echo -e "\033[1;33m# ██╔══██╗██║ ██║████╗ ██║ ╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██╔════╝\033[0m"
echo -e "\033[1;33m# ██████╔╝██║ ██║██╔██╗ ██║ ██║ █████╗ ███████╗ ██║ ███████╗\033[0m"
echo -e "\033[1;33m# ██╔══██╗██║ ██║██║╚██╗██║ ██║ ██╔══╝ ╚════██║ ██║ ╚════██║\033[0m"
echo -e "\033[1;33m# ██║ ██║╚██████╔╝██║ ╚████║ ██║ ███████╗███████║ ██║ ███████║\033[0m"
echo -e "\033[1;33m# ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝\033[0m"
echo -e "\033[1;33m#\033[0m"
${APP_INTEGRATION_DIR}/vendor/bin/behat --colors -f junit -f pretty $1 $2
RESULT=$?
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Stopping PHP webserver\033[0m"
echo -e "\033[0;36m#\033[0m"
# Kill child PHP processes
pkill -P $PHPPID1;
pkill -P $PHPPID3;
# Kill parent PHP processes
kill -TERM $PHPPID1;
kill -TERM $PHPPID3;
# Kill child processes of this script (e.g. tail)
pkill -P $PROCESS_ID;
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Reverting configuration changes and disabling spreedcheats\033[0m"
echo -e "\033[0;36m#\033[0m"
# Main server
export NEXTCLOUD_CONFIG_DIR="$MAIN_SERVER_CONFIG_DIR"
occ_host app:disable spreedcheats
occ_host app:disable talk_webhook_demo
occ_host config:system:set overwrite.cli.url --value "$MAIN_OVERWRITE_CLI_URL"
if [[ "$MAIN_SKELETON_DIR" != "" ]]; then
occ_host config:system:set skeletondirectory --value "$MAIN_SKELETON_DIR"
fi
# Real federated server
if $DESTROY_REAL_FEDERATED_SERVER; then
rm -rf "$REAL_FEDERATED_SERVER_CONFIG_DIR" "$REAL_FEDERATED_SERVER_DATA_DIR"
else
export NEXTCLOUD_CONFIG_DIR="$REAL_FEDERATED_SERVER_CONFIG_DIR"
occ_remote app:disable spreedcheats
occ_remote app:disable talk_webhook_demo
occ_remote config:system:set overwrite.cli.url --value "$REAL_FEDERATED_OVERWRITE_CLI_URL"
if [[ "$REAL_FEDERATED_SKELETON_DIR" != "" ]]; then
occ_remote config:system:set skeletondirectory --value "$REAL_FEDERATED_SKELETON_DIR"
fi
fi
rm -rf ../../../spreedcheats
rm -rf ../../../talk_webhook_demo
rm -rf ${REMOTE_ROOT_DIR}/apps/spreedcheats
rm -rf ${REMOTE_ROOT_DIR}/apps/talk_webhook_demo
wait $PHPPID1
wait $PHPPID3
echo ''
echo -e "\033[0;36m#\033[0m"
echo -e "\033[0;36m# Gracefully completed\033[0m"
echo -e "\033[0;36m#\033[0m"
exit $RESULT