1
0
Fork 0
mirror of https://github.com/anyproto/any-sync-dockercompose.git synced 2025-06-08 05:47:03 +09:00
any-sync-dockercompose/tests/main.sh
2024-11-19 19:29:58 -03:00

174 lines
5.2 KiB
Bash
Executable file

#!/bin/bash
# Color codes for output
BLUE='\033[1;34m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
DATE=$(date +%Y%m%d-%H%M%S)
TESTS_DIR="$(dirname $0)"
PROJECT_DIR="$TESTS_DIR/.."
BACKUP_DIR="$PROJECT_DIR/backup/$DATE"
DEBUG=false
# set make cmd
if $DEBUG; then
MAKE="make -C $PROJECT_DIR"
else
MAKE="make --quiet -C $PROJECT_DIR"
fi
# show variables
if $DEBUG; then
echo -e "${YELLOW}Variables:${NC}"
cat <<EOF
TESTS_DIR=$TESTS_DIR
PROJECT_DIR=$PROJECT_DIR
BACKUP_DIR=$BACKUP_DIR
EOF
fi
# load variables
source $TESTS_DIR/variables
# record the start time in seconds since the epoch
TEST_START_TIME=$(date +%s)
# Checks network status of Any Sync services and displays result
runNetcheck() {
sleep 3
# wait for netcheck to finish checking
while true; do
STATUS=$( docker inspect --format='{{json .State.Health.Status}}' $(docker-compose ps --quiet netcheck) )
if [[ "$STATUS" != "starting" ]]; then
$DEBUG && echo "Container 'netcheck' health status: '$STATUS', continue"
break
else
$DEBUG && echo "Container 'netcheck' health status: '$STATUS', waiting..."
sleep 5
fi
done
if [[ "$STATUS" != "healthy" ]]; then
echo -e "${GREEN} Netcheck - OK [✔] ${NC}"
else
echo -e "${RED} Netcheck - FAILED [✖] ${NC}"
echo -e "${RED} Please investigate the issue. And after that, you can restore the previous storage state by executing the following commands:"
cat <<EOF
$MAKE down && $MAKE cleanEtcStorage
mv $BACKUP_DIR/etc $PROJECT_DIR/
mv $BACKUP_DIR/storage $PROJECT_DIR/
mv $BACKUP_DIR/.env.override $PROJECT_DIR/
rmdir $BACKUP_DIR
EOF
#restoreBackup
exit 1
fi
}
# Verifies if Minio bucket was created successfully
checkBucketCreation() {
if docker compose logs create-bucket | grep -q "Bucket created successfully"; then
echo -e "${GREEN} Minio bucket creation - OK [✔] ${NC}"
else
echo -e "${RED} Minio bucket creation - FAILED [✖] ${NC}"
restoreBackup
exit 1
fi
}
restoreBackup() {
echo -e "${YELLOW}Finish! Backup restore...${NC}"
$MAKE down && $MAKE cleanEtcStorage
mv $BACKUP_DIR/etc $PROJECT_DIR/
mv $BACKUP_DIR/storage $PROJECT_DIR/
mv $BACKUP_DIR/.env.override $PROJECT_DIR/
rmdir $BACKUP_DIR
}
runTest(){
local PARAM_1=$1
if [[ $PARAM_1 == 'cleanData' ]]; then
local CLEAN_DATA=true
else
local CLEAN_DATA=false
fi
if $CLEAN_DATA; then
echo -e "${YELLOW}Testing without user data storage...${NC}"
else
echo -e "${YELLOW}Testing with user data storage...${NC}"
fi
local RUN_TEST_START_TIME=$(date +%s) # record the start time in seconds since the epoch
for TEST in $TESTS_DIR/run.d/*.sh; do
echo -e "${YELLOW}Executing test: $TEST ${NC}"
local TEST_FILE_NAME=$(basename $TEST)
if [[ $TEST_FILE_NAME == 'setAnySyncPort.sh' ]]; then
if ! $CLEAN_DATA; then
echo "skipping for exist storage"
continue
fi
fi
# record the start time in seconds since the epoch
local START_TIME=$(date +%s)
# source the test file
source $TEST
# restart stand
if $CLEAN_DATA; then
$MAKE down && $MAKE cleanEtcStorage && $MAKE start
local STATUS_CODE=$?
else
$MAKE down && $MAKE start
local STATUS_CODE=$?
fi
local END_TIME=$(date +%s) # record the end time in seconds since the epoch
local ELAPSED_TIME=$((END_TIME - START_TIME)) # calculate the elapsed time
echo -e "${BLUE}Test $TEST took $ELAPSED_TIME seconds to complete${NC}" # log the time taken for the test
# check 'make start' status
if [[ $STATUS_CODE -eq 0 ]]; then
# if successful, run checks
runNetcheck
if $CLEAN_DATA; then
checkBucketCreation
fi
echo -e "${GREEN} $TEST - OK [✔] ${NC}"
else
# if failed, log the error, stop services, restore backup, and exit
echo -e "${RED} $TEST - FAILED [✖] ${NC}"
$MAKE down
restoreBackup
exit 1
fi
done
local RUN_TEST_END_TIME=$(date +%s) # record the end time in seconds since the epoch
local RUN_TEST_ELAPSED_TIME=$((RUN_TEST_END_TIME - RUN_TEST_START_TIME)) # calculate the elapsed time
echo -e "${BLUE}runTest took $RUN_TEST_ELAPSED_TIME seconds to complete${NC}" # log the time taken for the test
echo
}
# create data backup
echo -e "${YELLOW}Pre-start user data backup...${NC}"
$MAKE down
install -d $BACKUP_DIR
cp -r $PROJECT_DIR/etc $BACKUP_DIR/
cp -r $PROJECT_DIR/storage $BACKUP_DIR/
cp $PROJECT_DIR/.env.override $BACKUP_DIR/
# run tests
runTest notCleanData
runTest cleanData
# restore backup and exit
restoreBackup
# logging run time
TEST_END_TIME=$(date +%s) # record the end time in seconds since the epoch
TEST_ELAPSED_TIME=$((TEST_END_TIME - TEST_START_TIME)) # calculate the elapsed time
echo -e "${BLUE}$0 took $TEST_ELAPSED_TIME seconds to complete${NC}" # log the time taken for the test
exit 0