From 77b890e263b85585228d7508a3f8c199a8ad83e8 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 19:59:35 +0800 Subject: [PATCH 01/19] add fsync case --- tests/system-test/0-others/fsync.py | 287 ++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 tests/system-test/0-others/fsync.py diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py new file mode 100644 index 0000000000..8ee724175b --- /dev/null +++ b/tests/system-test/0-others/fsync.py @@ -0,0 +1,287 @@ +import datetime + +from util.log import * +from util.sql import * +from util.cases import * +from util.dnodes import * + +PRIMARY_COL = "ts" + +INT_COL = "c1" +BINT_COL = "c2" +SINT_COL = "c3" +TINT_COL = "c4" +FLOAT_COL = "c5" +DOUBLE_COL = "c6" +BOOL_COL = "c7" + +BINARY_COL = "c8" +NCHAR_COL = "c9" +TS_COL = "c10" + +NUM_COL = [ INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, ] +CHAR_COL = [ BINARY_COL, NCHAR_COL, ] +BOOLEAN_COL = [ BOOL_COL, ] +TS_TYPE_COL = [ TS_COL, ] + +class TDTestCase: + + def init(self, conn, logSql): + tdLog.debug(f"start to excute {__file__}") + tdSql.init(conn.cursor()) + + def __kill_process(self, process_name): + killCmd = f"ps -ef|grep -w {process_name}| grep -v grep | awk '{{print $2}}' | xargs kill -TERM > /dev/null 2>&1" + + psCmd = f"ps -ef|grep -w {process_name}| grep -v grep | awk '{{print $2}}'" + while processID := subprocess.check_output(psCmd, shell=True): + os.system(killCmd) + time.sleep(1) + + def test_fsync_current(self): + wal_index = 0 + fsync_index = 0 + tdSql.query("show databases") + for i in range(tdSql.queryCols): + if tdSql.cursor.description[i] == "wal": + wal_index = i + if tdSql.cursor.description[i] == "fsync": + fsync_index = i + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 wal 1") + tdSql.query("show datsbases") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, wal_index, 1) + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 wal 2") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 fsync 0") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 0) + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 fsync 3000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 fsync 180000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 180000) + + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 wal 1 fsync 3000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 180000) + tdSql.checkData(i, wal_index, 1) + + tdSql.execute("drop database if exists db1") + tdSql.execute("create database db1 wal 2 fsync 3000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("alter database db1 wal 1") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + tdSql.checkData(i, wal_index, 1) + + tdSql.execute("alter database db1 wal 2") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("alter database db1 fsync 0") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 0) + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("alter database db1 fsync 3000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("alter database db1 fsync 18000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 18000) + tdSql.checkData(i, wal_index, 2) + + tdSql.execute("alter database db1 wal 1 fsync 3000") + for i in range(tdSql.queryRows): + if tdSql.queryResult[i][0] == "db1": + tdSql.checkData(i, fsync_index, 3000) + tdSql.checkData(i, wal_index, 1) + + @property + def fsync_create_err(self): + return [ + "create database db1 wal 0", + "create database db1 wal 3", + "create database db1 wal null", + "create database db1 wal true", + "create database db1 wal 1.1", + "create database db1 fsync -1", + "create database db1 fsync 180001", + "create database db1 fsync 10.111", + "create database db1 fsync true", + ] + + @property + def fsync_alter_err(self): + return [ + "alter database db1 wal 0", + "alter database db1 wal 3", + "alter database db1 wal null", + "alter database db1 wal true", + "alter database db1 wal 1.1", + "alter database db1 fsync -1", + "alter database db1 fsync 180001", + "alter database db1 fsync 10.111", + "alter database db1 fsync true", + ] + + def test_fsync_err(self): + for sql in self.fsync_create_err: + tdSql.error(sql) + tdSql.query("create database db1") + for sql in self.fsync_alter_err: + tdSql.error(sql) + tdSql.query("drop database db1") + + def all_test(self): + self.test_fsync_err() + self.test_fsync_current() + + # def __create_tb(self): + + # tdLog.printNoPrefix("==========step1:create table") + # create_stb_sql = f'''create table stb1( + # ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint, + # {FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool, + # {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp + # ) tags (t1 int) + # ''' + # create_ntb_sql = f'''create table t1( + # ts timestamp, {INT_COL} int, {BINT_COL} bigint, {SINT_COL} smallint, {TINT_COL} tinyint, + # {FLOAT_COL} float, {DOUBLE_COL} double, {BOOL_COL} bool, + # {BINARY_COL} binary(16), {NCHAR_COL} nchar(32), {TS_COL} timestamp + # ) + # ''' + # tdSql.execute(create_stb_sql) + # tdSql.execute(create_ntb_sql) + + # for i in range(4): + # tdSql.execute(f'create table ct{i+1} using stb1 tags ( {i+1} )') + # { i % 32767 }, { i % 127}, { i * 1.11111 }, { i * 1000.1111 }, { i % 2} + + # def __insert_data(self, rows): + # now_time = int(datetime.datetime.timestamp(datetime.datetime.now()) * 1000) + # for i in range(rows): + # tdSql.execute( + # f"insert into ct1 values ( { now_time - i * 1000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )" + # ) + # tdSql.execute( + # f"insert into ct4 values ( { now_time - i * 7776000000 }, {i}, {11111 * i}, {111 * i % 32767 }, {11 * i % 127}, {1.11*i}, {1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )" + # ) + # tdSql.execute( + # f"insert into ct2 values ( { now_time - i * 7776000000 }, {-i}, {-11111 * i}, {-111 * i % 32767 }, {-11 * i % 127}, {-1.11*i}, {-1100.0011*i}, {i%2}, 'binary{i}', 'nchar_测试_{i}', { now_time + 1 * i } )" + # ) + # tdSql.execute( + # f'''insert into ct1 values + # ( { now_time - rows * 5 }, 0, 0, 0, 0, 0, 0, 0, 'binary0', 'nchar_测试_0', { now_time + 8 } ) + # ( { now_time + 10000 }, { rows }, -99999, -999, -99, -9.99, -99.99, 1, 'binary9', 'nchar_测试_9', { now_time + 9 } ) + # ''' + # ) + + # tdSql.execute( + # f'''insert into ct4 values + # ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( + # { now_time + 5184000000}, {pow(2,31)-pow(2,15)}, {pow(2,63)-pow(2,30)}, 32767, 127, + # { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000} + # ) + # ( + # { now_time + 2592000000 }, {pow(2,31)-pow(2,16)}, {pow(2,63)-pow(2,31)}, 32766, 126, + # { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000} + # ) + # ''' + # ) + + # tdSql.execute( + # f'''insert into ct2 values + # ( { now_time - rows * 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time - rows * 3888000000 + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time + 7776000000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( + # { now_time + 5184000000 }, { -1 * pow(2,31) + pow(2,15) }, { -1 * pow(2,63) + pow(2,30) }, -32766, -126, + # { -1 * 3.2 * pow(10,38) }, { -1.2 * pow(10,308) }, { rows % 2 }, "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 } + # ) + # ( + # { now_time + 2592000000 }, { -1 * pow(2,31) + pow(2,16) }, { -1 * pow(2,63) + pow(2,31) }, -32767, -127, + # { - 3.3 * pow(10,38) }, { -1.3 * pow(10,308) }, { (rows-1) % 2 }, "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 } + # ) + # ''' + # ) + + # for i in range(rows): + # insert_data = f'''insert into t1 values + # ( { now_time - i * 3600000 }, {i}, {i * 11111}, { i % 32767 }, { i % 127}, { i * 1.11111 }, { i * 1000.1111 }, { i % 2}, + # "binary_{i}", "nchar_测试_{i}", { now_time - 1000 * i } ) + # ''' + # tdSql.execute(insert_data) + # tdSql.execute( + # f'''insert into t1 values + # ( { now_time + 10800000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time - (( rows // 2 ) * 60 + 30) * 60000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time - rows * 3600000 }, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL ) + # ( { now_time + 7200000 }, { pow(2,31) - pow(2,15) }, { pow(2,63) - pow(2,30) }, 32767, 127, + # { 3.3 * pow(10,38) }, { 1.3 * pow(10,308) }, { rows % 2 }, + # "binary_limit-1", "nchar_测试_limit-1", { now_time - 86400000 } + # ) + # ( + # { now_time + 3600000 } , { pow(2,31) - pow(2,16) }, { pow(2,63) - pow(2,31) }, 32766, 126, + # { 3.2 * pow(10,38) }, { 1.2 * pow(10,308) }, { (rows-1) % 2 }, + # "binary_limit-2", "nchar_测试_limit-2", { now_time - 172800000 } + # ) + # ''' + # ) + + def run(self): + tdSql.prepare() + + self.all_test() + + tdDnodes.stop(1) + tdDnodes.start(1) + + # tdSql.execute("use db") + + tdLog.printNoPrefix("==========step4:after wal, all check again ") + self.all_test() + + def stop(self): + tdSql.close() + tdLog.success(f"{__file__} successfully executed") + +tdCases.addLinux(__file__, TDTestCase()) +tdCases.addWindows(__file__, TDTestCase()) From 8d3bad977b7ee0271c3fa268f3d288d18716da95 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:01:17 +0800 Subject: [PATCH 02/19] fix case --- tests/system-test/0-others/fsync.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index 8ee724175b..aab8cccb3b 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -50,31 +50,35 @@ class TDTestCase: tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 wal 1") - tdSql.query("show datsbases") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, wal_index, 1) tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 wal 2") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, wal_index, 2) tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 fsync 0") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 0) tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 fsync 3000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 fsync 180000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 180000) @@ -82,6 +86,7 @@ class TDTestCase: tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 wal 1 fsync 3000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 180000) @@ -89,42 +94,49 @@ class TDTestCase: tdSql.execute("drop database if exists db1") tdSql.execute("create database db1 wal 2 fsync 3000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) tdSql.checkData(i, wal_index, 2) tdSql.execute("alter database db1 wal 1") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) tdSql.checkData(i, wal_index, 1) tdSql.execute("alter database db1 wal 2") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) tdSql.checkData(i, wal_index, 2) tdSql.execute("alter database db1 fsync 0") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 0) tdSql.checkData(i, wal_index, 2) tdSql.execute("alter database db1 fsync 3000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) tdSql.checkData(i, wal_index, 2) tdSql.execute("alter database db1 fsync 18000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 18000) tdSql.checkData(i, wal_index, 2) tdSql.execute("alter database db1 wal 1 fsync 3000") + tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": tdSql.checkData(i, fsync_index, 3000) From 6d09a3ed8450dcf33fc5ab2f8067478f3fd774f2 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:04:25 +0800 Subject: [PATCH 03/19] fix case --- tests/system-test/0-others/fsync.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index aab8cccb3b..084e3854a6 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -42,10 +42,11 @@ class TDTestCase: wal_index = 0 fsync_index = 0 tdSql.query("show databases") + print(tdSql.cursor.description) for i in range(tdSql.queryCols): - if tdSql.cursor.description[i] == "wal": + if tdSql.cursor.description[i][0] == "wal": wal_index = i - if tdSql.cursor.description[i] == "fsync": + if tdSql.cursor.description[i][0] == "fsync": fsync_index = i tdSql.execute("drop database if exists db1") From 460e3c7a58a3d52f8ca8005d932e1b62a9bce072 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:04:52 +0800 Subject: [PATCH 04/19] fix case --- tests/system-test/0-others/fsync.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index 084e3854a6..d70d71b7f1 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -42,7 +42,6 @@ class TDTestCase: wal_index = 0 fsync_index = 0 tdSql.query("show databases") - print(tdSql.cursor.description) for i in range(tdSql.queryCols): if tdSql.cursor.description[i][0] == "wal": wal_index = i From c3c30034fdd4c670e96fee3ea3e51a9f7ca97389 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:18:35 +0800 Subject: [PATCH 05/19] fix case --- tests/system-test/0-others/fsync.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index d70d71b7f1..ac0b8bb58e 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -85,11 +85,11 @@ class TDTestCase: tdSql.execute("drop database if exists db1") - tdSql.execute("create database db1 wal 1 fsync 3000") + tdSql.execute("create database db1 wal 1 fsync 6000") tdSql.query("show databases") for i in range(tdSql.queryRows): if tdSql.queryResult[i][0] == "db1": - tdSql.checkData(i, fsync_index, 180000) + tdSql.checkData(i, fsync_index, 6000) tdSql.checkData(i, wal_index, 1) tdSql.execute("drop database if exists db1") From 00441b4e06765c9b489d120bb5a3e9755105edb3 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:21:32 +0800 Subject: [PATCH 06/19] fix case --- tests/system-test/0-others/fsync.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/system-test/0-others/fsync.py b/tests/system-test/0-others/fsync.py index ac0b8bb58e..964550cdbc 100644 --- a/tests/system-test/0-others/fsync.py +++ b/tests/system-test/0-others/fsync.py @@ -142,6 +142,8 @@ class TDTestCase: tdSql.checkData(i, fsync_index, 3000) tdSql.checkData(i, wal_index, 1) + tdSql.execute("drop database db1 ") + @property def fsync_create_err(self): return [ From 8ad2efeedf1028b8281453ceff53d42abcfab142 Mon Sep 17 00:00:00 2001 From: cpwu Date: Fri, 20 May 2022 20:22:51 +0800 Subject: [PATCH 07/19] add fsync to CI --- tests/system-test/fulltest.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh index 06be29a636..527cc1f8a3 100755 --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -11,6 +11,7 @@ python3 ./test.py -f 0-others/udfTest.py # TODO privilege has error # python3 ./test.py -f 0-others/user_control.py +python3 ./test.py -f 0-others/fsync.py #python3 ./test.py -f 2-query/between.py python3 ./test.py -f 2-query/distinct.py From 011169b108bb6a5927dbf321c3dd790d7f4cc8af Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:12:37 +0800 Subject: [PATCH 08/19] fix case --- tests/system-test/0-others/user_control.py | 260 ++++++++++++++++----- 1 file changed, 199 insertions(+), 61 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 48058af295..d781b24cbb 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -1,7 +1,9 @@ +from tabnanny import check import taos -import sys +import time import inspect import traceback +from dataclasses import dataclass from util.log import * from util.sql import * @@ -12,6 +14,10 @@ PRIVILEGES_ALL = "ALL" PRIVILEGES_READ = "READ" PRIVILEGES_WRITE = "WRITE" +WEIGHT_ALL = 5 +WEIGHT_READ = 2 +WEIGHT_WRITE = 3 + PRIMARY_COL = "ts" INT_COL = "c1" @@ -94,6 +100,7 @@ class TDconnect: self.cursor.close() self._conn.close() + def taos_connect( host = "127.0.0.1", port = 6030, @@ -111,6 +118,15 @@ def taos_connect( config=config ) + +@dataclass +class User: + name : str = None + passwd : str = None + db_set : set = set() + priv : str = None + priv_weight : int = 0 + class TDTestCase: def init(self, conn, logSql): @@ -121,6 +137,21 @@ class TDTestCase: def __user_list(self): return [f"user_test{i}" for i in range(self.users_count) ] + def __users(self): + self.users = [] + self.root_user = User() + self.root_user.name = "root" + self.root_user.passwd = "passwd" + self.root_user.db_set = set("*") + self.root_user.priv = PRIVILEGES_ALL + self.root_user.priv_weight = WEIGHT_ALL + for i in range(self.users_count): + user = User() + user.name = f"user_test{i}" + user.passwd = f"taosdata{i}" + self.users.append(user) + return self.users + @property def __passwd_list(self): return [f"taosdata{i}" for i in range(self.users_count) ] @@ -205,76 +236,166 @@ class TDTestCase: def __grant_user_privileges(self, privilege, dbname=None, user_name="root"): return f"GRANT {privilege} ON {self.__priv_level(dbname)} TO {user_name} " - def grant_check(self, user="root", passwd="taosdata", priv=PRIVILEGES_ALL): - with taos_connect(user=user, passwd=passwd) as user: - user.query("use db") - user.query("show tables") - if priv in [PRIVILEGES_ALL, PRIVILEGES_READ]: - user.query("select * from ct1") - else: - user.error("select * from ct1") - if priv in [PRIVILEGES_ALL, PRIVILEGES_WRITE]: - user.query("insert into t1 (ts) values (now())") - else: - user.error("insert into t1 (ts) values (now())") + def __revoke_user_privileges(self, privilege, dbname=None, user_name="root"): + return f"REVOKE {privilege} ON {self.__priv_level(dbname)} FROM {user_name} " - def test_grant_current(self): + def __user_check(self, user:User=None, check_priv=PRIVILEGES_ALL): + if user is None: + user = self.root_user + with taos_connect(user=user.name, passwd=user.passwd) as use: + use.query("use db") + use.query("show tables") + if check_priv == PRIVILEGES_ALL: + use.query("select * from ct1") + use.query("insert into t1 (ts) values (now())") + elif check_priv == PRIVILEGES_READ: + use.query("select * from ct1") + use.error("insert into t1 (ts) values (now())") + elif check_priv == PRIVILEGES_WRITE: + use.error("select * from ct1") + use.query("insert into t1 (ts) values (now())") + elif check_priv is None: + use.error("select * from ct1") + use.error("insert into t1 (ts) values (now())") + + def __change_user_priv(self, user: User, pre_priv, invoke=False): + if user.priv == pre_priv and invoke : + return + if pre_priv.upper() == PRIVILEGES_ALL: + pre_weight = -5 if invoke else 5 + elif pre_priv.upper() == PRIVILEGES_READ: + pre_weight = -2 if invoke else 2 + elif pre_priv.upper() == PRIVILEGES_WRITE: + pre_weight = -3 if invoke else 3 + else: + return + pre_weight += user.priv_weight + + if pre_weight >= 5: + user.priv = PRIVILEGES_ALL + user.priv_weight = 5 + elif pre_weight == 3: + user.priv = PRIVILEGES_WRITE + user.priv_weight = pre_weight + elif pre_weight == 2: + user.priv_weight = pre_weight + user.priv = PRIVILEGES_READ + elif pre_weight in [1, -1]: + return + elif pre_weight <= 0: + user.priv_weight = 0 + user.priv = "" + + return user + + def grant_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): + if not user: + user = self.root_user + sql = self.__grant_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) + tdLog.info(sql) + if user not in self.users or user.name != "root" or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): + tdSql.error(sql) + tdSql.query(sql) + self.__change_user_priv(user=user, pre_priv=priv) + user.db_set.add(dbname) + time.sleep(2) + + def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): + sql = self.__revoke_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) + tdLog.info(sql) + if not user or priv not in(): + tdSql.error(sql) + tdSql.query(sql) + if user.name == "root": + return + self.__change_user_priv(user=user, pre_priv=priv, invoke=True) + user.db_set.remove(dbname) + time.sleep(2) + + def test_priv_change_current(self): tdLog.printNoPrefix("==========step 1.0: if do not grant, can not read/write") - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=None) + self.__user_check() + self.__user_check(user=self.users[0], check_priv=None) tdLog.printNoPrefix("==========step 1.1: grant read, can read, can not write") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_READ, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_READ) + self.grant_user(user=self.users[0], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_READ) - tdLog.printNoPrefix("==========step 1.2: grant write, can write, can not read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_WRITE, user_name=self.__user_list[1]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[1], passwd=self.__passwd_list[1], priv=PRIVILEGES_WRITE) + tdLog.printNoPrefix("==========step 1.2: grant write, can write") + self.grant_user(user=self.users[1], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_WRITE) tdLog.printNoPrefix("==========step 1.3: grant all, can write and read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_ALL, user_name=self.__user_list[2]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[2], passwd=self.__passwd_list[2], priv=PRIVILEGES_ALL) + self.grant_user(user=self.users[2]) + self.__user_check(user=self.users[2], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.4: change grant read to write, can write , can not read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_WRITE, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_WRITE) + tdLog.printNoPrefix("==========step 1.4: grant read to write = all ") + self.grant_user(user=self.users[0], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.5: change grant write to read, can not write , can read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_READ, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_READ) + tdLog.printNoPrefix("==========step 1.4: revoke write from all = read ") + self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_READ) - tdLog.printNoPrefix("==========step 1.6: change grant read to all, can write , can read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_ALL, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_ALL) + tdLog.printNoPrefix("==========step 1.5: grant write to read = all") + self.grant_user(user=self.users[1], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.7: change grant all to write, can write , can not read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_WRITE, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_WRITE) + tdLog.printNoPrefix("==========step 1.4: revoke read from all = write ") + self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_WRITE) - tdLog.printNoPrefix("==========step 1.8: change grant write to all, can write , can read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_ALL, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_ALL) + tdLog.printNoPrefix("==========step 1.5: grant read to all = all") + self.grant_user(user=self.users[0], priv=PRIVILEGES_ALL) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.9: change grant all to read, can not write , can read") - sql = self.__grant_user_privileges(privilege=PRIVILEGES_READ, user_name=self.__user_list[0]) - tdLog.info(sql) - tdSql.query(sql) - self.grant_check(user=self.__user_list[0], passwd=self.__passwd_list[0], priv=PRIVILEGES_READ) + tdLog.printNoPrefix("==========step 1.5: grant write to all = all") + self.grant_user(user=self.users[1], priv=PRIVILEGES_ALL) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) + + tdLog.printNoPrefix("==========step 1.5: grant all to read = all") + self.grant_user(user=self.users[0], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) + + tdLog.printNoPrefix("==========step 1.5: grant all to write = all") + self.grant_user(user=self.users[1], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) + + ### init user + self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) + self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) + + tdLog.printNoPrefix("==========step 1.5: revoke read from write = no change") + self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[1], check_priv=PRIVILEGES_WRITE) + + tdLog.printNoPrefix("==========step 1.5: revoke write from read = no change") + self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[0], check_priv=PRIVILEGES_READ) + + tdLog.printNoPrefix("==========step 1.5: revoke read from read = nothing") + self.revoke_user(user=self.users[0], priv=PRIVILEGES_READ) + self.__user_check(user=self.users[0], check_priv=None) + + tdLog.printNoPrefix("==========step 1.5: revoke write from write = nothing") + self.revoke_user(user=self.users[1], priv=PRIVILEGES_WRITE) + self.__user_check(user=self.users[1], check_priv=None) + + ### init user + self.grant_user(user=self.users[0], priv=PRIVILEGES_READ) + self.revoke_user(user=self.users[1], priv=PRIVILEGES_WRITE) + + tdLog.printNoPrefix("==========step 1.5: revoke all from write = nothing") + self.revoke_user(user=self.users[1], priv=PRIVILEGES_ALL) + self.__user_check(user=self.users[1], check_priv=None) + + tdLog.printNoPrefix("==========step 1.5: revoke all from read = nothing") + self.revoke_user(user=self.users[0], priv=PRIVILEGES_ALL) + self.__user_check(user=self.users[0], check_priv=None) + + tdLog.printNoPrefix("==========step 1.5: revoke all from all = nothing") + self.revoke_user(user=self.users[2], priv=PRIVILEGES_ALL) + self.__user_check(user=self.users[2], check_priv=None) def __grant_err(self): return [ @@ -288,13 +409,30 @@ class TDTestCase: f"GRANT {self.__privilege[0]} ON db.t1 TO {self.__user_list[0]}" , ] + def __revoke_err(self): + return [ + self.__revoke_user_privileges(privilege=self.__privilege[0], user_name="") , + self.__revoke_user_privileges(privilege=self.__privilege[0], user_name="*") , + self.__revoke_user_privileges(privilege=self.__privilege[1], dbname="not_exist_db", user_name=self.__user_list[0]), + self.__revoke_user_privileges(privilege="any_priv", user_name=self.__user_list[0]), + self.__revoke_user_privileges(privilege="", dbname="db", user_name=self.__user_list[0]) , + self.__revoke_user_privileges(privilege=" ".join(self.__privilege), user_name=self.__user_list[0]) , + f"REVOKE {self.__privilege[0]} ON * FROM {self.__user_list[0]}" , + f"REVOKE {self.__privilege[0]} ON db.t1 FROM {self.__user_list[0]}" , + ] + def test_grant_err(self): for sql in self.__grant_err(): tdSql.error(sql) - def test_grant(self): + def test_revoke_err(self): + for sql in self.__revoke_err(): + tdSql.error(sql) + + def test_change_priv(self): self.test_grant_err() - self.test_grant_current() + self.test_revoke_err() + self.test_priv_change_current() def test_user_create(self): self.create_user_current() @@ -482,7 +620,7 @@ class TDTestCase: self.login_err(self.__user_list[0], f"new{self.__passwd_list[0]}") # 用户权限设置 - self.test_grant() + self.test_change_priv() # 修改密码 tdLog.printNoPrefix("==========step3: alter user pass test") From d20bd3e4b63df4a67def75ee980405b38012e5b0 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:22:43 +0800 Subject: [PATCH 09/19] fix case --- tests/system-test/0-others/user_control.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index d781b24cbb..25170c6a32 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -123,7 +123,7 @@ def taos_connect( class User: name : str = None passwd : str = None - db_set : set = set() + db_set : list = [] priv : str = None priv_weight : int = 0 @@ -142,7 +142,7 @@ class TDTestCase: self.root_user = User() self.root_user.name = "root" self.root_user.passwd = "passwd" - self.root_user.db_set = set("*") + self.root_user.db_set = ["*"] self.root_user.priv = PRIVILEGES_ALL self.root_user.priv_weight = WEIGHT_ALL for i in range(self.users_count): @@ -297,7 +297,7 @@ class TDTestCase: tdSql.error(sql) tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv) - user.db_set.add(dbname) + user.db_set = list(set(user.db_set.append(dbname))) time.sleep(2) def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): From d31287840273562ce74fc1d934e4f67d419c172a Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:24:07 +0800 Subject: [PATCH 10/19] fix case --- tests/system-test/0-others/user_control.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 25170c6a32..8843eba5a5 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -123,7 +123,7 @@ def taos_connect( class User: name : str = None passwd : str = None - db_set : list = [] + db_set : set = {} priv : str = None priv_weight : int = 0 @@ -142,7 +142,7 @@ class TDTestCase: self.root_user = User() self.root_user.name = "root" self.root_user.passwd = "passwd" - self.root_user.db_set = ["*"] + self.root_user.db_set = set("*") self.root_user.priv = PRIVILEGES_ALL self.root_user.priv_weight = WEIGHT_ALL for i in range(self.users_count): @@ -297,7 +297,7 @@ class TDTestCase: tdSql.error(sql) tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv) - user.db_set = list(set(user.db_set.append(dbname))) + user.db_set.add(dbname) time.sleep(2) def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): From 70c3df86b84b59d9ce44467675135c5f1fb65498 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:32:46 +0800 Subject: [PATCH 11/19] fix case --- tests/system-test/0-others/user_control.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 8843eba5a5..c437568ea2 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -123,7 +123,7 @@ def taos_connect( class User: name : str = None passwd : str = None - db_set : set = {} + db_set : set = None priv : str = None priv_weight : int = 0 @@ -141,7 +141,7 @@ class TDTestCase: self.users = [] self.root_user = User() self.root_user.name = "root" - self.root_user.passwd = "passwd" + self.root_user.passwd = "taosdata" self.root_user.db_set = set("*") self.root_user.priv = PRIVILEGES_ALL self.root_user.priv_weight = WEIGHT_ALL @@ -149,6 +149,7 @@ class TDTestCase: user = User() user.name = f"user_test{i}" user.passwd = f"taosdata{i}" + user.db_set = {} self.users.append(user) return self.users @@ -314,7 +315,7 @@ class TDTestCase: def test_priv_change_current(self): tdLog.printNoPrefix("==========step 1.0: if do not grant, can not read/write") - self.__user_check() + self.__user_check(user=self.root_user) self.__user_check(user=self.users[0], check_priv=None) tdLog.printNoPrefix("==========step 1.1: grant read, can read, can not write") @@ -593,6 +594,7 @@ class TDTestCase: tdSql.prepare() self.__create_tb() self.rows = 10 + self.users_count = 5 self.__insert_data(self.rows) tdDnodes.stop(1) @@ -607,7 +609,6 @@ class TDTestCase: # root用户权限 # 创建用户测试 tdLog.printNoPrefix("==========step1: create user test") - self.users_count = 5 self.test_user_create() # 查看用户 From 8d6156f662b663fab95fba8624dddcd1313b8019 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:32:53 +0800 Subject: [PATCH 12/19] fix case --- tests/system-test/0-others/user_control.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index c437568ea2..3c71f13dbc 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -596,6 +596,7 @@ class TDTestCase: self.rows = 10 self.users_count = 5 self.__insert_data(self.rows) + self.users = self.__users() tdDnodes.stop(1) tdDnodes.start(1) From 1f42c36e98994cf06eefbe7bbb6ffee3a6d45acd Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:34:42 +0800 Subject: [PATCH 13/19] fix case --- tests/system-test/0-others/user_control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 3c71f13dbc..c72d6df259 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -294,7 +294,7 @@ class TDTestCase: user = self.root_user sql = self.__grant_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) tdLog.info(sql) - if user not in self.users or user.name != "root" or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): + if (user not in self.users and user.name != "root") or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): tdSql.error(sql) tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv) From 8e5884b51d72e21eddd7b79f32e137a3b48bc67c Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:38:33 +0800 Subject: [PATCH 14/19] fix case --- tests/system-test/0-others/user_control.py | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index c72d6df259..17c29bf4a8 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -149,7 +149,7 @@ class TDTestCase: user = User() user.name = f"user_test{i}" user.passwd = f"taosdata{i}" - user.db_set = {} + user.db_set = set() self.users.append(user) return self.users @@ -304,7 +304,7 @@ class TDTestCase: def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): sql = self.__revoke_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) tdLog.info(sql) - if not user or priv not in(): + if not user or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): tdSql.error(sql) tdSql.query(sql) if user.name == "root": @@ -334,31 +334,31 @@ class TDTestCase: self.grant_user(user=self.users[0], priv=PRIVILEGES_WRITE) self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.4: revoke write from all = read ") + tdLog.printNoPrefix("==========step 1.5: revoke write from all = read ") self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) self.__user_check(user=self.users[0], check_priv=PRIVILEGES_READ) - tdLog.printNoPrefix("==========step 1.5: grant write to read = all") + tdLog.printNoPrefix("==========step 1.6: grant write to read = all") self.grant_user(user=self.users[1], priv=PRIVILEGES_READ) self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.4: revoke read from all = write ") + tdLog.printNoPrefix("==========step 1.7: revoke read from all = write ") self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) self.__user_check(user=self.users[1], check_priv=PRIVILEGES_WRITE) - tdLog.printNoPrefix("==========step 1.5: grant read to all = all") + tdLog.printNoPrefix("==========step 1.8: grant read to all = all") self.grant_user(user=self.users[0], priv=PRIVILEGES_ALL) self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.5: grant write to all = all") + tdLog.printNoPrefix("==========step 1.9: grant write to all = all") self.grant_user(user=self.users[1], priv=PRIVILEGES_ALL) self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.5: grant all to read = all") + tdLog.printNoPrefix("==========step 1.10: grant all to read = all") self.grant_user(user=self.users[0], priv=PRIVILEGES_READ) self.__user_check(user=self.users[0], check_priv=PRIVILEGES_ALL) - tdLog.printNoPrefix("==========step 1.5: grant all to write = all") + tdLog.printNoPrefix("==========step 1.11: grant all to write = all") self.grant_user(user=self.users[1], priv=PRIVILEGES_WRITE) self.__user_check(user=self.users[1], check_priv=PRIVILEGES_ALL) @@ -366,19 +366,19 @@ class TDTestCase: self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) - tdLog.printNoPrefix("==========step 1.5: revoke read from write = no change") + tdLog.printNoPrefix("==========step 1.12: revoke read from write = no change") self.revoke_user(user=self.users[1], priv=PRIVILEGES_READ) self.__user_check(user=self.users[1], check_priv=PRIVILEGES_WRITE) - tdLog.printNoPrefix("==========step 1.5: revoke write from read = no change") + tdLog.printNoPrefix("==========step 1.13: revoke write from read = no change") self.revoke_user(user=self.users[0], priv=PRIVILEGES_WRITE) self.__user_check(user=self.users[0], check_priv=PRIVILEGES_READ) - tdLog.printNoPrefix("==========step 1.5: revoke read from read = nothing") + tdLog.printNoPrefix("==========step 1.14: revoke read from read = nothing") self.revoke_user(user=self.users[0], priv=PRIVILEGES_READ) self.__user_check(user=self.users[0], check_priv=None) - tdLog.printNoPrefix("==========step 1.5: revoke write from write = nothing") + tdLog.printNoPrefix("==========step 1.15: revoke write from write = nothing") self.revoke_user(user=self.users[1], priv=PRIVILEGES_WRITE) self.__user_check(user=self.users[1], check_priv=None) @@ -386,15 +386,15 @@ class TDTestCase: self.grant_user(user=self.users[0], priv=PRIVILEGES_READ) self.revoke_user(user=self.users[1], priv=PRIVILEGES_WRITE) - tdLog.printNoPrefix("==========step 1.5: revoke all from write = nothing") + tdLog.printNoPrefix("==========step 1.16: revoke all from write = nothing") self.revoke_user(user=self.users[1], priv=PRIVILEGES_ALL) self.__user_check(user=self.users[1], check_priv=None) - tdLog.printNoPrefix("==========step 1.5: revoke all from read = nothing") + tdLog.printNoPrefix("==========step 1.17: revoke all from read = nothing") self.revoke_user(user=self.users[0], priv=PRIVILEGES_ALL) self.__user_check(user=self.users[0], check_priv=None) - tdLog.printNoPrefix("==========step 1.5: revoke all from all = nothing") + tdLog.printNoPrefix("==========step 1.18: revoke all from all = nothing") self.revoke_user(user=self.users[2], priv=PRIVILEGES_ALL) self.__user_check(user=self.users[2], check_priv=None) From 3a7347586e1fb3b2f4c0e86ce165008fad16c96d Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:39:12 +0800 Subject: [PATCH 15/19] fix case --- tests/system-test/0-others/user_control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 17c29bf4a8..69e9753040 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -304,7 +304,7 @@ class TDTestCase: def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): sql = self.__revoke_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) tdLog.info(sql) - if not user or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): + if user is None or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): tdSql.error(sql) tdSql.query(sql) if user.name == "root": From 1a8917cb5ffe64b7afa612d9bdcc162721ac2d9f Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:47:26 +0800 Subject: [PATCH 16/19] fix case --- tests/system-test/0-others/user_control.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 69e9753040..a785060d52 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -262,6 +262,9 @@ class TDTestCase: def __change_user_priv(self, user: User, pre_priv, invoke=False): if user.priv == pre_priv and invoke : return + if user.name == "root": + return + if pre_priv.upper() == PRIVILEGES_ALL: pre_weight = -5 if invoke else 5 elif pre_priv.upper() == PRIVILEGES_READ: @@ -299,7 +302,7 @@ class TDTestCase: tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv) user.db_set.add(dbname) - time.sleep(2) + time.sleep(1) def revoke_user(self, user: User = None, priv=PRIVILEGES_ALL, dbname=None): sql = self.__revoke_user_privileges(privilege=priv, dbname=dbname, user_name=user.name) @@ -307,11 +310,9 @@ class TDTestCase: if user is None or priv not in (PRIVILEGES_ALL, PRIVILEGES_READ, PRIVILEGES_WRITE): tdSql.error(sql) tdSql.query(sql) - if user.name == "root": - return self.__change_user_priv(user=user, pre_priv=priv, invoke=True) user.db_set.remove(dbname) - time.sleep(2) + time.sleep(1) def test_priv_change_current(self): tdLog.printNoPrefix("==========step 1.0: if do not grant, can not read/write") From 0288faac7f156b7fd7f2d574b9212749db9ed407 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:50:10 +0800 Subject: [PATCH 17/19] fix case --- tests/system-test/0-others/user_control.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index a785060d52..327b1531d9 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -311,7 +311,8 @@ class TDTestCase: tdSql.error(sql) tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv, invoke=True) - user.db_set.remove(dbname) + if user.name != "root": + user.db_set.remove(dbname) if dbname else user.db_set.clear() time.sleep(1) def test_priv_change_current(self): From e63af60d5b2e556074cd4b1466ef1cbd3ddf2100 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:53:22 +0800 Subject: [PATCH 18/19] fix case --- tests/system-test/0-others/user_control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system-test/0-others/user_control.py b/tests/system-test/0-others/user_control.py index 327b1531d9..4b5be79a70 100644 --- a/tests/system-test/0-others/user_control.py +++ b/tests/system-test/0-others/user_control.py @@ -312,7 +312,7 @@ class TDTestCase: tdSql.query(sql) self.__change_user_priv(user=user, pre_priv=priv, invoke=True) if user.name != "root": - user.db_set.remove(dbname) if dbname else user.db_set.clear() + user.db_set.discard(dbname) if dbname else user.db_set.clear() time.sleep(1) def test_priv_change_current(self): From 365d80890a71675cc783d8086872212d80514877 Mon Sep 17 00:00:00 2001 From: cpwu Date: Sat, 21 May 2022 17:54:59 +0800 Subject: [PATCH 19/19] add case to CI --- tests/system-test/fulltest.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/system-test/fulltest.sh b/tests/system-test/fulltest.sh index 527cc1f8a3..835fd45226 100755 --- a/tests/system-test/fulltest.sh +++ b/tests/system-test/fulltest.sh @@ -9,8 +9,7 @@ python3 ./test.py -f 0-others/telemetry.py python3 ./test.py -f 0-others/taosdMonitor.py python3 ./test.py -f 0-others/udfTest.py -# TODO privilege has error -# python3 ./test.py -f 0-others/user_control.py +python3 ./test.py -f 0-others/user_control.py python3 ./test.py -f 0-others/fsync.py #python3 ./test.py -f 2-query/between.py