mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-01 03:52:15 +00:00
a424b4ad56
expect_after that adjusts default timeout handler, reseted eof handler, and this tell expect that it can ignore eof from read, consider the following example: <details> ```expect #!/usr/bin/expect -f exp_internal 1 log_user 1 set timeout 4 match_max 100000 expect_after { # eof { exp_continue } timeout { exit 1 } } spawn bash -c "sleep 1; echo ':) '" expect ":) " ``` ``` $ ./expect.expect < /dev/null spawn bash -c sleep 1; echo ':) ' parent: waiting for sync byte parent: telling child to go ahead parent: now unsynchronized from child spawn: returns {6614} expect: does "" (spawn_id exp4) match glob pattern ":) "? no expect: read eof ^^^ expect: set expect_out(spawn_id) "exp0" expect: set expect_out(buffer) "" ``` And with uncommented eof handler: ``` $ ./expect.expect < /dev/null spawn bash -c sleep 1; echo ':) ' parent: waiting for sync byte parent: telling child to go ahead parent: now unsynchronized from child spawn: returns {17959} expect: does "" (spawn_id exp4) match glob pattern ":) "? no expect: read eof expect: set expect_out(spawn_id) "exp0" expect: set expect_out(buffer) "" expect: continuing expect after update expect: does "" (spawn_id exp4) match glob pattern ":) "? no expect: does ":) \r\n" (spawn_id exp4) match glob pattern ":) "? yes expect: set expect_out(0,string) ":) " expect: set expect_out(spawn_id) "exp4" expect: set expect_out(buffer) ":) " ``` </details>
162 lines
3.5 KiB
Bash
Executable File
162 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Tags: long
|
|
|
|
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
# shellcheck source=../shell_config.sh
|
|
. "$CURDIR"/../shell_config.sh
|
|
|
|
# NOTE: database = $CLICKHOUSE_DATABASE is superfluous
|
|
|
|
function test_completion_word_client()
|
|
{
|
|
local w=$1 && shift
|
|
|
|
local w_len=${#w}
|
|
local compword_begin=${w:0:$((w_len-3))}
|
|
local compword_end=${w:$((w_len-3))}
|
|
|
|
# NOTE: here and below you should escape variables of the expect.
|
|
timeout 60s expect << EOF
|
|
log_user 0
|
|
set timeout 3
|
|
match_max 100000
|
|
expect_after {
|
|
# Do not ignore eof from expect
|
|
eof { exp_continue }
|
|
# A default timeout action is to do nothing, change it to fail
|
|
timeout { exit 1 }
|
|
}
|
|
|
|
spawn bash -c "$CLICKHOUSE_CLIENT_BINARY $CLICKHOUSE_CLIENT_OPT"
|
|
expect ":) "
|
|
|
|
# Make a query
|
|
send -- "SET $compword_begin"
|
|
expect "SET $compword_begin"
|
|
|
|
# Wait for suggestions to load, they are loaded in background
|
|
set is_done 0
|
|
while {\$is_done == 0} {
|
|
send -- "\\t"
|
|
expect {
|
|
"$compword_begin$compword_end" {
|
|
set is_done 1
|
|
}
|
|
default {
|
|
sleep 1
|
|
}
|
|
}
|
|
}
|
|
|
|
send -- "\\3\\4"
|
|
expect eof
|
|
EOF
|
|
}
|
|
|
|
# last 3 bytes will be completed,
|
|
# so take this in mind when you will update the list.
|
|
client_compwords_positive=(
|
|
# system.functions
|
|
concatAssumeInjective
|
|
# system.table_engines
|
|
ReplacingMergeTree
|
|
# system.formats
|
|
JSONEachRow
|
|
# system.table_functions
|
|
clusterAllReplicas
|
|
# system.data_type_families
|
|
SimpleAggregateFunction
|
|
# system.merge_tree_settings
|
|
write_ahead_log_interval_ms_to_fsync
|
|
# system.settings
|
|
max_concurrent_queries_for_all_users
|
|
# system.clusters
|
|
test_shard_localhost
|
|
# system.macros
|
|
default_path_test
|
|
# system.storage_policies, egh not uniq
|
|
default
|
|
# system.aggregate_function_combinators
|
|
uniqCombined64ForEach
|
|
|
|
# FIXME: one may add separate case for suggestion_limit
|
|
# system.databases
|
|
system
|
|
# system.tables
|
|
aggregate_function_combinators
|
|
# system.columns
|
|
primary_key_bytes_in_memory_allocated
|
|
# system.dictionaries
|
|
# FIXME: none
|
|
)
|
|
|
|
|
|
function test_completion_word_local()
|
|
{
|
|
local w=$1 && shift
|
|
|
|
local w_len=${#w}
|
|
local compword_begin=${w:0:$((w_len-3))}
|
|
local compword_end=${w:$((w_len-3))}
|
|
|
|
# NOTE: here and below you should escape variables of the expect.
|
|
timeout 60s expect << EOF
|
|
log_user 0
|
|
set timeout 3
|
|
match_max 100000
|
|
expect_after {
|
|
# Do not ignore eof from expect
|
|
eof { exp_continue }
|
|
# A default timeout action is to do nothing, change it to fail
|
|
timeout { exit 1 }
|
|
}
|
|
|
|
spawn bash -c "$CLICKHOUSE_LOCAL"
|
|
expect ":) "
|
|
|
|
# Make a query
|
|
send -- "SET $compword_begin"
|
|
expect "SET $compword_begin"
|
|
|
|
# Wait for suggestions to load, they are loaded in background
|
|
set is_done 0
|
|
while {\$is_done == 0} {
|
|
send -- "\\t"
|
|
expect {
|
|
"$compword_begin$compword_end" {
|
|
set is_done 1
|
|
}
|
|
default {
|
|
sleep 1
|
|
}
|
|
}
|
|
}
|
|
|
|
send -- "\\3\\4"
|
|
expect eof
|
|
EOF
|
|
}
|
|
|
|
local_compwords_positive=(
|
|
# system.functions
|
|
concatAssumeInjective
|
|
# system.table_engines
|
|
ReplacingMergeTree
|
|
# system.formats
|
|
JSONEachRow
|
|
# system.table_functions
|
|
clusterAllReplicas
|
|
# system.data_type_families
|
|
SimpleAggregateFunction
|
|
)
|
|
|
|
for w in "${client_compwords_positive[@]}"; do
|
|
test_completion_word_client "$w" || echo "[FAIL] $w (positive)"
|
|
done
|
|
|
|
for w in "${local_compwords_positive[@]}"; do
|
|
test_completion_word_local "$w" || echo "[FAIL] $w (positive)"
|
|
done
|
|
|
|
exit 0
|