graphql-engine/.circleci/test-server-flags.sh
Aniket Deshpande 3bdd777ec4 MySQL: Add mysql-client dependencies on CI and in .cabal file
https://github.com/hasura/graphql-engine-mono/pull/1514

Co-authored-by: Sibi Prabakaran <737477+psibi@users.noreply.github.com>
Co-authored-by: Chris Done <11019+chrisdone@users.noreply.github.com>
Co-authored-by: Abby Sassel <3883855+sassela@users.noreply.github.com>
Co-authored-by: Toan Nguyen  <1615675+hgiasac@users.noreply.github.com>
GitOrigin-RevId: 81fd23f439e8c3db8149fedae2855db1e84a60a3
2021-07-12 20:07:46 +00:00

143 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
CIRCLECI_FOLDER="${BASH_SOURCE[0]%/*}"
cd $CIRCLECI_FOLDER
CIRCLECI_FOLDER="$PWD"
SERVER_ROOT="$CIRCLECI_FOLDER/../server"
i=1
echoInfo() {
echo -e "\033[36m$i. $*\033[0m"
i=$[i+1]
}
fail_if_port_busy() {
local PORT=$1
if nc -z localhost $PORT ; then
echo "Port $PORT is busy. Exiting"
exit 1
fi
}
wait_for_port() {
local PORT=$1
echo "waiting for $PORT"
for _ in $(seq 1 60);
do
nc -z localhost $PORT && echo "port $PORT is ready" && return
echo -n .
sleep 0.2
done
echo "Failed waiting for $PORT" && exit 1
}
test_export_metadata_with_admin_secret() {
curl -f -d'{"type" : "export_metadata", "args" : {} }' localhost:8080/v1/query -H "X-Hasura-Admin-Secret: $1" > /dev/null
}
cd $SERVER_ROOT
if [ -z "${HASURA_GRAPHQL_DATABASE_URL:-}" ] ; then
echo "Env var HASURA_GRAPHQL_DATABASE_URL is not set"
exit 1
fi
HGE_PID=""
run_hge_with_flags() {
fail_if_port_busy 8080
set -x
stdbuf -o0 "$GRAPHQL_ENGINE" serve $* > "$OUTPUT_FOLDER/graphql-engine.log" & HGE_PID=$!
set +x
wait_for_port 8080
}
kill_hge() {
kill -s INT $HGE_PID || true
wait $HGE_PID || true
}
trap kill_hge ERR
trap kill_hge INT
OUTPUT_FOLDER=${OUTPUT_FOLDER:-"$CIRCLECI_FOLDER/test-server-flags-output"}
mkdir -p "$OUTPUT_FOLDER"
########## Test that we didn't compile with +developer by accident
echoInfo "Test we didn't compile in the developer-only APIs"
run_hge_with_flags
code=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/dev/plan_cache)
if [ "$code" != "404" ]; then
echo "Expected a dev endpoint to return 404, but got: $code"
exit 1
fi
kill_hge
########## Test --use-prepared-statements=false and flag --admin-secret
key="HGE$RANDOM$RANDOM"
run_hge_with_flags --use-prepared-statements=false --admin-secret="$key"
echoInfo "Test flag --admin-secret=XXXX"
grep -F '"admin_secret_set":true' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null
test_export_metadata_with_admin_secret "$key"
echoInfo "Test flag --use-prepared-statements=false"
grep -F '"use_prepared_statements":false' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null
kill_hge
###### Test --use-prepared-statements=true
key="HGE$RANDOM$RANDOM"
run_hge_with_flags --use-prepared-statements=true
echoInfo "Test --use-prepared-statements=true"
grep -F '"use_prepared_statements":true' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null || (cat "$OUTPUT_FOLDER/graphql-engine.log" && false)
kill_hge
######### Test HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=abcd
export HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=abcd
fail_if_port_busy 8080
timeout 3 stdbuf -o0 "$GRAPHQL_ENGINE" serve > "$OUTPUT_FOLDER/graphql-engine.log" 2>&1 & PID=$!
wait $PID || true
echoInfo "Test HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=abcd"
grep -F 'Not a valid boolean text' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null || (cat "$OUTPUT_FOLDER/graphql-engine.log" && false)
######### Test HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=false and HASURA_GRAPHQL_ADMIN_SECRET=XXXX
key="HGE$RANDOM$RANDOM"
export HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=false
export HASURA_GRAPHQL_ADMIN_SECRET="$key"
run_hge_with_flags
echoInfo "Test flag HASURA_GRAPHQL_ADMIN_SECRET=XXXX"
grep -F '"admin_secret_set":true' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null || (cat "$OUTPUT_FOLDER/graphql-engine.log" && false)
test_export_metadata_with_admin_secret "$key"
echoInfo "Test HASURA_GRAPHQL_USE_PREPARED_STATEMENTS=false"
grep -F '"use_prepared_statements":false' "$OUTPUT_FOLDER/graphql-engine.log" >/dev/null || (cat "$OUTPUT_FOLDER/graphql-engine.log" && false)
kill_hge
unset HASURA_GRAPHQL_ADMIN_SECRET
unset HASURA_GRAPHQL_USE_PREPARED_STATEMENTS