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 USER john") instance.query("CREATE ROLE rx") instance.query("CREATE ROLE ry") yield cluster finally: cluster.shutdown() @pytest.fixture(autouse=True) def reset_users_and_roles(): instance.query("CREATE USER OR REPLACE john") yield def test_set_default_roles(): assert instance.query("SHOW CURRENT ROLES", user="john") == "" instance.query("GRANT rx, ry TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV( [["rx", 0, 1], ["ry", 0, 1]] ) instance.query("SET DEFAULT ROLE NONE TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == "" instance.query("SET DEFAULT ROLE rx TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV([["rx", 0, 1]]) instance.query("SET DEFAULT ROLE ry TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV([["ry", 0, 1]]) instance.query("SET DEFAULT ROLE ALL TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV( [["rx", 0, 1], ["ry", 0, 1]] ) instance.query("SET DEFAULT ROLE ALL EXCEPT rx TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV([["ry", 0, 1]]) def test_alter_user(): assert instance.query("SHOW CURRENT ROLES", user="john") == "" instance.query("GRANT rx, ry TO john") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV( [["rx", 0, 1], ["ry", 0, 1]] ) instance.query("ALTER USER john DEFAULT ROLE NONE") assert instance.query("SHOW CURRENT ROLES", user="john") == "" instance.query("ALTER USER john DEFAULT ROLE rx") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV([["rx", 0, 1]]) instance.query("ALTER USER john DEFAULT ROLE ALL") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV( [["rx", 0, 1], ["ry", 0, 1]] ) instance.query("ALTER USER john DEFAULT ROLE ALL EXCEPT rx") assert instance.query("SHOW CURRENT ROLES", user="john") == TSV([["ry", 0, 1]]) def test_wrong_set_default_role(): assert "There is no user `rx`" in instance.query_and_get_error( "SET DEFAULT ROLE NONE TO rx" ) assert "There is no user `ry`" in instance.query_and_get_error( "SET DEFAULT ROLE rx TO ry" ) assert "There is no role `john`" in instance.query_and_get_error( "SET DEFAULT ROLE john TO john" ) assert "There is no role `john`" in instance.query_and_get_error( "ALTER USER john DEFAULT ROLE john" ) assert "There is no role `john`" in instance.query_and_get_error( "ALTER USER john DEFAULT ROLE ALL EXCEPT john" )