mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 03:22:14 +00:00
b75963d370
This PR formats all the `*.py` files found under the `tests/integration` folder. It also reorders the imports and cleans up a bunch of unused imports. The formatting also takes care of other things like wrapping lines and fixing spaces and indents such that the tests look more readable.
125 lines
4.0 KiB
Python
125 lines
4.0 KiB
Python
import os
|
|
|
|
import pytest
|
|
from helpers.cluster import ClickHouseCluster
|
|
from helpers.test_tools import TSV
|
|
|
|
from generate_dictionaries import generate_structure, generate_dictionaries, DictionaryTestTable
|
|
|
|
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
|
|
cluster = None
|
|
instance = None
|
|
test_table = None
|
|
|
|
|
|
def setup_module(module):
|
|
global cluster
|
|
global instance
|
|
global test_table
|
|
|
|
structure = generate_structure()
|
|
dictionary_files = generate_dictionaries(os.path.join(SCRIPT_DIR, 'configs/dictionaries'), structure)
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
instance = cluster.add_instance('instance', main_configs=dictionary_files + ['configs/enable_dictionaries.xml'])
|
|
test_table = DictionaryTestTable(os.path.join(SCRIPT_DIR, 'configs/dictionaries/source.tsv'))
|
|
|
|
|
|
@pytest.fixture(scope="module", autouse=True)
|
|
def started_cluster():
|
|
try:
|
|
cluster.start()
|
|
test_table.create_clickhouse_source(instance)
|
|
for line in TSV(instance.query('select name from system.dictionaries')).lines:
|
|
print line,
|
|
|
|
yield cluster
|
|
|
|
finally:
|
|
cluster.shutdown()
|
|
|
|
|
|
@pytest.fixture(params=[
|
|
# name, keys, use_parent
|
|
('clickhouse_hashed', ('id',), True),
|
|
('clickhouse_flat', ('id',), True),
|
|
('clickhouse_complex_integers_key_hashed', ('key0', 'key1'), False),
|
|
('clickhouse_complex_mixed_key_hashed', ('key0_str', 'key1'), False),
|
|
('clickhouse_range_hashed', ('id', 'StartDate', 'EndDate'), False),
|
|
],
|
|
ids=['clickhouse_hashed', 'clickhouse_flat',
|
|
'clickhouse_complex_integers_key_hashed',
|
|
'clickhouse_complex_mixed_key_hashed',
|
|
'clickhouse_range_hashed']
|
|
)
|
|
def dictionary_structure(started_cluster, request):
|
|
return request.param
|
|
|
|
|
|
def test_select_all(dictionary_structure):
|
|
name, keys, use_parent = dictionary_structure
|
|
query = instance.query
|
|
|
|
structure = test_table.get_structure_for_keys(keys, use_parent)
|
|
query('''
|
|
DROP TABLE IF EXISTS test.{0}
|
|
'''.format(name))
|
|
|
|
create_query = "CREATE TABLE test.{0} ({1}) engine = Dictionary({0})".format(name, structure)
|
|
TSV(query(create_query))
|
|
|
|
result = TSV(query('select * from test.{0}'.format(name)))
|
|
|
|
diff = test_table.compare_by_keys(keys, result.lines, use_parent, add_not_found_rows=True)
|
|
print test_table.process_diff(diff)
|
|
assert not diff
|
|
|
|
|
|
@pytest.fixture(params=[
|
|
# name, keys, use_parent
|
|
('clickhouse_cache', ('id',), True),
|
|
('clickhouse_complex_integers_key_cache', ('key0', 'key1'), False),
|
|
('clickhouse_complex_mixed_key_cache', ('key0_str', 'key1'), False)
|
|
],
|
|
ids=['clickhouse_cache', 'clickhouse_complex_integers_key_cache', 'clickhouse_complex_mixed_key_cache']
|
|
)
|
|
def cached_dictionary_structure(started_cluster, request):
|
|
return request.param
|
|
|
|
|
|
def test_select_all_from_cached(cached_dictionary_structure):
|
|
name, keys, use_parent = cached_dictionary_structure
|
|
query = instance.query
|
|
|
|
structure = test_table.get_structure_for_keys(keys, use_parent)
|
|
query('''
|
|
DROP TABLE IF EXISTS test.{0}
|
|
'''.format(name))
|
|
|
|
create_query = "CREATE TABLE test.{0} ({1}) engine = Dictionary({0})".format(name, structure)
|
|
TSV(query(create_query))
|
|
|
|
for i in range(4):
|
|
result = TSV(query('select * from test.{0}'.format(name)))
|
|
diff = test_table.compare_by_keys(keys, result.lines, use_parent, add_not_found_rows=False)
|
|
print test_table.process_diff(diff)
|
|
assert not diff
|
|
|
|
key = []
|
|
for key_name in keys:
|
|
if key_name.endswith('str'):
|
|
key.append("'" + str(i) + "'")
|
|
else:
|
|
key.append(str(i))
|
|
if len(key) == 1:
|
|
key = 'toUInt64(' + str(i) + ')'
|
|
else:
|
|
key = str('(' + ','.join(key) + ')')
|
|
query("select dictGetUInt8('{0}', 'UInt8_', {1})".format(name, key))
|
|
|
|
result = TSV(query('select * from test.{0}'.format(name)))
|
|
diff = test_table.compare_by_keys(keys, result.lines, use_parent, add_not_found_rows=True)
|
|
print test_table.process_diff(diff)
|
|
assert not diff
|