import pytest from helpers.cluster import ClickHouseCluster from helpers.test_tools import TSV cluster = ClickHouseCluster(__file__) instance = cluster.add_instance("instance") @pytest.fixture(scope="module", autouse=True) def started_cluster(): try: cluster.start() instance.query( "CREATE TABLE table1(x UInt32) ENGINE = MergeTree ORDER BY tuple()" ) instance.query( "CREATE TABLE table2(x UInt32) ENGINE = MergeTree ORDER BY tuple()" ) instance.query("INSERT INTO table1 VALUES (1)") instance.query("INSERT INTO table2 VALUES (2)") yield cluster finally: cluster.shutdown() @pytest.fixture(autouse=True) def cleanup_after_test(): try: yield finally: instance.query("DROP USER IF EXISTS A") def test_merge(): select_query = "SELECT * FROM merge('default', 'table[0-9]+') ORDER BY x" assert instance.query(select_query) == "1\n2\n" instance.query("CREATE USER A") assert ( "it's necessary to have grant CREATE TEMPORARY TABLE ON *.*" in instance.query_and_get_error(select_query, user="A") ) instance.query("GRANT CREATE TEMPORARY TABLE ON *.* TO A") assert "no tables in database matches" in instance.query_and_get_error( select_query, user="A" ) instance.query("GRANT SELECT ON default.table1 TO A") assert instance.query(select_query, user="A") == "1\n" instance.query("GRANT SELECT ON default.* TO A") assert instance.query(select_query, user="A") == "1\n2\n" instance.query("REVOKE SELECT ON default.table1 FROM A") assert instance.query(select_query, user="A") == "2\n" instance.query("REVOKE ALL ON default.* FROM A") instance.query("GRANT SELECT ON default.table1 TO A") instance.query("GRANT INSERT ON default.table2 TO A") assert ( "it's necessary to have grant SELECT ON default.table2" in instance.query_and_get_error(select_query, user="A") )