#!/bin/bash # Скрипт для тестирования запросов к ClickHouse. # Из файлов *.sql в заданной директории, в алфавитном порядке, отправляются все запросы. # Результат сравнивается с эталоном. QUERIES_DIR="./queries" CLIENT_PROGRAM="clickhouse-client" COLOR_RESET="\033[0m" COLOR_WHITE="\033[1;37m" COLOR_FAIL="\033[1;31m" COLOR_UNKNOWN="\033[1;30m" COLOR_OK="\033[1;32m" MSG_FAIL="${COLOR_WHITE}[ ${COLOR_FAIL}FAIL${COLOR_WHITE} ]${COLOR_RESET}" MSG_UNKNOWN="${COLOR_WHITE}[ ${COLOR_UNKNOWN}UNKNOWN${COLOR_WHITE} ]${COLOR_RESET}" MSG_OK="${COLOR_WHITE}[ ${COLOR_OK}OK${COLOR_WHITE} ]${COLOR_RESET}" MSG_GENERATED="${COLOR_WHITE}[ ${COLOR_UNKNOWN}GENERATED${COLOR_WHITE} ]${COLOR_RESET}" HAS_ERROR=0 for query_file in $(ls $QUERIES_DIR/*.sql) do test_name=$(basename -s .sql $query_file) result_file=$QUERIES_DIR/$test_name.result error_file=$QUERIES_DIR/$test_name.error reference_file=$QUERIES_DIR/$test_name.reference diff_file=$QUERIES_DIR/$test_name.diff printf "%-30s" "$test_name: " $CLIENT_PROGRAM < $query_file > $result_file 2> $error_file ret_code=$? if [ $ret_code -ne 0 ]; then HAS_ERROR=1 echo -e "$MSG_FAIL - return code $ret_code" if [ -s "$error_file" ]; then cat $error_file fi # разорвано соединение с сервером if grep -q -E "Connection refused|Attempt to read after eof" $error_file; then exit 1; fi elif [ -s "$error_file" ]; then HAS_ERROR=1 echo -e "$MSG_FAIL - having stderror:" cat $error_file elif [ ! -e "$reference_file" ]; then # надо сгенерировать эталонный результат if [ "$1" == "--generate" ]; then cp $result_file $reference_file echo -e "$MSG_GENERATED - no reference file" else echo -e "$MSG_UNKNOWN - no reference file (use --generate to create)" fi else diff $reference_file $result_file > $diff_file if [ -s "$diff_file" ]; then HAS_ERROR=1 echo -e "$MSG_FAIL - result differs with reference:" cat $diff_file else echo -e "$MSG_OK" rm $error_file $result_file $diff_file fi fi done exit $HAS_ERROR