2017-06-02 18:48:33 +00:00
#!/usr/bin/env bash
request( ) {
local url = " $1 "
local select = " $2 "
curl --silent $url --data " $select "
}
create_temporary_table( ) {
local url = " $1 "
request $url "CREATE TEMPORARY TABLE temp (x String)"
request $url "INSERT INTO temp VALUES ('Hello'), ('World')"
}
check( ) {
local url = " $1 "
local select = " $2 "
local output = " $3 "
local expected_result = " $4 "
local message = " $5 "
result = $( request $url " $select " | grep --count " $output " )
if [ $result -ne $expected_result ] ; then
echo " FAILED: $message "
exit 1
fi
}
address = "localhost"
port = "8123"
url = " http:// $address : $port / "
session = " ?session_id=test_ $$ "
select = "SELECT * FROM system.settings WHERE name = 'max_rows_to_read'"
select_from_temporary_table = "SELECT * FROM temp ORDER BY x"
select_from_non_existent_table = "SELECT * FROM no_such_table ORDER BY x"
check " $url ?session_id=no_such_session_ $$ &session_check=1 " " $select " "Exception.*Session not found" 1 "session_check=1 does not work."
check " $url $session &session_check=0 " " $select " "Exception" 0 "session_check=0 does not work."
request $url $session "SET max_rows_to_read=7777777"
check " $url $session &session_timeout=string " " $select " "Exception.*Invalid session timeout" 1 "Non-numeric value accepted as a timeout."
2017-06-07 19:05:15 +00:00
check " $url $session &session_timeout=3601 " " $select " "Exception.*Maximum session timeout*" 1 "More then 3600 seconds accepted as a timeout."
2017-06-02 18:48:33 +00:00
check " $url $session &session_timeout=-1 " " $select " "Exception.*Invalid session timeout" 1 "Negative timeout accepted."
check " $url $session &session_timeout=0 " " $select " "Exception" 0 "Zero timeout not accepted."
check " $url $session &session_timeout=3600 " " $select " "Exception" 0 "3600 second timeout not accepted."
check " $url $session &session_timeout=60 " " $select " "Exception" 0 "60 second timeout not accepted."
check $url $session " $select " "7777777" 1 "Failed to reuse session."
2017-06-08 16:36:45 +00:00
# Workaround here
# TODO: move the test to integration test or add readonly user to test environment
if [ [ -z ` request " $url ?user=readonly " "SELECT ''" ` ] ] ; then
# We have readonly user
check " $url $session &user=readonly&session_check=1 " " $select " "Exception.*Session not found" 1 "Session is accessable for another user."
else
check " $url $session &user=readonly&session_check=1 " " $select " "Exception.*Unknown user*" 1 "Session is accessable for unknown user."
fi
2017-06-02 18:48:33 +00:00
create_temporary_table $url $session
check $url $session " $select_from_temporary_table " "Hello" 1 "Failed to reuse a temporary table for session."
check " $url ?session_id=another_session_ $$ " " $select_from_temporary_table " "Exception.*Table .* doesn't exist." 1 "Temporary table is visible for another table."
( (
cat <<EOF
POST /$session HTTP/1.1
Host: $address :$port
Accept: */*
Content-Length: 62
Content-Type: application/x-www-form-urlencoded
EOF
sleep 4
) | telnet $address $port >/dev/null 2>/dev/null) &
sleep 1
check $url $session " $select " "Exception.*Session is locked" 1 "Double access to the same session."
session = " ?session_id=test_timeout_ $$ "
create_temporary_table " $url $session &session_timeout=1 "
check " $url $session &session_timeout=1 " " $select_from_temporary_table " "Hello" 1 "Failed to reuse a temporary table for session."
sleep 3
check " $url $session &session_check=1 " " $select " "Exception.*Session not found" 1 "Session did not expire on time."
create_temporary_table " $url $session &session_timeout=2 "
for i in $( seq 1 3) ; do
check " $url $session &session_timeout=2 " " $select_from_temporary_table " "Hello" 1 "Session expired too early."
sleep 1
done
sleep 3
check " $url $session &session_check=1 " " $select " "Exception.*Session not found" 1 "Session did not expire on time."
create_temporary_table " $url $session &session_timeout=2 "
for i in $( seq 1 5) ; do
check " $url $session &session_timeout=2 " " $select_from_non_existent_table " "Exception.*Table .* doesn't exist." 1 "Session expired too early."
sleep 1
done
check " $url $session &session_timeout=2 " " $select_from_temporary_table " "Hello" 1 "Session expired too early. Failed to update timeout in case of exceptions."
sleep 4
check " $url $session &session_check=1 " " $select " "Exception.*Session not found" 1 "Session did not expire on time."
echo "PASSED"