tests: add a test for clickhouse-client autocompletion

v2: Increase timeout for 01676_clickhouse_client_autocomplete
    https://github.com/ClickHouse/ClickHouse/pull/19584#discussion_r565727175

v3: Disable 01676_clickhouse_client_autocomplete in unbundled build (arcadia)

    autocomplete does not have to work fully unbundled build (since it lack
    of replxx).

    Similar to bd523a0aff

v4: set expect timeout back to 1 and increase total timeout to 20 sec
v4: set expect timeout back to 3 and increase total timeout to 22 (3*X+1) sec
This commit is contained in:
Azat Khuzhin 2021-01-27 22:44:22 +03:00
parent 86f80105cb
commit 585874bf46
5 changed files with 121 additions and 0 deletions

View File

@ -87,6 +87,11 @@ Suggest::Suggest()
void Suggest::loadImpl(Connection & connection, const ConnectionTimeouts & timeouts, size_t suggestion_limit)
{
///
/// NOTE: Once you will update the completion list,
/// do not forget to update 01676_clickhouse_client_autocomplete.sh
///
std::stringstream query; // STYLE_CHECK_ALLOW_STD_STRING_STREAM
query << "SELECT DISTINCT arrayJoin(extractAll(name, '[\\\\w_]{2,}')) AS res FROM ("
"SELECT name FROM system.functions"

View File

@ -0,0 +1,114 @@
#!/usr/bin/env bash
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CURDIR"/../shell_config.sh
function test_completion_word()
{
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 22s expect << EOF
log_user 0
set timeout 3
match_max 100000
# A default timeout action is to do nothing, change it to fail
expect_after {
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.
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.errors, also it is very rare to cover system_events_show_zero_values
CONDITIONAL_TREE_PARENT_NOT_FOUND
# system.events, also it is very rare to cover system_events_show_zero_values
WriteBufferFromFileDescriptorWriteFailed
# system.asynchronous_metrics, also this metric has zero value
#
# NOTE: that there is no ability to complete metrics like
# jemalloc.background_thread.num_runs, due to "." is used as a word breaker
# (and this cannot be changed -- db.table)
ReplicasMaxAbsoluteDelay
# system.metrics
PartsPreCommitted
# 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
)
for w in "${compwords_positive[@]}"; do
test_completion_word "$w" || echo "[FAIL] $w (positive)"
done
# One negative is enough
compwords_negative=(
# system.clusters
test_shard_localhost_no_such_cluster
)
for w in "${compwords_negative[@]}"; do
test_completion_word "$w" && echo "[FAIL] $w (negative)"
done
exit 0

View File

@ -198,3 +198,4 @@
01659_test_base64Decode_mysql_compatibility
01675_data_type_coroutine
01671_aggregate_function_group_bitmap_data
01676_clickhouse_client_autocomplete

View File

@ -90,6 +90,7 @@
"01300_client_save_history_when_terminated",
"orc_output",
"01370_client_autocomplete_word_break_characters",
"01676_clickhouse_client_autocomplete",
"01193_metadata_loading",
"01455_time_zones"
],