Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5d8093f6
T
TDengine
项目概览
taosdata
/
TDengine
12 个月 前同步成功
通知
1180
Star
22014
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5d8093f6
编写于
5月 22, 2022
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of github.com:taosdata/TDengine into feature/udf
上级
1e8a2876
162b6632
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
509 addition
and
66 deletion
+509
-66
tests/pytest/util/dnodes.py
tests/pytest/util/dnodes.py
+2
-2
tests/system-test/0-others/fsync.py
tests/system-test/0-others/fsync.py
+301
-0
tests/system-test/0-others/user_control.py
tests/system-test/0-others/user_control.py
+204
-62
tests/system-test/fulltest.sh
tests/system-test/fulltest.sh
+2
-2
未找到文件。
tests/pytest/util/dnodes.py
浏览文件 @
5d8093f6
...
...
@@ -264,7 +264,7 @@ class TDDnode:
cmd
=
"nohup %s -c %s > /dev/null 2>&1 & "
%
(
binPath
,
self
.
cfgDir
)
else
:
valgrindCmdline
=
"valgrind --log-file=
\"
valgrind.log
\"
--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
valgrindCmdline
=
"valgrind --log-file=
\"
%s/../log/valgrind.log
\"
--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
%
self
.
cfgDir
cmd
=
"nohup %s %s -c %s 2>&1 & "
%
(
valgrindCmdline
,
binPath
,
self
.
cfgDir
)
...
...
@@ -325,7 +325,7 @@ class TDDnode:
cmd
=
"nohup %s -c %s > /dev/null 2>&1 & "
%
(
binPath
,
self
.
cfgDir
)
else
:
valgrindCmdline
=
"valgrind --log-file=
\"
valgrind.log
\"
--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
valgrindCmdline
=
"valgrind --log-file=
\"
%s/../log/valgrind.log
\"
--tool=memcheck --leak-check=full --show-reachable=no --track-origins=yes --show-leak-kinds=all -v --workaround-gcc296-bugs=yes"
%
self
.
cfgDir
cmd
=
"nohup %s %s -c %s 2>&1 & "
%
(
valgrindCmdline
,
binPath
,
self
.
cfgDir
)
...
...
tests/system-test/0-others/fsync.py
0 → 100644
浏览文件 @
5d8093f6
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
][
0
]
==
"wal"
:
wal_index
=
i
if
tdSql
.
cursor
.
description
[
i
][
0
]
==
"fsync"
:
fsync_index
=
i
tdSql
.
execute
(
"drop database if exists db1"
)
tdSql
.
execute
(
"create database db1 wal 1"
)
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
)
tdSql
.
execute
(
"drop database if exists db1"
)
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
,
6000
)
tdSql
.
checkData
(
i
,
wal_index
,
1
)
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
)
tdSql
.
checkData
(
i
,
wal_index
,
1
)
tdSql
.
execute
(
"drop database db1 "
)
@
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
())
tests/system-test/0-others/user_control.py
浏览文件 @
5d8093f6
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
=
None
priv
:
str
=
None
priv_weight
:
int
=
0
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
...
...
@@ -121,6 +137,22 @@ 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
=
"taosdata"
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
}
"
user
.
db_set
=
set
()
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 +237,168 @@ 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
test_grant_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
)
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
])
def
__revoke_user_privileges
(
self
,
privilege
,
dbname
=
None
,
user_name
=
"root"
):
return
f
"REVOKE
{
privilege
}
ON
{
self
.
__priv_level
(
dbname
)
}
FROM
{
user_name
}
"
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
user
.
name
==
"root"
:
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
and
user
.
name
!=
"root"
)
or
priv
not
in
(
PRIVILEGES_ALL
,
PRIVILEGES_READ
,
PRIVILEGES_WRITE
):
tdSql
.
error
(
sql
)
tdSql
.
query
(
sql
)
self
.
grant_check
(
user
=
self
.
__user_list
[
0
],
passwd
=
self
.
__passwd_list
[
0
],
priv
=
PRIVILEGES_READ
)
self
.
__change_user_priv
(
user
=
user
,
pre_priv
=
priv
)
user
.
db_set
.
add
(
dbname
)
time
.
sleep
(
1
)
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
]
)
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
user
is
None
or
priv
not
in
(
PRIVILEGES_ALL
,
PRIVILEGES_READ
,
PRIVILEGES_WRITE
):
tdSql
.
error
(
sql
)
tdSql
.
query
(
sql
)
self
.
grant_check
(
user
=
self
.
__user_list
[
1
],
passwd
=
self
.
__passwd_list
[
1
],
priv
=
PRIVILEGES_WRITE
)
self
.
__change_user_priv
(
user
=
user
,
pre_priv
=
priv
,
invoke
=
True
)
if
user
.
name
!=
"root"
:
user
.
db_set
.
discard
(
dbname
)
if
dbname
else
user
.
db_set
.
clear
()
time
.
sleep
(
1
)
def
test_priv_change_current
(
self
):
tdLog
.
printNoPrefix
(
"==========step 1.0: if do not grant, can not read/write"
)
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"
)
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"
)
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.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.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.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.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.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.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.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.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.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.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.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
)
### 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.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.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.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.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
)
### 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.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.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.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
)
def
__grant_err
(
self
):
return
[
...
...
@@ -288,13 +412,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
()
...
...
@@ -455,7 +596,9 @@ class TDTestCase:
tdSql
.
prepare
()
self
.
__create_tb
()
self
.
rows
=
10
self
.
users_count
=
5
self
.
__insert_data
(
self
.
rows
)
self
.
users
=
self
.
__users
()
tdDnodes
.
stop
(
1
)
tdDnodes
.
start
(
1
)
...
...
@@ -469,7 +612,6 @@ class TDTestCase:
# root用户权限
# 创建用户测试
tdLog
.
printNoPrefix
(
"==========step1: create user test"
)
self
.
users_count
=
5
self
.
test_user_create
()
# 查看用户
...
...
@@ -482,7 +624,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"
)
...
...
tests/system-test/fulltest.sh
浏览文件 @
5d8093f6
...
...
@@ -9,8 +9,8 @@ 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
python3 ./test.py
-f
2-query/distinct.py
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录