mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-07 23:12:34 +00:00
152 lines
4.3 KiB
Plaintext
152 lines
4.3 KiB
Plaintext
import pty
|
|
import os
|
|
import shlex
|
|
import time
|
|
import multiprocessing
|
|
|
|
COMPLETION_TIMEOUT_SECONDS = 30
|
|
DEBUG_LOG = os.path.join(
|
|
os.environ["CLICKHOUSE_TMP"],
|
|
os.path.basename(os.path.abspath(__file__)).strip(".python") + ".debuglog",
|
|
)
|
|
|
|
|
|
def run_with_timeout(func, args, timeout):
|
|
process = multiprocessing.Process(target=func, args=args)
|
|
process.start()
|
|
process.join(timeout)
|
|
|
|
if process.is_alive():
|
|
process.terminate()
|
|
print("Timeout")
|
|
|
|
|
|
def test_completion(program, argv, comp_word):
|
|
comp_begin = comp_word[:-3]
|
|
|
|
shell_pid, master = pty.fork()
|
|
if shell_pid == 0:
|
|
os.execv(program, argv)
|
|
else:
|
|
try:
|
|
debug_log_fd = open(DEBUG_LOG, "a")
|
|
|
|
output_b = os.read(master, 4096)
|
|
output = output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
while not ":)" in output:
|
|
output_b = os.read(master, 4096)
|
|
output += output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
|
|
os.write(master, b"SET " + bytes(comp_begin.encode()))
|
|
output_b = os.read(master, 4096)
|
|
output = output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
while not comp_begin in output:
|
|
output_b = os.read(master, 4096)
|
|
output += output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
|
|
time.sleep(0.01)
|
|
os.write(master, b"\t")
|
|
|
|
output_b = os.read(master, 4096)
|
|
output = output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
# fail fast if there is a bell character in the output,
|
|
# meaning no concise completion is found
|
|
if "\x07" in output:
|
|
print(f"{comp_word}: FAIL")
|
|
return
|
|
|
|
while not comp_word in output:
|
|
output_b = os.read(master, 4096)
|
|
output += output_b.decode()
|
|
debug_log_fd.write(repr(output_b) + "\n")
|
|
debug_log_fd.flush()
|
|
|
|
print(f"{comp_word}: OK")
|
|
finally:
|
|
os.close(master)
|
|
debug_log_fd.close()
|
|
|
|
|
|
client_compwords_positive = [
|
|
# system.functions
|
|
"concatAssumeInjective",
|
|
# system.table_engines
|
|
"ReplacingMergeTree",
|
|
# system.formats
|
|
"JSONEachRow",
|
|
# system.table_functions
|
|
"clusterAllReplicas",
|
|
# system.data_type_families
|
|
"SimpleAggregateFunction",
|
|
# 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",
|
|
# system.keywords
|
|
"CHANGEABLE_IN_READONLY",
|
|
# 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
|
|
]
|
|
|
|
local_compwords_positive = [
|
|
# system.functions
|
|
"concatAssumeInjective",
|
|
# system.table_engines
|
|
"ReplacingMergeTree",
|
|
# system.formats
|
|
"JSONEachRow",
|
|
# system.table_functions
|
|
"clusterAllReplicas",
|
|
# system.data_type_families
|
|
"SimpleAggregateFunction",
|
|
]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("# clickhouse-client")
|
|
clickhouse_client = os.environ["CLICKHOUSE_CLIENT"]
|
|
args = shlex.split(clickhouse_client)
|
|
args.append("--wait_for_suggestions_to_load")
|
|
args.append("--highlight=0")
|
|
[
|
|
run_with_timeout(
|
|
test_completion, [args[0], args, comp_word], COMPLETION_TIMEOUT_SECONDS
|
|
)
|
|
for comp_word in client_compwords_positive
|
|
]
|
|
|
|
print("# clickhouse-local")
|
|
clickhouse_local = os.environ["CLICKHOUSE_LOCAL"]
|
|
args = shlex.split(clickhouse_local)
|
|
args.append("--wait_for_suggestions_to_load")
|
|
args.append("--highlight=0")
|
|
[
|
|
run_with_timeout(
|
|
test_completion, [args[0], args, comp_word], COMPLETION_TIMEOUT_SECONDS
|
|
)
|
|
for comp_word in local_compwords_positive
|
|
]
|