Skip to content

Commit 4b5874b

Browse files
committed
added drop user during session test
1 parent 3a8d21d commit 4b5874b

File tree

2 files changed

+122
-0
lines changed

2 files changed

+122
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
port_0_sessions:
2+
0
3+
address_0_sessions:
4+
0
5+
Corresponding LoginSuccess/Logout
6+
9
7+
LoginFailure
8+
0
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/usr/bin/env bash
2+
# Tags: no-debug
3+
4+
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
5+
# shellcheck source=../shell_config.sh
6+
. "$CURDIR"/../shell_config.sh
7+
8+
readonly PID=$$
9+
10+
readonly TEST_USER="02835_USER_${PID}"
11+
readonly TEST_ROLE="02835_ROLE_${PID}"
12+
readonly TEST_PROFILE="02835_PROFILE_${PID}"
13+
readonly SESSION_LOG_MATCHING_FIELDS="auth_id, auth_type, client_version_major, client_version_minor, client_version_patch, interface"
14+
15+
function tcp_session()
16+
{
17+
local user=$1
18+
${CLICKHOUSE_CLIENT} -q "SELECT COUNT(*) FROM system.numbers" --user="${user}"
19+
}
20+
21+
function http_session()
22+
{
23+
local user=$1
24+
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&user=${user}&password=pass" -d "SELECT COUNT(*) FROM system.numbers"
25+
}
26+
27+
function http_with_session_id_session()
28+
{
29+
local user=$1
30+
${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}&user=${user}&password=pass" -d "SELECT COUNT(*) FROM system.numbers"
31+
}
32+
33+
# Busy-waits until user $1, specified amount of queries ($2) will run simultaneously.
34+
function wait_for_queries_start()
35+
{
36+
local user=$1
37+
local queries_count=$2
38+
# 10 seconds waiting
39+
counter=0 retries=100
40+
while [[ $counter -lt $retries ]]; do
41+
result=$($CLICKHOUSE_CLIENT --query "SELECT COUNT(*) FROM system.processes WHERE user = '${user}'")
42+
if [[ $result == "${queries_count}" ]]; then
43+
break;
44+
fi
45+
sleep 0.1
46+
((++counter))
47+
done
48+
}
49+
50+
${CLICKHOUSE_CLIENT} -q "SYSTEM FLUSH LOGS"
51+
${CLICKHOUSE_CLIENT} -q "DELETE FROM system.session_log WHERE user = '${TEST_USER}'"
52+
53+
# DROP USE CASE
54+
${CLICKHOUSE_CLIENT} -q "CREATE USER IF NOT EXISTS ${TEST_USER}"
55+
${CLICKHOUSE_CLIENT} -q "GRANT SELECT ON system.numbers TO ${TEST_USER}"
56+
57+
export -f tcp_session;
58+
export -f http_session;
59+
export -f http_with_session_id_session;
60+
61+
timeout 10s bash -c "tcp_session ${TEST_USER}" >/dev/null 2>&1 &
62+
timeout 10s bash -c "http_session ${TEST_USER}" >/dev/null 2>&1 &
63+
timeout 10s bash -c "http_with_session_id_session ${TEST_USER}" >/dev/null 2>&1 &
64+
65+
wait_for_queries_start $TEST_USER 3
66+
${CLICKHOUSE_CLIENT} -q "DROP USER ${TEST_USER}"
67+
${CLICKHOUSE_CLIENT} -q "KILL QUERY WHERE user = '${TEST_USER}' SYNC" >/dev/null &
68+
69+
wait
70+
71+
# DROP ROLE CASE
72+
${CLICKHOUSE_CLIENT} -q "CREATE ROLE IF NOT EXISTS ${TEST_ROLE}"
73+
${CLICKHOUSE_CLIENT} -q "CREATE USER ${TEST_USER} DEFAULT ROLE ${TEST_ROLE}"
74+
${CLICKHOUSE_CLIENT} -q "GRANT SELECT ON system.numbers TO ${TEST_USER}"
75+
76+
timeout 10s bash -c "tcp_session ${TEST_USER}" >/dev/null 2>&1 &
77+
timeout 10s bash -c "http_session ${TEST_USER}" >/dev/null 2>&1 &
78+
timeout 10s bash -c "http_with_session_id_session ${TEST_USER}" >/dev/null 2>&1 &
79+
80+
wait_for_queries_start $TEST_USER 3
81+
${CLICKHOUSE_CLIENT} -q "DROP ROLE ${TEST_ROLE}"
82+
${CLICKHOUSE_CLIENT} -q "DROP USER ${TEST_USER}"
83+
84+
${CLICKHOUSE_CLIENT} -q "KILL QUERY WHERE user = '${TEST_USER}' SYNC" >/dev/null &
85+
86+
wait
87+
88+
# DROP PROFILE CASE
89+
${CLICKHOUSE_CLIENT} -q "CREATE SETTINGS PROFILE IF NOT EXISTS '${TEST_PROFILE}'"
90+
${CLICKHOUSE_CLIENT} -q "CREATE USER ${TEST_USER} SETTINGS PROFILE '${TEST_PROFILE}'"
91+
${CLICKHOUSE_CLIENT} -q "GRANT SELECT ON system.numbers TO ${TEST_USER}"
92+
93+
timeout 10s bash -c "tcp_session ${TEST_USER}" >/dev/null 2>&1 &
94+
timeout 10s bash -c "http_session ${TEST_USER}" >/dev/null 2>&1 &
95+
timeout 10s bash -c "http_with_session_id_session ${TEST_USER}" >/dev/null 2>&1 &
96+
97+
wait_for_queries_start $TEST_USER 3
98+
${CLICKHOUSE_CLIENT} -q "DROP SETTINGS PROFILE '${TEST_PROFILE}'"
99+
${CLICKHOUSE_CLIENT} -q "DROP USER ${TEST_USER}"
100+
101+
${CLICKHOUSE_CLIENT} -q "KILL QUERY WHERE user = '${TEST_USER}' SYNC" >/dev/null &
102+
103+
wait
104+
105+
${CLICKHOUSE_CLIENT} -q "SYSTEM FLUSH LOGS"
106+
107+
echo "port_0_sessions:"
108+
${CLICKHOUSE_CLIENT} -q "SELECT count(*) FROM system.session_log WHERE user = '${TEST_USER}' AND client_port = 0"
109+
echo "address_0_sessions:"
110+
${CLICKHOUSE_CLIENT} -q "SELECT count(*) FROM system.session_log WHERE user = '${TEST_USER}' AND client_address = toIPv6('::')"
111+
echo "Corresponding LoginSuccess/Logout"
112+
${CLICKHOUSE_CLIENT} -q "SELECT COUNT(*) FROM (SELECT ${SESSION_LOG_MATCHING_FIELDS} FROM system.session_log WHERE user = '${TEST_USER}' AND type = 'LoginSuccess' INTERSECT SELECT ${SESSION_LOG_MATCHING_FIELDS}, FROM system.session_log WHERE user = '${TEST_USER}' AND type = 'Logout')"
113+
echo "LoginFailure"
114+
${CLICKHOUSE_CLIENT} -q "SELECT COUNT(*) FROM system.session_log WHERE user = '${TEST_USER}' AND type = 'LoginFailure'"

0 commit comments

Comments
 (0)