2020-06-26 14:28:00 +00:00
|
|
|
import pymongo
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
from helpers.client import QueryRuntimeException
|
|
|
|
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
2021-07-27 15:54:13 +00:00
|
|
|
def started_cluster(request):
|
2020-06-26 14:28:00 +00:00
|
|
|
try:
|
2021-07-27 15:54:13 +00:00
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
|
|
node = cluster.add_instance('node',
|
|
|
|
main_configs=["configs_secure/config.d/ssl_conf.xml"],
|
|
|
|
with_mongo=True,
|
|
|
|
with_mongo_secure=request.param)
|
2020-06-26 14:28:00 +00:00
|
|
|
cluster.start()
|
|
|
|
yield cluster
|
|
|
|
finally:
|
|
|
|
cluster.shutdown()
|
|
|
|
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
def get_mongo_connection(started_cluster, secure=False):
|
2021-02-18 21:21:50 +00:00
|
|
|
connection_str = 'mongodb://root:clickhouse@localhost:{}'.format(started_cluster.mongo_port)
|
2021-07-27 15:54:13 +00:00
|
|
|
if secure:
|
|
|
|
connection_str += '/?tls=true&tlsAllowInvalidCertificates=true'
|
2020-06-26 14:28:00 +00:00
|
|
|
return pymongo.MongoClient(connection_str)
|
|
|
|
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
@pytest.mark.parametrize('started_cluster', [False], indirect=['started_cluster'])
|
2020-06-26 14:28:00 +00:00
|
|
|
def test_simple_select(started_cluster):
|
2021-02-18 21:21:50 +00:00
|
|
|
mongo_connection = get_mongo_connection(started_cluster)
|
2020-06-26 14:28:00 +00:00
|
|
|
db = mongo_connection['test']
|
|
|
|
db.add_user('root', 'clickhouse')
|
|
|
|
simple_mongo_table = db['simple_table']
|
|
|
|
data = []
|
|
|
|
for i in range(0, 100):
|
|
|
|
data.append({'key': i, 'data': hex(i * i)})
|
|
|
|
simple_mongo_table.insert_many(data)
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
node = started_cluster.instance['node']
|
2020-09-16 04:26:10 +00:00
|
|
|
node.query(
|
|
|
|
"CREATE TABLE simple_mongo_table(key UInt64, data String) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'root', 'clickhouse')")
|
2020-06-26 14:28:00 +00:00
|
|
|
|
|
|
|
assert node.query("SELECT COUNT() FROM simple_mongo_table") == '100\n'
|
|
|
|
assert node.query("SELECT sum(key) FROM simple_mongo_table") == str(sum(range(0, 100))) + '\n'
|
|
|
|
|
|
|
|
assert node.query("SELECT data from simple_mongo_table where key = 42") == hex(42 * 42) + '\n'
|
|
|
|
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
@pytest.mark.parametrize('started_cluster', [False], indirect=['started_cluster'])
|
2020-06-26 14:28:00 +00:00
|
|
|
def test_complex_data_type(started_cluster):
|
2021-02-18 21:21:50 +00:00
|
|
|
mongo_connection = get_mongo_connection(started_cluster)
|
2020-06-26 14:28:00 +00:00
|
|
|
db = mongo_connection['test']
|
|
|
|
db.add_user('root', 'clickhouse')
|
|
|
|
incomplete_mongo_table = db['complex_table']
|
|
|
|
data = []
|
|
|
|
for i in range(0, 100):
|
2020-09-16 04:26:10 +00:00
|
|
|
data.append({'key': i, 'data': hex(i * i), 'dict': {'a': i, 'b': str(i)}})
|
2020-06-26 14:28:00 +00:00
|
|
|
incomplete_mongo_table.insert_many(data)
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
node = started_cluster.instance['node']
|
2020-09-16 04:26:10 +00:00
|
|
|
node.query(
|
|
|
|
"CREATE TABLE incomplete_mongo_table(key UInt64, data String) ENGINE = MongoDB('mongo1:27017', 'test', 'complex_table', 'root', 'clickhouse')")
|
2020-06-26 14:28:00 +00:00
|
|
|
|
|
|
|
assert node.query("SELECT COUNT() FROM incomplete_mongo_table") == '100\n'
|
|
|
|
assert node.query("SELECT sum(key) FROM incomplete_mongo_table") == str(sum(range(0, 100))) + '\n'
|
|
|
|
|
|
|
|
assert node.query("SELECT data from incomplete_mongo_table where key = 42") == hex(42 * 42) + '\n'
|
|
|
|
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
@pytest.mark.parametrize('started_cluster', [False], indirect=['started_cluster'])
|
2020-06-26 14:28:00 +00:00
|
|
|
def test_incorrect_data_type(started_cluster):
|
2021-02-18 21:21:50 +00:00
|
|
|
mongo_connection = get_mongo_connection(started_cluster)
|
2020-06-26 14:28:00 +00:00
|
|
|
db = mongo_connection['test']
|
|
|
|
db.add_user('root', 'clickhouse')
|
|
|
|
strange_mongo_table = db['strange_table']
|
|
|
|
data = []
|
|
|
|
for i in range(0, 100):
|
|
|
|
data.append({'key': i, 'data': hex(i * i), 'aaaa': 'Hello'})
|
|
|
|
strange_mongo_table.insert_many(data)
|
|
|
|
|
2021-07-27 15:54:13 +00:00
|
|
|
node = started_cluster.instance['node']
|
2020-09-16 04:26:10 +00:00
|
|
|
node.query(
|
|
|
|
"CREATE TABLE strange_mongo_table(key String, data String) ENGINE = MongoDB('mongo1:27017', 'test', 'strange_table', 'root', 'clickhouse')")
|
2020-06-26 14:28:00 +00:00
|
|
|
|
|
|
|
with pytest.raises(QueryRuntimeException):
|
|
|
|
node.query("SELECT COUNT() FROM strange_mongo_table")
|
|
|
|
|
|
|
|
with pytest.raises(QueryRuntimeException):
|
|
|
|
node.query("SELECT uniq(key) FROM strange_mongo_table")
|
|
|
|
|
2020-09-16 04:26:10 +00:00
|
|
|
node.query(
|
|
|
|
"CREATE TABLE strange_mongo_table2(key UInt64, data String, bbbb String) ENGINE = MongoDB('mongo1:27017', 'test', 'strange_table', 'root', 'clickhouse')")
|
2020-06-26 14:28:00 +00:00
|
|
|
|
|
|
|
with pytest.raises(QueryRuntimeException):
|
|
|
|
node.query("SELECT bbbb FROM strange_mongo_table2")
|
2021-07-27 15:54:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('started_cluster', [True], indirect=['started_cluster'])
|
|
|
|
def test_secure_connection(started_cluster):
|
|
|
|
mongo_connection = get_mongo_connection(secure=True)
|
|
|
|
db = mongo_connection['test']
|
|
|
|
db.add_user('root', 'clickhouse')
|
|
|
|
simple_mongo_table = db['simple_table']
|
|
|
|
data = []
|
|
|
|
for i in range(0, 100):
|
|
|
|
data.append({'key': i, 'data': hex(i * i)})
|
|
|
|
simple_mongo_table.insert_many(data)
|
|
|
|
|
|
|
|
node = started_cluster.instance['node']
|
|
|
|
node.query(
|
|
|
|
"CREATE TABLE simple_mongo_table(key UInt64, data String) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'root', 'clickhouse', 'ssl=true')")
|
|
|
|
|
|
|
|
assert node.query("SELECT COUNT() FROM simple_mongo_table") == '100\n'
|
|
|
|
assert node.query("SELECT sum(key) FROM simple_mongo_table") == str(sum(range(0, 100))) + '\n'
|
|
|
|
|
|
|
|
assert node.query("SELECT data from simple_mongo_table where key = 42") == hex(42 * 42) + '\n'
|