104 lines
3.4 KiB
Bash
Executable File
104 lines
3.4 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
# Run 'consensus-specs' tests from a docker container instance.
|
|
# *Be sure to launch Docker before running this script.*
|
|
#
|
|
# It does the below:
|
|
# 1. Run pytest for consensus-specs in a container.
|
|
# 2. Copy and paste the coverage report.
|
|
# 3. Remove all exited containers that use the consensus-specs:<TAG> images.
|
|
|
|
|
|
# Set variables
|
|
ALL_EXECUTABLE_SPECS=("phase0" "altair" "bellatrix" "capella" "deneb" "electra" "whisk")
|
|
TEST_PRESET_TYPE=minimal
|
|
FORK_TO_TEST=phase0
|
|
NUMBER_OF_CORES=4
|
|
WORKDIR="//consensus-specs//tests//core//pyspec"
|
|
ETH2SPEC_FOLDER_NAME="eth2spec"
|
|
CONTAINER_NAME="consensus-specs-tests"
|
|
DATE=$(date +"%Y%m%d-%H-%M")
|
|
# Default flag values
|
|
version=$(git log --pretty=format:'%h' -n 1)
|
|
IMAGE_NAME="consensus-specs:$version"
|
|
number_of_core=4
|
|
|
|
# displays the available options
|
|
display_help() {
|
|
echo "Run 'consensus-specs' tests from a container instance."
|
|
echo "Be sure to launch Docker before running this script."
|
|
echo
|
|
echo "Syntax: build_run_test.sh [--v TAG | --n NUMBER_OF_CORE | --f FORK_TO_TEST | --p PRESET_TYPE | --a | --h HELP]"
|
|
echo " --f <fork> Specify the fork to test"
|
|
echo " --i <image_name> Specify the docker image to use"
|
|
echo " --n <number> Specify the number of cores"
|
|
echo " --p <type> Specify the test preset type"
|
|
echo " --a Test all forks"
|
|
echo " --h Display this help and exit"
|
|
}
|
|
|
|
# Stop and remove the 'consensus-specs-dockerfile-test' container.
|
|
# If this container doesn't exist, then a error message is printed
|
|
# (but the process is not stopped).
|
|
cleanup() {
|
|
echo "Stop and remove the 'consensus-specs-tests' container."
|
|
docker stop $CONTAINER_NAME || true && docker rm $CONTAINER_NAME || true
|
|
|
|
}
|
|
|
|
# Copy the results from the container to a local folder
|
|
copy_test_results() {
|
|
local fork_name="$1" # Storing the first argument in a variable
|
|
|
|
docker cp $CONTAINER_NAME:$WORKDIR/test-reports/test_results.xml ./testResults/test-results-$fork_name-$DATE.xml
|
|
}
|
|
|
|
# Function to check if the Docker image already exists
|
|
image_exists() {
|
|
docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "$1"
|
|
}
|
|
|
|
# Parse command line arguments
|
|
while [[ "$#" -gt 0 ]]; do
|
|
case $1 in
|
|
--f) FORK_TO_TEST="$2"; shift ;;
|
|
--v) IMAGE_NAME="$2"; shift ;;
|
|
--n) NUMBER_OF_CORES="$2"; shift ;;
|
|
--p) TEST_PRESET_TYPE="$2"; shift ;;
|
|
--a) FORK_TO_TEST="all" ;;
|
|
--h) display_help; exit 0 ;;
|
|
*) echo "Unknown parameter: $1"; display_help; exit 1 ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# initialize a test result directory
|
|
mkdir -p ./testResults
|
|
|
|
# Only clean container after user exit console
|
|
trap cleanup SIGINT
|
|
|
|
# Build Docker container if it doesn't exist
|
|
if ! image_exists "$IMAGE_NAME"; then
|
|
echo "Image $IMAGE_NAME does not exist. Building Docker image..."
|
|
docker build ../ -t $IMAGE_NAME -f ../docker/Dockerfile
|
|
else
|
|
echo "Image $IMAGE_NAME already exists. Skipping build..."
|
|
fi
|
|
|
|
# Equivalent to `make citest with the subsequent flags`
|
|
if [ "$FORK_TO_TEST" == "all" ]; then
|
|
for fork in "${ALL_EXECUTABLE_SPECS[@]}"; do
|
|
docker run --name $CONTAINER_NAME $IMAGE_NAME \
|
|
make citest fork=$fork TEST_PRESET_TYPE=$TEST_PRESET_TYPE NUMBER_OF_CORES=$NUMBER_OF_CORES
|
|
copy_test_results $fork
|
|
done
|
|
else
|
|
docker run --name $CONTAINER_NAME $IMAGE_NAME \
|
|
make citest fork=$FORK_TO_TEST TEST_PRESET_TYPE=$TEST_PRESET_TYPE NUMBER_OF_CORES=$NUMBER_OF_CORES
|
|
copy_test_results $FORK_TO_TEST
|
|
fi
|
|
|
|
# Stop and remove the container
|
|
cleanup
|