Files
trezor-suite/docker/docker-connect-test.sh

172 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# This script runs @trezor/connect tests.
# It spins up trezor-user-env and sets required environment variables.
set -euo pipefail
# Running standalone instance of trezor-user-env
# docker run -it -e SDL_VIDEODRIVER="dummy" -p "9001:9001" -p "21326:21326" -p "21325:21326" ghcr.io/trezor/trezor-user-env:latest
# Tweaking trezor-user-env locally
# docker run -it -e SDL_VIDEODRIVER="dummy" -p "9001:9001" -p "21326:21326" -p "21325:21326" ghcr.io/trezor/trezor-user-env:latest nix-shell
# do your changes using `vi` and run:
# [nix-shell:/trezor-user-env]# ./run.sh
# Ports
# 9001 - websocket server, communication test case > user-env (setup etc...)
# 21326 - trezord proxy. because of trezord CORS check
# 21325 - original trezord port redirected to trezor-user-env proxy
ENVIRONMENT=$1
if [[ "$ENVIRONMENT" != "web" && "$ENVIRONMENT" != "node" ]]; then
echo "either 'web' or 'node' must be specified as the first argument"
exit 1
fi
show_usage() {
echo "Usage: run [OPTIONS] [ARGS]"
echo ""
echo "Options:"
echo " -c Disable backend cache. default: enabled"
echo " -d Disable docker. Useful when running own instance of trezor-user-env. default: enabled"
echo " -D PATH Set path to docker executable. Can be replaced with \`podman\`. default: docker"
echo " -e All methods except excluded, example: applySettings,signTransaction"
echo " -p Test pattern"
echo " -f Use specific firmware version, example: 2.1.4, 1.8.0 default: -main"
echo " -b Use specific firmware branch"
echo " -o Use BTC-only firmware of the specified branch"
echo " -i Included methods only, example: applySettings,signTransaction"
echo " -s actual test script. default: 'yarn test:integration'"
echo " -u Firmware url"
echo " -m Firmware model, example: R'"
echo " -r Randomize test order (node only)"
echo " -t Specify transport / bridge version"
}
# default options
FIRMWARE=""
FIRMWARE_URL=""
FIRMWARE_BRANCH=""
FIRMWARE_BTC_ONLY=false
INCLUDED_METHODS=""
EXCLUDED_METHODS=""
DOCKER=true
USE_TX_CACHE=true
USE_WS_CACHE=true
PATTERN=""
FIRMWARE_MODEL=""
RANDOMIZE=false
TRANSPORT="node-bridge"
# echo $OPTARG
# user options
OPTIND=2
while getopts ":p:i:e:f:b:u:m:t:hdcro" opt; do
case $opt in
d)
DOCKER=false
;;
c)
USE_TX_CACHE=false
USE_WS_CACHE=false
;;
f)
FIRMWARE=$OPTARG
;;
b)
FIRMWARE_BRANCH=$OPTARG
;;
u)
FIRMWARE_URL=$OPTARG
;;
i)
INCLUDED_METHODS=$OPTARG
;;
e)
EXCLUDED_METHODS=$OPTARG
;;
p)
PATTERN=$OPTARG
;;
o)
FIRMWARE_BTC_ONLY=true
;;
m)
FIRMWARE_MODEL=$OPTARG
;;
r)
RANDOMIZE=true
;;
t)
TRANSPORT=$OPTARG
;;
h) # Script usage
show_usage
exit 0
;;
\?)
echo "invalid option $OPTARG"
exit 1
;;
esac
done
shift $((OPTIND - 1))
if [[ $ENVIRONMENT == "node" ]]; then
SCRIPT="yarn workspace @trezor/connect test:e2e:node"
else
SCRIPT="yarn workspace @trezor/connect test:e2e:web"
fi
if [[ $FIRMWARE_BTC_ONLY == true && -z $FIRMWARE_BRANCH ]]; then
echo "BTC-only firmware requires a branch to be specified"
exit 1
fi
# export essential process.env variables
export TESTS_FIRMWARE=$FIRMWARE
export TESTS_INCLUDED_METHODS=$INCLUDED_METHODS
export TESTS_EXCLUDED_METHODS=$EXCLUDED_METHODS
export TESTS_USE_TX_CACHE=$USE_TX_CACHE
export TESTS_USE_WS_CACHE=$USE_WS_CACHE
export TESTS_PATTERN=$PATTERN
export TESTS_SCRIPT=$SCRIPT
export TESTS_FIRMWARE_URL=$FIRMWARE_URL
export TESTS_FIRMWARE_BRANCH=$FIRMWARE_BRANCH
export TESTS_FIRMWARE_BTC_ONLY=$FIRMWARE_BTC_ONLY
export TESTS_FIRMWARE_MODEL=$FIRMWARE_MODEL
export TESTS_RANDOM=$RANDOMIZE
export TESTS_TRANSPORT=$TRANSPORT
runDocker() {
docker compose -f ./docker/docker-compose.connect-test.yml up -d
}
run() {
echo "Testing env: ${ENVIRONMENT}. Using: ${SCRIPT} ${PATTERN}"
echo " Firmware: ${TESTS_FIRMWARE}"
echo " Firmware model: ${TESTS_FIRMWARE_MODEL}"
echo " Firmware from url: ${FIRMWARE_URL}"
echo " Firmware from branch: ${FIRMWARE_BRANCH}"
echo " Firmware BTC-only: ${FIRMWARE_BTC_ONLY}"
echo " Test pattern: $PATTERN"
echo " Included methods: ${INCLUDED_METHODS}"
echo " Excluded methods: ${EXCLUDED_METHODS}"
echo " TxCache: ${USE_TX_CACHE}"
echo " WsCache: ${USE_WS_CACHE}"
echo " Random: ${RANDOMIZE}"
echo " Transport: ${TRANSPORT}"
if [ $DOCKER = true ]; then
runDocker
fi
$SCRIPT
}
run