#!/bin/bash ## Helper functions function wait_for_server { port=$1 while ! nc -z -w 1 127.0.0.1 $port; do sleep 0.1 done sleep 1 } function echo_info { printf "\033[1;36m~~ $1 ~~\033[0m\n"; } function echo_success { printf "\033[1;32m~~ $1 ~~\033[0m\n\n"; } function echo_failure { printf "\033[1;31m~~ $1 ~~\033[0m\n\n"; } ## Environment setup DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$DIR" # Create a temporary directory for output files tmpdir=/tmp/mg_client/output if [ -d $tmpdir ]; then rm -rf $tmpdir fi mkdir -p $tmpdir cd $tmpdir # Find memgraph binaries. memgraph_dir="$DIR/../../build" if [ ! -d $memgraph_dir ]; then memgraph_dir="$DIR/../../build_release" fi # Find mg_client binaries. client_dir="$memgraph_dir/tools/src" if [ ! -d $client_dir ]; then echo_failure "mg-client directory not found" exit 1 fi # Find tests dir. tests_dir="$DIR/client" if [ ! -d $tests_dir ]; then echo_failure "Directory with tests not found" exit 1 fi # Find tests input files. input_dir="$tests_dir/input" if [ ! -d $input_dir ]; then echo_failure "Directory with tests input files not found" exit 1 fi # Check and generate SSL certificates use_ssl=false key_file="" cert_file="" if [ "$1" == "--use-ssl" ]; then use_ssl=true key_file=".key.pem" cert_file=".cert.pem" openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \ -subj "/C=HR/ST=Zagreb/L=Zagreb/O=Memgraph/CN=db.memgraph.com" \ -keyout $key_file -out $cert_file || exit 1 fi ## Startup # Start the memgraph process and wait for it to start. echo_info "Starting memgraph" $memgraph_dir/memgraph --cert-file=$cert_file --key-file=$key_file & pid=$! wait_for_server 7687 echo_success "Started memgraph" ## Tests echo_info "Running tests" echo # Blank line client_flags="--use-ssl=$use_ssl" test_code=0 for output_dir in $tests_dir/output_*; do for filename in $input_dir/*; do test_name=$(basename $filename) test_name=${test_name%.*} output_name="$test_name.txt" output_format=$(basename $output_dir) output_format=${output_format#*_} run_flags="$client_flags --output-format=$output_format" echo_info "Running test '$test_name' with $output_format output" $client_dir/mg_client $run_flags < $filename > $tmpdir/$test_name diff -b $tmpdir/$test_name $output_dir/$output_name test_code=$? if [ $test_code -ne 0 ]; then echo_failure "Test '$test_name' with $output_format output failed" break else echo_success "Test '$test_name' with $output_format output passed" fi # Clear database for each test. $client_dir/mg_client $client_flags <<< "MATCH (n) DETACH DELETE n;" \ &> /dev/null || exit 1 done if [ $test_code -ne 0 ]; then break fi done ## Cleanup echo_info "Starting test cleanup" # Shutdown the memgraph process. kill $pid wait -n code_mg=$? # Check memgraph exit code. if [ $code_mg -ne 0 ]; then echo_failure "The memgraph process didn't terminate properly!" exit $code_mg fi echo_success "Test cleanup done" exit $test_code