mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-18 05:32:52 +00:00
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
import logging
|
|
import os
|
|
import time
|
|
|
|
|
|
# Starts simple HTTP servers written in Python.
|
|
# Parameters:
|
|
# `script_dir` contains a path to the directory containing server scripts.
|
|
# `mocks` is a list of tuples (server_script, container_name, port), where
|
|
# `server_script` is a name of a python file inside `script_dir`,
|
|
# `container_name` is usually "resolver" (see docker/test/integration/resolver)
|
|
def start_mock_servers(cluster, script_dir, mocks, timeout=100):
|
|
server_names = [mock[0] for mock in mocks]
|
|
server_names_with_desc = (
|
|
f"{'server' if len(server_names) == 1 else 'servers'} {','.join(server_names)}"
|
|
)
|
|
logging.info(f"Starting mock {server_names_with_desc}")
|
|
|
|
start_time = time.time()
|
|
mocks_to_check = {}
|
|
|
|
for server_name, container, port in mocks:
|
|
filepath = os.path.join(script_dir, server_name)
|
|
container_id = cluster.get_container_id(container)
|
|
mocks_to_check[server_name] = (container_id, port)
|
|
|
|
cluster.copy_file_to_container(
|
|
container_id,
|
|
filepath,
|
|
server_name,
|
|
)
|
|
|
|
cluster.exec_in_container(
|
|
container_id,
|
|
["python", server_name, str(port)],
|
|
detach=True,
|
|
)
|
|
|
|
# Wait for the server to start.
|
|
attempt = 1
|
|
while mocks_to_check:
|
|
for server_name in list(mocks_to_check.keys()):
|
|
container_id, port = mocks_to_check[server_name]
|
|
|
|
ping_response = cluster.exec_in_container(
|
|
container_id,
|
|
["curl", "-s", f"http://localhost:{port}/"],
|
|
nothrow=True,
|
|
)
|
|
|
|
if ping_response == "OK":
|
|
logging.debug(
|
|
f"{server_name} answered {ping_response} on attempt {attempt}"
|
|
)
|
|
del mocks_to_check[server_name]
|
|
elif time.time() - start_time > timeout:
|
|
assert (
|
|
ping_response == "OK"
|
|
), 'Expected "OK", but got "{}" from {}'.format(
|
|
ping_response, server_name
|
|
)
|
|
|
|
if mocks_to_check:
|
|
time.sleep(1)
|
|
attempt += 1
|
|
|
|
logging.info(f"Mock {server_names_with_desc} started")
|