diff --git a/.gitignore b/.gitignore index 430cd90..5e83f36 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,4 @@ /.env /.env.override /account_stop.json -/tests/variables.txt +/backup/ diff --git a/docker-compose.yml b/docker-compose.yml index cf6ec6b..c9f56bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -217,6 +217,7 @@ services: # any-sync-netcheck netcheck: image: "ghcr.io/anyproto/any-sync-tools:${ANY_SYNC_TOOLS_VERSION}" + pull_policy: always restart: unless-stopped depends_on: - any-sync-consensusnode @@ -226,11 +227,11 @@ services: - any-sync-node-2 - any-sync-node-3 volumes: - - ./etc/client.yml:/client.yml + - "${STORAGE_DIR}:/code/storage" command: ["tail", "-f", "/dev/null"] stop_signal: SIGKILL tty: true healthcheck: - test: any-sync-netcheck -c /client.yml 2>&1| grep -P 'netcheck\s+success' - interval: 60s + test: any-sync-netcheck -c /code/storage/docker-generateconfig/nodes.yml 2>&1| grep -E 'netcheck\s+success' + interval: 10s start_period: 5s diff --git a/tests/main.sh b/tests/main.sh index 83984f7..0f968cb 100755 --- a/tests/main.sh +++ b/tests/main.sh @@ -1,153 +1,174 @@ #!/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' -source variables.txt +DATE=$(date +%Y%m%d-%H%M%S) +TESTS_DIR="$(dirname $0)" +PROJECT_DIR="$TESTS_DIR/.." +BACKUP_DIR="$PROJECT_DIR/backup/$DATE" +DEBUG=false -# Writes Any Sync ports to .env.override file -setAnySyncPort() { - { - echo "ANY_SYNC_NODE_1_PORT=$ANY_SYNC_NODE_1_PORT" - echo "ANY_SYNC_NODE_2_PORT=$ANY_SYNC_NODE_2_PORT" - echo "ANY_SYNC_NODE_3_PORT=$ANY_SYNC_NODE_3_PORT" - echo "ANY_SYNC_COORDINATOR_PORT=$ANY_SYNC_COORDINATOR_PORT" - echo "ANY_SYNC_FILENODE_PORT=$ANY_SYNC_FILENODE_PORT" - echo "ANY_SYNC_CONSENSUSNODE_PORT=$ANY_SYNC_CONSENSUSNODE_PORT" - } > ../.env.override -} +# set make cmd +if $DEBUG; then + MAKE="make -C $PROJECT_DIR" +else + MAKE="make --quiet -C $PROJECT_DIR" +fi -# Sets the external listen host in .env.override -setExternalListenHost() { - echo "EXTERNAL_LISTEN_HOST=\"$EXTERNAL_LISTEN_HOST\"" > ../.env.override -} +# show variables +if $DEBUG; then + echo -e "${YELLOW}Variables:${NC}" + cat < ../.env.override -} +# load variables +source $TESTS_DIR/variables -# Sets the default version for Any Sync components in .env.override -setAnySyncVersionNumber() { - { - echo "ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[0]}" - echo "ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[0]}" - echo "ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[0]}" - echo "ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[0]}" - } > ../.env.override -} - -# Sets production version for Any Sync components in .env.override -setAnySyncVersionProd() { - { - echo "ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[1]}" - echo "ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[1]}" - echo "ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[1]}" - echo "ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[1]}" - } > ../.env.override -} - -# Sets staging version for Any Sync components in .env.override -setAnySyncVersionStage() { - { - echo "ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[2]}" - echo "ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[2]}" - echo "ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[2]}" - echo "ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[2]}" - } > ../.env.override -} - -# Writes Minio port configurations to .env.override -setMinioPort() { - { - echo "MINIO_PORT=$MINIO_PORT" - echo "EXTERNAL_MINIO_PORT=$EXTERNAL_MINIO_PORT" - echo "MINIO_WEB_PORT=$MINIO_WEB_PORT" - echo "EXTERNAL_MINIO_WEB_PORT=$EXTERNAL_MINIO_WEB_PORT" - } > ../.env.override -} +# 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 7 # wait for netcheck to finish checking - if docker compose ps | grep -q "any-sync-dockercompose-netcheck-1.*healthy"; then - echo -e "\n${GREEN} Netcheck - OK [✔] ${NC}" - else - echo -e "\n${RED} Netcheck - FAILED [✖] ${NC}\n" - (cd .. && make down) - exit 1 - fi + 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 < $PROJECT_DIR/.env.override +ANY_SYNC_NODE_1_PORT=$ANY_SYNC_NODE_1_PORT +ANY_SYNC_NODE_2_PORT=$ANY_SYNC_NODE_2_PORT +ANY_SYNC_NODE_3_PORT=$ANY_SYNC_NODE_3_PORT +ANY_SYNC_COORDINATOR_PORT=$ANY_SYNC_COORDINATOR_PORT +ANY_SYNC_FILENODE_PORT=$ANY_SYNC_FILENODE_PORT +ANY_SYNC_CONSENSUSNODE_PORT=$ANY_SYNC_CONSENSUSNODE_PORT +EOF diff --git a/tests/run.d/setAnySyncVersionNumber.sh b/tests/run.d/setAnySyncVersionNumber.sh new file mode 100644 index 0000000..281850f --- /dev/null +++ b/tests/run.d/setAnySyncVersionNumber.sh @@ -0,0 +1,7 @@ +# Sets the default version for Any Sync components in .env.override +cat < $PROJECT_DIR/.env.override +ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[0]} +ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[0]} +ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[0]} +ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[0]} +EOF diff --git a/tests/run.d/setAnySyncVersionProd.sh b/tests/run.d/setAnySyncVersionProd.sh new file mode 100644 index 0000000..d37313c --- /dev/null +++ b/tests/run.d/setAnySyncVersionProd.sh @@ -0,0 +1,7 @@ +# Sets production version for Any Sync components in .env.override +cat < $PROJECT_DIR/.env.override +ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[1]} +ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[1]} +ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[1]} +ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[1]} +EOF diff --git a/tests/run.d/setAnySyncVersionStage.sh b/tests/run.d/setAnySyncVersionStage.sh new file mode 100644 index 0000000..2553767 --- /dev/null +++ b/tests/run.d/setAnySyncVersionStage.sh @@ -0,0 +1,7 @@ +# Sets staging version for Any Sync components in .env.override +cat < $PROJECT_DIR/.env.override +ANY_SYNC_NODE_VERSION=${ANY_SYNC_NODE_VERSION[2]} +ANY_SYNC_FILENODE_VERSION=${ANY_SYNC_FILENODE_VERSION[2]} +ANY_SYNC_COORDINATOR_VERSION=${ANY_SYNC_COORDINATOR_VERSION[2]} +ANY_SYNC_CONSENSUSNODE_VERSION=${ANY_SYNC_CONSENSUSNODE_VERSION[2]} +EOF diff --git a/tests/run.d/setExternalListenHost.sh b/tests/run.d/setExternalListenHost.sh new file mode 100644 index 0000000..5ed2c61 --- /dev/null +++ b/tests/run.d/setExternalListenHost.sh @@ -0,0 +1,4 @@ +# Sets the external listen host in .env.override +cat < $PROJECT_DIR/.env.override +EXTERNAL_LISTEN_HOST=\"$EXTERNAL_LISTEN_HOST\" +EOF diff --git a/tests/run.d/setExternalListenHosts.sh b/tests/run.d/setExternalListenHosts.sh new file mode 100644 index 0000000..63992d1 --- /dev/null +++ b/tests/run.d/setExternalListenHosts.sh @@ -0,0 +1,4 @@ +# Sets multiple external listen hosts in .env.override +cat < $PROJECT_DIR/.env.override +EXTERNAL_LISTEN_HOSTS=\"$EXTERNAL_LISTEN_HOSTS\" +EOF diff --git a/tests/run.d/setMinioPort.sh b/tests/run.d/setMinioPort.sh new file mode 100644 index 0000000..15e9be7 --- /dev/null +++ b/tests/run.d/setMinioPort.sh @@ -0,0 +1,7 @@ +# Writes Minio port configurations to .env.override +cat < $PROJECT_DIR/.env.override +MINIO_PORT=$MINIO_PORT +EXTERNAL_MINIO_PORT=$EXTERNAL_MINIO_PORT +MINIO_WEB_PORT=$MINIO_WEB_PORT +EXTERNAL_MINIO_WEB_PORT=$EXTERNAL_MINIO_WEB_PORT +EOF diff --git a/tests/variables.txt b/tests/variables similarity index 100% rename from tests/variables.txt rename to tests/variables