diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index e9c1fb9ef3..627d62b475 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -155,7 +155,8 @@ ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_control.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_manage.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege.py -,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_multi_users.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_show.py +,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/user_privilege_all.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/fsync.py ,,y,system-test,./pytest.sh python3 ./test.py -f 0-others/multilevel.py ,,n,system-test,python3 ./test.py -f 0-others/compatibility.py diff --git a/tests/system-test/0-others/user_privilege_all.py b/tests/system-test/0-others/user_privilege_all.py index 2e796882c8..846b76317e 100644 --- a/tests/system-test/0-others/user_privilege_all.py +++ b/tests/system-test/0-others/user_privilege_all.py @@ -258,6 +258,66 @@ class TDTestCase: "insert into tb values(now, 20.0, 20);", "select * from tb;"], "res": [True, True, True, True, False, True, False] + }, + "test_db_all_childtable_none": { + "db_privilege": "all", + "stable_priviege": "none", + "child_table_ct1_privilege": "none", + "child_table_ct2_privilege": "none", + "table_tb_privilege": "none", + "sql": ["insert into ct2 using stb tags('ct2') values(now, 20.2, 20)", + "insert into ct1 using stb tags('ct1') values(now, 21.21, 21)", + "select * from stb;", + "select * from ct1;", + "select * from ct2;", + "insert into tb values(now, 22.22, 22);", + "select * from tb;"], + "res": [True, True, True, True, True, True, True] + }, + "test_db_none_stable_all_childtable_none": { + "db_privilege": "none", + "stable_priviege": "all", + "child_table_ct1_privilege": "none", + "child_table_ct2_privilege": "none", + "table_tb_privilege": "none", + "sql": ["insert into ct2 using stb tags('ct2') values(now, 23.23, 23)", + "insert into ct1 using stb tags('ct1') values(now, 24.24, 24)", + "select * from stb;", + "select * from ct1;", + "select * from ct2;", + "insert into tb values(now, 25.25, 25);", + "select * from tb;"], + "res": [True, True, True, True, True, False, False] + }, + "test_db_no_permission_childtable_all": { + "db_privilege": "none", + "stable_priviege": "none", + "child_table_ct1_privilege": "all", + "child_table_ct2_privilege": "none", + "table_tb_privilege": "none", + "sql": ["insert into ct2 using stb tags('ct2') values(now, 26.26, 26)", + "insert into ct1 using stb tags('ct1') values(now, 27.27, 27)", + "select * from stb;", + "select * from ct1;", + "select * from ct2;", + "insert into tb values(now, 28.28, 28);", + "select * from tb;"], + "res": [False, True, True, True, False, False, False] + }, + "test_db_none_stable_none_table_all": { + "db_privilege": "none", + "stable_priviege": "none", + "child_table_ct1_privilege": "none", + "child_table_ct2_privilege": "none", + "table_tb_privilege": "all", + "sql": ["insert into ct2 using stb tags('ct2') values(now, 26.26, 26)", + "insert into ct1 using stb tags('ct1') values(now, 27.27, 27)", + "select * from stb;", + "select * from ct1;", + "select * from ct2;", + "insert into tb values(now, 29.29, 29);", + "select * from tb;"], + "res": [False, False, False, False, False, True, True] } } @@ -361,7 +421,7 @@ class TDTestCase: data = res.fetch_all() tdLog.debug("query result: {}".format(data)) # check query results by cases - if case_name in ["test_db_no_permission_childtable_read", "test_db_write_childtable_read"] and self.cases[case_name]["sql"][index] == "select * from ct2;": + if case_name in ["test_db_no_permission_childtable_read", "test_db_write_childtable_read", "test_db_no_permission_childtable_all"] and self.cases[case_name]["sql"][index] == "select * from ct2;": if not self.cases[case_name]["res"][index]: if 0 == len(data): tdLog.debug("Query with sql {} successfully as expected with empty result".format(self.cases[case_name]["sql"][index])) diff --git a/tests/system-test/7-tmq/tmqSeekAndCommit.py b/tests/system-test/7-tmq/tmqSeekAndCommit.py new file mode 100644 index 0000000000..2d837ef7a4 --- /dev/null +++ b/tests/system-test/7-tmq/tmqSeekAndCommit.py @@ -0,0 +1,127 @@ +import sys +import re +import time +import threading +from taos.tmq import * +from util.log import * +from util.sql import * +from util.cases import * +from util.dnodes import * +from util.common import * +sys.path.append("./7-tmq") +from tmqCommon import * + + +class TDTestCase: + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor(), False) + + self.db_name = "tmq_db" + self.topic_name = "tmq_topic" + self.stable_name = "tmqst" + + + def prepareData(self): + # create database + tdSql.execute("create database if not exists %s;"%(self.db_name)) + tdSql.execute("use %s;"%(self.db_name)) + # create stable + tdSql.execute("create table %s.tmqst (ts timestamp, col0 int) tags(groupid int);"%(self.db_name)) + # create child tables + tdSql.execute("create table tmqct_1 using %s.%s tags(1);"%(self.db_name, self.stable_name)) + tdSql.execute("create table tmqct_2 using %s.%s tags(2);"%(self.db_name, self.stable_name)) + tdSql.execute("create table tmqct_3 using %s.%s tags(3);"%(self.db_name, self.stable_name)) + tdSql.execute("create table tmqct_4 using %s.%s tags(4);"%(self.db_name, self.stable_name)) + tdSql.execute("create table tmqct_5 using %s.%s tags(5);"%(self.db_name, self.stable_name)) + # insert into data + ctb_list = ["tmqct_1", "tmqct_2", "tmqct_3", "tmqct_4", "tmqct_5"] + for i in range(5): + sql = "insert into %s "%(ctb_list[i]) + sql_values = "values" + for j in range(1000 * i, 1000 * (i+1)): + sql_values += "(%s, %s)"%("now" if j == 0 else "now+%s"%(str(j) + "s"), str(j)) + sql += sql_values + ";" + tdLog.info(sql) + tdSql.execute(sql) + tdLog.info("Insert data into child tables successfully") + # create topic + tdSql.execute("create topic %s as select * from %s;"%(self.topic_name, self.stable_name)) + + def tmqSubscribe(self, inputDict): + consumer_dict = { + "group.id": inputDict['group_id'], + "client.id": "client", + "td.connect.user": "root", + "td.connect.pass": "taosdata", + "auto.commit.interval.ms": "1000", + "enable.auto.commit": inputDict['auto_commit'], + "auto.offset.reset": inputDict['offset_reset'], + "experimental.snapshot.enable": "false", + "msg.with.table.name": "false" + } + + consumer = Consumer(consumer_dict) + try: + consumer.subscribe([inputDict['topic_name']]) + except Exception as e: + tdLog.info("consumer.subscribe() fail ") + tdLog.info("%s"%(e)) + + tdLog.info("create consumer success!") + return consumer + + def test_seek_and_committed_position_with_autocommit(self): + try: + self.prepareData() + inputDict = { + "topic_name": self.topic_name, + "group_id": "1", + "auto_commit": "true", + "offset_reset": "earliest" + } + consumer = self.tmqSubscribe(inputDict) + while(True): + res = consumer.poll(1) + if not res: + break + err = res.error() + if err is not None: + raise err + val = res.value() + for block in val: + tdLog.info("block.fetchall() number: %s"%(len(block.fetchall()))) + + partitions = consumer.assignment() + position_partitions = consumer.position(partitions) + tdLog.info("position_partitions: %s"%(position_partitions)) + for i in range(len(position_partitions)): + tdLog.info("position_partitions[%s].offset: %s"%(i, position_partitions[i].offset)) + committed_partitions = consumer.committed(partitions) + tdLog.info("committed_partitions: %s"%(committed_partitions)) + for i in range(len(committed_partitions)): + tdLog.info("committed_partitions[%s].offset: %s"%(i, committed_partitions[i].offset)) + assert(len(position_partitions) == len(committed_partitions)) + for i in range(len(position_partitions)): + assert(position_partitions[i].offset == committed_partitions[i].offset) + # seek to the beginning of the topic + + except Exception as ex: + raise Exception("Failed to test seek and committed position with autocommit with error: {}".format(str(ex))) + finally: + consumer.unsubscribe() + consumer.close() + + def test_commit_by_offset(self): + pass + + def run(self): + self.test_seek_and_committed_position_with_autocommit() + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase())