2017-08-25 16:35:02 +00:00
|
|
|
import os
|
|
|
|
import os.path as p
|
|
|
|
import sys
|
|
|
|
import time
|
|
|
|
import datetime
|
|
|
|
import pytest
|
|
|
|
from contextlib import contextmanager
|
|
|
|
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
from helpers.test_tools import TSV
|
2018-01-15 14:13:19 +00:00
|
|
|
from helpers.client import QueryRuntimeException
|
2017-08-25 16:35:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
|
|
def started_cluster():
|
|
|
|
global cluster
|
|
|
|
global instance
|
|
|
|
try:
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
|
|
cluster.add_instance('ch1', config_dir="configs")
|
|
|
|
cluster.start()
|
|
|
|
|
|
|
|
instance = cluster.instances['ch1']
|
|
|
|
instance.query('CREATE DATABASE dictionaries ENGINE = Dictionary')
|
|
|
|
instance.query('CREATE TABLE dictionary_source (id UInt64, value UInt8) ENGINE = Memory')
|
|
|
|
#print instance.query('SELECT * FROM system.dictionaries FORMAT Vertical')
|
2018-01-15 14:13:19 +00:00
|
|
|
print "Started ", instance.ip_address
|
2017-08-25 16:35:02 +00:00
|
|
|
|
|
|
|
yield cluster
|
|
|
|
|
|
|
|
finally:
|
2018-01-15 14:13:19 +00:00
|
|
|
pass
|
2017-08-25 16:35:02 +00:00
|
|
|
cluster.shutdown()
|
|
|
|
|
|
|
|
|
|
|
|
def test_SYSTEM_RELOAD_DICTIONARY(started_cluster):
|
|
|
|
instance = cluster.instances['ch1']
|
|
|
|
|
|
|
|
instance.query("SYSTEM RELOAD DICTIONARIES")
|
|
|
|
assert TSV(instance.query("SELECT dictHas('clickhouse_flat', toUInt64(0)), dictHas('clickhouse_flat', toUInt64(1))")) == TSV("0\t0\n")
|
|
|
|
|
|
|
|
instance.query("INSERT INTO dictionary_source VALUES (0, 0)")
|
|
|
|
assert TSV(instance.query("SELECT dictGetUInt8('clickhouse_cache', 'value', toUInt64(0)), dictHas('clickhouse_cache', toUInt64(1))")) == TSV("0\t0\n")
|
|
|
|
instance.query("INSERT INTO dictionary_source VALUES (1, 1)")
|
|
|
|
assert TSV(instance.query("SELECT dictGetUInt8('clickhouse_cache', 'value', toUInt64(0)), dictHas('clickhouse_cache', toUInt64(1))")) == TSV("0\t0\n")
|
|
|
|
|
|
|
|
instance.query("SYSTEM RELOAD DICTIONARY clickhouse_cache")
|
|
|
|
assert TSV(instance.query("SELECT dictGetUInt8('clickhouse_cache', 'value', toUInt64(0)), dictGetUInt8('clickhouse_cache', 'value', toUInt64(1))")) == TSV("0\t1\n")
|
|
|
|
assert TSV(instance.query("SELECT dictHas('clickhouse_flat', toUInt64(0)), dictHas('clickhouse_flat', toUInt64(1))")) == TSV("0\t0\n")
|
|
|
|
|
|
|
|
instance.query("SYSTEM RELOAD DICTIONARIES")
|
|
|
|
assert TSV(instance.query("SELECT dictGetUInt8('clickhouse_cache', 'value', toUInt64(0)), dictGetUInt8('clickhouse_cache', 'value', toUInt64(1))")) == TSV("0\t1\n")
|
|
|
|
assert TSV(instance.query("SELECT dictGetUInt8('clickhouse_flat', 'value', toUInt64(0)), dictGetUInt8('clickhouse_flat', 'value', toUInt64(1))")) == TSV("0\t1\n")
|
|
|
|
|
|
|
|
|
|
|
|
def test_DROP_DNS_CACHE(started_cluster):
|
|
|
|
instance = cluster.instances['ch1']
|
|
|
|
|
2018-01-15 14:13:19 +00:00
|
|
|
instance.exec_in_container(['bash', '-c', 'echo 127.255.255.255 lost_host > /etc/hosts'], privileged=True, user='root')
|
2017-08-25 16:35:02 +00:00
|
|
|
|
2018-01-15 14:13:19 +00:00
|
|
|
with pytest.raises(QueryRuntimeException):
|
|
|
|
instance.query("SELECT * FROM remote('lost_host', 'system', 'one')")
|
|
|
|
|
|
|
|
instance.query("CREATE TABLE distributed_lost_host (dummy UInt8) ENGINE = Distributed(lost_host_cluster, 'system', 'one')")
|
|
|
|
with pytest.raises(QueryRuntimeException):
|
|
|
|
instance.query("SELECT * FROM distributed_lost_host")
|
|
|
|
|
|
|
|
instance.exec_in_container(['bash', '-c', 'echo 127.0.0.1 lost_host > /etc/hosts'], privileged=True, user='root')
|
2017-08-25 16:35:02 +00:00
|
|
|
instance.query("SYSTEM DROP DNS CACHE")
|
|
|
|
|
2018-01-15 14:13:19 +00:00
|
|
|
instance.query("SELECT * FROM remote('lost_host', 'system', 'one')")
|
|
|
|
instance.query("SELECT * FROM distributed_lost_host")
|
|
|
|
assert TSV(instance.query("SELECT DISTINCT host_name, host_address FROM system.clusters")) == TSV("lost_host\t127.0.0.1\n")
|
2017-08-25 16:35:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
with contextmanager(started_cluster)() as cluster:
|
|
|
|
for name, instance in cluster.instances.items():
|
|
|
|
print name, instance.ip_address
|
|
|
|
raw_input("Cluster created, press any key to destroy...")
|