2020-05-14 14:03:06 +00:00
|
|
|
import pytest
|
|
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
|
|
instance = cluster.add_instance("instance")
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(scope="module", autouse=True)
|
|
|
|
def started_cluster():
|
|
|
|
try:
|
|
|
|
cluster.start()
|
2020-09-16 04:26:10 +00:00
|
|
|
|
2020-05-14 14:03:06 +00:00
|
|
|
instance.query("CREATE USER mira")
|
|
|
|
instance.query("CREATE TABLE test_table(x Int32, y Int32) ENGINE=Log")
|
|
|
|
instance.query("INSERT INTO test_table VALUES (5,6)")
|
|
|
|
|
|
|
|
yield cluster
|
|
|
|
|
|
|
|
finally:
|
|
|
|
cluster.shutdown()
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
def clear_after_test():
|
|
|
|
try:
|
|
|
|
yield
|
|
|
|
finally:
|
|
|
|
instance.query("CREATE USER OR REPLACE mira")
|
|
|
|
instance.query("DROP DICTIONARY IF EXISTS test_dict")
|
|
|
|
|
|
|
|
|
|
|
|
create_query = """
|
|
|
|
CREATE DICTIONARY test_dict(x Int32, y Int32) PRIMARY KEY x
|
|
|
|
LAYOUT(FLAT())
|
|
|
|
SOURCE(CLICKHOUSE(HOST 'localhost' PORT 9000 USER 'default' TABLE 'test_table' DB 'default'))
|
2023-04-12 22:32:19 +00:00
|
|
|
LIFETIME(0)
|
2020-05-14 14:03:06 +00:00
|
|
|
"""
|
|
|
|
|
|
|
|
drop_query = "DROP DICTIONARY test_dict"
|
|
|
|
|
|
|
|
|
|
|
|
def test_create():
|
|
|
|
assert instance.query("SHOW GRANTS FOR mira") == ""
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
create_query, user="mira"
|
|
|
|
)
|
|
|
|
|
|
|
|
instance.query("GRANT CREATE DICTIONARY ON *.* TO mira")
|
|
|
|
instance.query(create_query, user="mira")
|
|
|
|
instance.query(drop_query)
|
|
|
|
|
|
|
|
instance.query("REVOKE CREATE DICTIONARY ON *.* FROM mira")
|
|
|
|
assert instance.query("SHOW GRANTS FOR mira") == ""
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
create_query, user="mira"
|
|
|
|
)
|
|
|
|
|
|
|
|
instance.query("GRANT CREATE DICTIONARY ON default.* TO mira")
|
|
|
|
instance.query(create_query, user="mira")
|
|
|
|
instance.query(drop_query)
|
|
|
|
|
|
|
|
instance.query("REVOKE CREATE DICTIONARY ON default.* FROM mira")
|
|
|
|
assert instance.query("SHOW GRANTS FOR mira") == ""
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
create_query, user="mira"
|
|
|
|
)
|
|
|
|
|
|
|
|
instance.query("GRANT CREATE DICTIONARY ON default.test_dict TO mira")
|
|
|
|
instance.query(create_query, user="mira")
|
|
|
|
|
|
|
|
|
|
|
|
def test_drop():
|
|
|
|
instance.query(create_query)
|
|
|
|
|
|
|
|
assert instance.query("SHOW GRANTS FOR mira") == ""
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
drop_query, user="mira"
|
|
|
|
)
|
|
|
|
|
|
|
|
instance.query("GRANT DROP DICTIONARY ON *.* TO mira")
|
|
|
|
instance.query(drop_query, user="mira")
|
|
|
|
instance.query(create_query)
|
|
|
|
|
|
|
|
|
|
|
|
def test_dictget():
|
|
|
|
instance.query(create_query)
|
|
|
|
|
|
|
|
dictget_query = "SELECT dictGet('default.test_dict', 'y', toUInt64(5))"
|
|
|
|
instance.query(dictget_query) == "6\n"
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
dictget_query, user="mira"
|
|
|
|
)
|
|
|
|
|
|
|
|
instance.query("GRANT dictGet ON default.test_dict TO mira")
|
|
|
|
instance.query(dictget_query, user="mira") == "6\n"
|
|
|
|
|
|
|
|
dictget_query = "SELECT dictGet('default.test_dict', 'y', toUInt64(1))"
|
|
|
|
instance.query(dictget_query) == "0\n"
|
|
|
|
instance.query(dictget_query, user="mira") == "0\n"
|
|
|
|
|
|
|
|
instance.query("REVOKE dictGet ON *.* FROM mira")
|
|
|
|
assert "Not enough privileges" in instance.query_and_get_error(
|
|
|
|
dictget_query, user="mira"
|
|
|
|
)
|