Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
44e4d1ba
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
未验证
提交
44e4d1ba
编写于
5月 13, 2022
作者:
H
Hui Li
提交者:
GitHub
5月 13, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #12404 from taosdata/cpwu/3.0
test: add user control case
上级
00b17f86
a60dc997
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
354 addition
and
29 deletion
+354
-29
tests/system-test/0-others/user_control.py
tests/system-test/0-others/user_control.py
+325
-0
tests/system-test/2-query/between.py
tests/system-test/2-query/between.py
+29
-29
未找到文件。
tests/system-test/0-others/user_control.py
0 → 100644
浏览文件 @
44e4d1ba
import
taos
import
sys
import
inspect
import
traceback
from
util.log
import
*
from
util.sql
import
*
from
util.cases
import
*
PRIVILEGES_ALL
=
"ALL"
PRIVILEGES_READ
=
"READ"
PRIVILEGES_WRITE
=
"WRITE"
class
TDconnect
:
def
__init__
(
self
,
host
=
None
,
port
=
None
,
user
=
None
,
password
=
None
,
database
=
None
,
config
=
None
,
)
->
None
:
self
.
_conn
=
None
self
.
_host
=
host
self
.
_user
=
user
self
.
_password
=
password
self
.
_database
=
database
self
.
_port
=
port
self
.
_config
=
config
def
__enter__
(
self
):
self
.
_conn
=
taos
.
connect
(
host
=
self
.
_host
,
port
=
self
.
_port
,
user
=
self
.
_user
,
password
=
self
.
_password
,
database
=
self
.
_database
,
config
=
self
.
_config
)
self
.
cursor
=
self
.
_conn
.
cursor
()
return
self
def
error
(
self
,
sql
):
expectErrNotOccured
=
True
try
:
self
.
cursor
.
execute
(
sql
)
except
BaseException
:
expectErrNotOccured
=
False
if
expectErrNotOccured
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
tdLog
.
exit
(
f
"
{
caller
.
filename
}
(
{
caller
.
lineno
}
) failed: sql:
{
sql
}
, expect error not occured"
)
else
:
self
.
queryRows
=
0
self
.
queryCols
=
0
self
.
queryResult
=
None
tdLog
.
info
(
f
"sql:
{
sql
}
, expect error occured"
)
def
query
(
self
,
sql
,
row_tag
=
None
):
# sourcery skip: raise-from-previous-error, raise-specific-error
self
.
sql
=
sql
try
:
self
.
cursor
.
execute
(
sql
)
self
.
queryResult
=
self
.
cursor
.
fetchall
()
self
.
queryRows
=
len
(
self
.
queryResult
)
self
.
queryCols
=
len
(
self
.
cursor
.
description
)
except
Exception
as
e
:
caller
=
inspect
.
getframeinfo
(
inspect
.
stack
()[
1
][
0
])
tdLog
.
notice
(
f
"
{
caller
.
filename
}
(
{
caller
.
lineno
}
) failed: sql:
{
sql
}
,
{
repr
(
e
)
}
"
)
traceback
.
print_exc
()
raise
Exception
(
repr
(
e
))
if
row_tag
:
return
self
.
queryResult
return
self
.
queryRows
def
__exit__
(
self
,
types
,
values
,
trace
):
if
self
.
_conn
:
self
.
cursor
.
close
()
self
.
_conn
.
close
()
def
taos_connect
(
host
=
"127.0.0.1"
,
port
=
6030
,
user
=
"root"
,
passwd
=
"taosdata"
,
database
=
None
,
config
=
None
):
return
TDconnect
(
host
=
host
,
port
=
port
,
user
=
user
,
password
=
passwd
,
database
=
database
,
config
=
config
)
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
f
"start to excute
{
__file__
}
"
)
tdSql
.
init
(
conn
.
cursor
())
@
property
def
__user_list
(
self
):
return
[
f
"user_test
{
i
}
"
for
i
in
range
(
self
.
users_count
)
]
@
property
def
__passwd_list
(
self
):
return
[
f
"taosdata
{
i
}
"
for
i
in
range
(
self
.
users_count
)
]
@
property
def
__privilege
(
self
):
return
[
PRIVILEGES_ALL
,
PRIVILEGES_READ
,
PRIVILEGES_WRITE
]
def
__priv_level
(
self
,
dbname
=
None
):
return
f
"
{
dbname
}
.*"
if
dbname
else
"*.*"
def
create_user_current
(
self
):
users
=
self
.
__user_list
passwds
=
self
.
__passwd_list
for
i
in
range
(
self
.
users_count
):
tdSql
.
execute
(
f
"create user
{
users
[
i
]
}
pass '
{
passwds
[
i
]
}
' "
)
tdSql
.
query
(
"show users"
)
tdSql
.
checkRows
(
self
.
users_count
+
1
)
def
create_user_err
(
self
):
sqls
=
[
"create users u1 pass 'u1passwd' "
,
"create user '' pass 'u1passwd' "
,
"create user pass 'u1passwd' "
,
"create user u1 pass u1passwd "
,
"create user u1 password 'u1passwd' "
,
"create user u1 pass u1passwd "
,
"create user u1 pass '' "
,
"create user u1 pass ' ' "
,
"create user u1 pass "
,
"create user u1 u2 pass 'u1passwd' 'u2passwd' "
,
"create user u1 u2 pass 'u1passwd', 'u2passwd' "
,
"create user u1, u2 pass 'u1passwd', 'u2passwd' "
,
"create user u1, u2 pass 'u1passwd' 'u2passwd' "
,
# length of user_name must <= 23
"create user u12345678901234567890123 pass 'u1passwd' "
,
# length of passwd must <= 128
"create user u1 pass 'u12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678' "
,
# password must have not " ' ~ ` \
"create user u1 pass 'u1passwd
\\
' "
,
"create user u1 pass 'u1passwd~' "
,
"create user u1 pass 'u1passwd
\"
' "
,
"create user u1 pass 'u1passwd
\'
' "
,
"create user u1 pass 'u1passwd`' "
,
# must after create a user named u1
"create user u1 pass 'u1passwd' "
,
]
tdSql
.
execute
(
"create user u1 pass 'u1passwd' "
)
for
sql
in
sqls
:
tdSql
.
error
(
sql
)
def
__alter_pass_sql
(
self
,
user
,
passwd
):
return
f
'''ALTER USER
{
user
}
PASS '
{
passwd
}
' '''
def
alter_pass_current
(
self
):
self
.
__init_pass
=
True
for
count
,
i
in
enumerate
(
range
(
self
.
users_count
)):
if
self
.
__init_pass
:
tdSql
.
query
(
self
.
__alter_pass_sql
(
self
.
__user_list
[
i
],
f
"new
{
self
.
__passwd_list
[
i
]
}
"
))
self
.
__init_pass
=
count
!=
self
.
users_count
-
1
else
:
tdSql
.
query
(
self
.
__alter_pass_sql
(
self
.
__user_list
[
i
],
self
.
__passwd_list
[
i
]
)
)
self
.
__init_pass
=
count
==
self
.
users_count
-
1
def
alter_pass_err
(
self
):
# sourcery skip: remove-redundant-fstring
sqls
=
[
f
"alter users
{
self
.
__user_list
[
0
]
}
pass 'newpass' "
,
f
"alter user
{
self
.
__user_list
[
0
]
}
pass '' "
,
f
"alter user
{
self
.
__user_list
[
0
]
}
pass ' ' "
,
f
"alter user anyuser pass 'newpass' "
,
f
"alter user
{
self
.
__user_list
[
0
]
}
pass "
,
f
"alter user
{
self
.
__user_list
[
0
]
}
password 'newpass' "
,
]
for
sql
in
sqls
:
tdSql
.
error
(
sql
)
def
grant_user_privileges
(
self
,
privilege
,
dbname
=
None
,
user_name
=
"root"
):
return
f
"GRANT
{
privilege
}
ON
{
self
.
__priv_level
(
dbname
)
}
TO
{
user_name
}
"
def
test_user_create
(
self
):
self
.
create_user_current
()
self
.
create_user_err
()
def
test_alter_pass
(
self
):
self
.
alter_pass_current
()
self
.
alter_pass_err
()
def
user_login
(
self
,
user
,
passwd
):
login_except
=
False
try
:
with
taos_connect
(
user
=
user
,
passwd
=
passwd
)
as
conn
:
cursor
=
conn
.
cursor
except
BaseException
:
login_except
=
True
cursor
=
None
return
login_except
,
cursor
def
login_currrent
(
self
,
user
,
passwd
):
login_except
,
_
=
self
.
user_login
(
user
,
passwd
)
if
login_except
:
tdLog
.
exit
(
f
"connect failed, user:
{
user
}
and pass:
{
passwd
}
do not match!"
)
else
:
tdLog
.
info
(
"connect successfully, user and pass matched!"
)
def
login_err
(
self
,
user
,
passwd
):
login_except
,
_
=
self
.
user_login
(
user
,
passwd
)
if
login_except
:
tdLog
.
info
(
"connect failed, except error occured!"
)
else
:
tdLog
.
exit
(
"connect successfully, except error not occrued!"
)
def
__drop_user
(
self
,
user
):
return
f
"DROP USER
{
user
}
"
def
drop_user_current
(
self
):
for
user
in
self
.
__user_list
:
tdSql
.
query
(
self
.
__drop_user
(
user
))
def
drop_user_error
(
self
):
sqls
=
[
f
"DROP
{
self
.
__user_list
[
0
]
}
"
,
f
"DROP user
{
self
.
__user_list
[
0
]
}
{
self
.
__user_list
[
1
]
}
"
,
f
"DROP user
{
self
.
__user_list
[
0
]
}
,
{
self
.
__user_list
[
1
]
}
"
,
f
"DROP users
{
self
.
__user_list
[
0
]
}
{
self
.
__user_list
[
1
]
}
"
,
f
"DROP users
{
self
.
__user_list
[
0
]
}
,
{
self
.
__user_list
[
1
]
}
"
,
"DROP user root"
,
"DROP user abcde"
,
"DROP user ALL"
,
]
for
sql
in
sqls
:
tdSql
.
error
(
sql
)
def
test_drop_user
(
self
):
# must drop err first
self
.
drop_user_error
()
self
.
drop_user_current
()
def
run
(
self
):
# 默认只有 root 用户
tdLog
.
printNoPrefix
(
"==========step0: init, user list only has root account"
)
tdSql
.
query
(
"show users"
)
tdSql
.
checkData
(
0
,
0
,
"root"
)
tdSql
.
checkData
(
0
,
1
,
"super"
)
# root用户权限
# 创建用户测试
tdLog
.
printNoPrefix
(
"==========step1: create user test"
)
self
.
users_count
=
5
self
.
test_user_create
()
# 查看用户
tdLog
.
printNoPrefix
(
"==========step2: show user test"
)
tdSql
.
query
(
"show users"
)
tdSql
.
checkRows
(
self
.
users_count
+
2
)
# 密码登录认证
self
.
login_currrent
(
self
.
__user_list
[
0
],
self
.
__passwd_list
[
0
])
self
.
login_err
(
self
.
__user_list
[
0
],
f
"new
{
self
.
__passwd_list
[
0
]
}
"
)
# 修改密码
tdLog
.
printNoPrefix
(
"==========step3: alter user pass test"
)
self
.
test_alter_pass
()
# 密码修改后的登录认证
tdLog
.
printNoPrefix
(
"==========step4: check login test"
)
self
.
login_err
(
self
.
__user_list
[
0
],
self
.
__passwd_list
[
0
])
self
.
login_currrent
(
self
.
__user_list
[
0
],
f
"new
{
self
.
__passwd_list
[
0
]
}
"
)
# 普通用户权限
# 密码登录
_
,
user
=
self
.
user_login
(
self
.
__user_list
[
0
],
f
"new
{
self
.
__passwd_list
[
0
]
}
"
)
with
taos_connect
(
user
=
self
.
__user_list
[
0
],
passwd
=
f
"new
{
self
.
__passwd_list
[
0
]
}
"
)
as
conn
:
user
=
conn
# 不能创建用户
tdLog
.
printNoPrefix
(
"==========step5: normal user can not create user"
)
user
.
error
(
"create use utest1 pass 'utest1pass'"
)
# 可以查看用户
tdLog
.
printNoPrefix
(
"==========step6: normal user can show user"
)
user
.
query
(
"show users"
)
assert
user
.
queryRows
==
self
.
users_count
+
2
# 不可以修改其他用户的密码
tdLog
.
printNoPrefix
(
"==========step7: normal user can not alter other user pass"
)
user
.
error
(
self
.
__alter_pass_sql
(
self
.
__user_list
[
1
],
self
.
__passwd_list
[
1
]
))
user
.
error
(
"root"
,
"taosdata_root"
)
# 可以修改自己的密码
tdLog
.
printNoPrefix
(
"==========step8: normal user can alter owner pass"
)
user
.
query
(
self
.
__alter_pass_sql
(
self
.
__user_list
[
0
],
self
.
__passwd_list
[
0
]))
# 不可以删除用户,包括自己
tdLog
.
printNoPrefix
(
"==========step9: normal user can not drop any user "
)
user
.
error
(
f
"drop user
{
self
.
__user_list
[
0
]
}
"
)
user
.
error
(
f
"drop user
{
self
.
__user_list
[
1
]
}
"
)
user
.
error
(
"drop user root"
)
# root删除用户测试
tdLog
.
printNoPrefix
(
"==========step10: super user drop normal user"
)
self
.
test_drop_user
()
tdSql
.
query
(
"show users"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
"root"
)
tdSql
.
checkData
(
0
,
1
,
"super"
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
f
"
{
__file__
}
successfully executed"
)
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tests/system-test/2-query/between.py
浏览文件 @
44e4d1ba
...
...
@@ -45,16 +45,16 @@ class TDTestCase:
tdLog
.
printNoPrefix
(
"==========step3:query timestamp type"
)
#
tdSql.query("select * from t1 where ts between now()-1m and now()+10m")
#
tdSql.checkRows(10)
#
tdSql.query("select * from t1 where ts between '2021-01-01 00:00:00.000' and '2121-01-01 00:00:00.000'")
tdSql
.
query
(
"select * from t1 where ts between now()-1m and now()+10m"
)
tdSql
.
checkRows
(
10
)
tdSql
.
query
(
"select * from t1 where ts between '2021-01-01 00:00:00.000' and '2121-01-01 00:00:00.000'"
)
# tdSql.checkRows(11)
# tdSql.query("select * from t1 where ts between '1969-01-01 00:00:00.000' and '1969-12-31 23:59:59.999'")
# tdSql.checkRows(0)
# tdSql.query("select * from t1 where ts between -2793600 and 31507199")
tdSql
.
query
(
"select * from t1 where ts between '1969-01-01 00:00:00.000' and '1969-12-31 23:59:59.999'"
)
# tdSql.checkRows(0)
# tdSql.query("select * from t1 where ts between 1609430400000 and 4765104000000")
# tdSql.checkRows(11)
tdSql
.
query
(
"select * from t1 where ts between -2793600 and 31507199"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from t1 where ts between 1609430400000 and 4765104000000"
)
tdSql
.
checkRows
(
11
)
tdLog
.
printNoPrefix
(
"==========step4:query int type"
)
...
...
@@ -68,11 +68,11 @@ class TDTestCase:
tdSql
.
checkRows
(
0
)
# tdSql.query("select * from t1 where c1 between 0x64 and 0x69")
# tdSql.checkRows(6)
#
tdSql.query("select * from t1 where c1 not between 100 and 106")
#
tdSql.checkRows(11)
tdSql
.
query
(
"select * from t1 where c1 not between 100 and 106"
)
tdSql
.
checkRows
(
11
)
tdSql
.
query
(
f
"select * from t1 where c1 between
{
2
**
31
-
2
}
and
{
2
**
31
+
1
}
"
)
tdSql
.
checkRows
(
1
)
tdSql
.
error
(
f
"select * from t2 where c1 between null and
{
1
-
2
**
31
}
"
)
tdSql
.
query
(
f
"select * from t2 where c1 between null and
{
1
-
2
**
31
}
"
)
# tdSql.checkRows(3)
tdSql
.
query
(
f
"select * from t2 where c1 between
{
-
2
**
31
}
and
{
1
-
2
**
31
}
"
)
tdSql
.
checkRows
(
1
)
...
...
@@ -88,12 +88,12 @@ class TDTestCase:
tdSql
.
query
(
"select * from t1 where c2 between 'DC3' and 'SYN'"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from t1 where c2 not between 0.1 and 0.2"
)
#
tdSql.checkRows(11)
tdSql
.
checkRows
(
11
)
tdSql
.
query
(
f
"select * from t1 where c2 between
{
pow
(
10
,
38
)
*
3.4
}
and
{
pow
(
10
,
38
)
*
3.4
+
1
}
"
)
# tdSql.checkRows(1)
tdSql
.
query
(
f
"select * from t2 where c2 between
{
-
3.4
*
10
**
38
-
1
}
and
{
-
3.4
*
10
**
38
}
"
)
# tdSql.checkRows(2)
tdSql
.
error
(
f
"select * from t2 where c2 between null and
{
-
3.4
*
10
**
38
}
"
)
tdSql
.
query
(
f
"select * from t2 where c2 between null and
{
-
3.4
*
10
**
38
}
"
)
# tdSql.checkRows(3)
tdLog
.
printNoPrefix
(
"==========step6:query bigint type"
)
...
...
@@ -101,7 +101,7 @@ class TDTestCase:
tdSql
.
query
(
f
"select * from t1 where c3 between
{
2
**
31
}
and
{
2
**
31
+
10
}
"
)
tdSql
.
checkRows
(
10
)
tdSql
.
query
(
f
"select * from t1 where c3 between
{
-
2
**
63
}
and
{
2
**
63
}
"
)
#
tdSql.checkRows(11)
tdSql
.
checkRows
(
11
)
tdSql
.
query
(
f
"select * from t1 where c3 between
{
2
**
31
+
10
}
and
{
2
**
31
}
"
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
"select * from t1 where c3 between 'a' and 'z'"
)
...
...
@@ -112,7 +112,7 @@ class TDTestCase:
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from t2 where c3 between
{
-
2
**
63
}
and
{
1
-
2
**
63
}
"
)
# tdSql.checkRows(3)
tdSql
.
error
(
f
"select * from t2 where c3 between null and
{
1
-
2
**
63
}
"
)
tdSql
.
query
(
f
"select * from t2 where c3 between null and
{
1
-
2
**
63
}
"
)
# tdSql.checkRows(2)
tdLog
.
printNoPrefix
(
"==========step7:query double type"
)
...
...
@@ -129,10 +129,10 @@ class TDTestCase:
tdSql
.
query
(
"select * from t1 where c4 not between 1 and 2"
)
# tdSql.checkRows(0)
tdSql
.
query
(
f
"select * from t1 where c4 between
{
1.7
*
10
**
308
}
and
{
1.7
*
10
**
308
+
1
}
"
)
#
tdSql.checkRows(1)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
f
"select * from t2 where c4 between
{
-
1.7
*
10
**
308
-
1
}
and
{
-
1.7
*
10
**
308
}
"
)
# tdSql.checkRows(3)
tdSql
.
error
(
f
"select * from t2 where c4 between null and
{
-
1.7
*
10
**
308
}
"
)
tdSql
.
query
(
f
"select * from t2 where c4 between null and
{
-
1.7
*
10
**
308
}
"
)
# tdSql.checkRows(3)
tdLog
.
printNoPrefix
(
"==========step8:query smallint type"
)
...
...
@@ -151,7 +151,7 @@ class TDTestCase:
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from t2 where c5 between -32768 and -32767"
)
tdSql
.
checkRows
(
1
)
tdSql
.
error
(
"select * from t2 where c5 between null and -32767"
)
tdSql
.
query
(
"select * from t2 where c5 between null and -32767"
)
# tdSql.checkRows(1)
tdLog
.
printNoPrefix
(
"==========step9:query tinyint type"
)
...
...
@@ -170,21 +170,21 @@ class TDTestCase:
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from t2 where c6 between -128 and -127"
)
tdSql
.
checkRows
(
1
)
tdSql
.
error
(
"select * from t2 where c6 between null and -127"
)
tdSql
.
query
(
"select * from t2 where c6 between null and -127"
)
# tdSql.checkRows(3)
tdLog
.
printNoPrefix
(
"==========step10:invalid query type"
)
#
tdSql.query("select * from supt where location between 'beijing' and 'shanghai'")
#
tdSql.checkRows(23)
#
#
非0值均解析为1,因此"between 负值 and o"解析为"between 1 and 0"
#
tdSql.query("select * from supt where isused between 0 and 1")
#
tdSql.checkRows(23)
#
tdSql.query("select * from supt where isused between -1 and 0")
#
tdSql.checkRows(0)
#
tdSql.error("select * from supt where isused between false and true")
#
tdSql.query("select * from supt where family between '拖拉机' and '自行车'")
#
tdSql.checkRows(23)
tdSql
.
query
(
"select * from supt where location between 'beijing' and 'shanghai'"
)
tdSql
.
checkRows
(
23
)
# 非0值均解析为1,因此"between 负值 and o"解析为"between 1 and 0"
tdSql
.
query
(
"select * from supt where isused between 0 and 1"
)
tdSql
.
checkRows
(
23
)
tdSql
.
query
(
"select * from supt where isused between -1 and 0"
)
tdSql
.
checkRows
(
0
)
tdSql
.
error
(
"select * from supt where isused between false and true"
)
tdSql
.
query
(
"select * from supt where family between '拖拉机' and '自行车'"
)
tdSql
.
checkRows
(
23
)
tdLog
.
printNoPrefix
(
"==========step11:query HEX/OCT/BIN type"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录