import pytest from helpers.cluster import ClickHouseCluster from helpers.mock_servers import start_mock_servers import os import time METADATA_SERVER_HOSTNAME = "resolver" METADATA_SERVER_PORT = 8080 cluster = ClickHouseCluster(__file__) node_imds = cluster.add_instance( "node_imds", with_minio=True, main_configs=["configs/imds.xml"], env_variables={ "AWS_EC2_METADATA_SERVICE_ENDPOINT": f"http://{METADATA_SERVER_HOSTNAME}:{METADATA_SERVER_PORT}", }, stay_alive=True, ) node_config_value = cluster.add_instance( "node_config_value", main_configs=["configs/config_value.xml"], ) node_file_value = cluster.add_instance( "node_file_value", main_configs=["configs/file_value.xml"], stay_alive=True, ) node_missing_value = cluster.add_instance( "node_missing_value", main_configs=["configs/missing_value.xml"], ) def start_metadata_server(): script_dir = os.path.join(os.path.dirname(__file__), "metadata_servers") start_mock_servers( cluster, script_dir, [ ( "simple_server.py", METADATA_SERVER_HOSTNAME, METADATA_SERVER_PORT, ) ], ) @pytest.fixture(scope="module", autouse=True) def start_cluster(): try: cluster.start() start_metadata_server() yield finally: cluster.shutdown() def test_placement_info_from_imds(): node_imds.stop_clickhouse(kill=True) node_imds.start_clickhouse() node_imds.query("SYSTEM FLUSH LOGS") assert node_imds.contains_in_log( "CloudPlacementInfo: Loaded info: availability_zone: ci-test-1a" ) def test_placement_info_from_config(): node_config_value.query("SYSTEM FLUSH LOGS") assert node_config_value.contains_in_log( "CloudPlacementInfo: Loaded info: availability_zone: ci-test-1b" ) def test_placement_info_from_file(): node_file_value.exec_in_container( ["bash", "-c", "echo ci-test-1c > /tmp/node-zone"] ) node_file_value.stop_clickhouse(kill=True) node_file_value.start_clickhouse() node_file_value.query("SYSTEM FLUSH LOGS") assert node_file_value.contains_in_log( "CloudPlacementInfo: Loaded info: availability_zone: ci-test-1c" ) def test_placement_info_missing_data(): node_missing_value.query("SYSTEM FLUSH LOGS") assert node_missing_value.contains_in_log( "CloudPlacementInfo: Availability zone info not found" )