Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
2dot5
ClickHouse
提交
5afb518c
C
ClickHouse
项目概览
2dot5
/
ClickHouse
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
ClickHouse
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
5afb518c
编写于
12月 18, 2019
作者:
A
alexey-milovidov
提交者:
GitHub
12月 18, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #8253 from nvartolomei/nv/constraints-coverage
Improve settings constraints tests coverage
上级
89a2ec39
d1de5bb8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
137 addition
and
56 deletion
+137
-56
dbms/tests/integration/helpers/cluster.py
dbms/tests/integration/helpers/cluster.py
+15
-2
dbms/tests/integration/test_settings_constraints/configs/users.xml
...s/integration/test_settings_constraints/configs/users.xml
+24
-0
dbms/tests/integration/test_settings_constraints/test.py
dbms/tests/integration/test_settings_constraints/test.py
+98
-54
未找到文件。
dbms/tests/integration/helpers/cluster.py
浏览文件 @
5afb518c
...
...
@@ -625,8 +625,21 @@ class ClickHouseInstance:
return
self
.
client
.
query_and_get_answer_with_error
(
sql
,
stdin
,
timeout
,
settings
,
user
)
# Connects to the instance via HTTP interface, sends a query and returns the answer
def
http_query
(
self
,
sql
,
data
=
None
):
return
urllib
.
urlopen
(
"http://"
+
self
.
ip_address
+
":8123/?query="
+
urllib
.
quote
(
sql
,
safe
=
''
),
data
).
read
()
def
http_query
(
self
,
sql
,
data
=
None
,
params
=
None
,
user
=
None
):
if
params
is
None
:
params
=
{}
else
:
params
=
params
.
copy
()
params
[
"query"
]
=
sql
auth
=
""
if
user
:
auth
=
"{}@"
.
format
(
user
)
url
=
"http://"
+
auth
+
self
.
ip_address
+
":8123/?"
+
urllib
.
urlencode
(
params
)
return
urllib
.
urlopen
(
url
,
data
).
read
()
def
restart_clickhouse
(
self
,
stop_start_wait_sec
=
5
,
kill
=
False
):
if
not
self
.
stay_alive
:
...
...
dbms/tests/integration/test_settings_constraints/configs/users.xml
浏览文件 @
5afb518c
...
...
@@ -14,6 +14,14 @@
</force_index_by_date>
</constraints>
</default>
<readonly_profile>
<readonly>
1
</readonly>
</readonly_profile>
<no_dll_profile>
<allow_ddl>
0
</allow_ddl>
</no_dll_profile>
</profiles>
<users>
...
...
@@ -25,6 +33,22 @@
<profile>
default
</profile>
<quota>
default
</quota>
</default>
<readonly_user>
<password></password>
<networks
incl=
"networks"
replace=
"replace"
>
<ip>
::/0
</ip>
</networks>
<profile>
readonly_profile
</profile>
<quota>
default
</quota>
</readonly_user>
<no_dll_user>
<password></password>
<networks
incl=
"networks"
replace=
"replace"
>
<ip>
::/0
</ip>
</networks>
<profile>
no_dll_profile
</profile>
<quota>
default
</quota>
</no_dll_user>
</users>
<quotas>
...
...
dbms/tests/integration/test_settings_constraints/test.py
浏览文件 @
5afb518c
...
...
@@ -29,68 +29,112 @@ def test_system_settings(started_cluster):
"readonly
\t
0
\t\\
N
\t\\
N
\t
0
\n
"
def
test_read_only_constraint
(
started_cluster
):
# Change a setting for session with SET.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='force_index_by_date'"
)
==
\
"0
\n
"
expected_error
=
"Setting force_index_by_date should not be changed"
assert
expected_error
in
instance
.
query_and_get_error
(
"SET force_index_by_date=1"
)
# Change a setting for query with SETTINGS.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='force_index_by_date'"
)
==
\
"0
\n
"
def
test_system_constraints
(
started_cluster
):
assert_query_settings
(
instance
,
"SELECT 1"
,
settings
=
{
'readonly'
:
0
},
exception
=
"Cannot modify 'readonly'"
,
user
=
"readonly_user"
)
assert
expected_error
in
instance
.
query_and_get_error
(
"SELECT value FROM system.settings WHERE name='force_index_by_date' "
"SETTINGS force_index_by_date=1"
)
assert_query_settings
(
instance
,
"SELECT 1"
,
settings
=
{
'allow_ddl'
:
1
},
exception
=
"Cannot modify 'allow_ddl'"
,
user
=
"no_dll_user"
)
def
test_min_constraint
(
started_cluster
):
# Change a setting for session with SET.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"10000000000
\n
"
def
test_read_only_constraint
(
started_cluster
):
# Default value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='force_index_by_date'"
,
settings
=
{},
result
=
"0"
)
assert
instance
.
query
(
"SET max_memory_usage=5000000000;
\n
"
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"5000000000
\n
"
# Invalid value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='force_index_by_date'"
,
settings
=
{
'force_index_by_date'
:
1
},
result
=
None
,
exception
=
"Setting force_index_by_date should not be changed"
)
expected_error
=
"Setting max_memory_usage shouldn't be less than 5000000000"
assert
expected_error
in
instance
.
query_and_get_error
(
"SET max_memory_usage=4999999999"
)
# Change a setting for query with SETTINGS.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"10000000000
\n
"
def
test_min_constraint
(
started_cluster
):
# Default value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
{},
result
=
"10000000000"
)
assert
instance
.
query
(
"SET max_memory_usage=5000000001;
\n
"
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"5000000001
\n
"
# Valid value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
settings
=
{
'max_memory_usage'
:
5000000000
},
result
=
"5000000000"
)
assert
expected_error
in
instance
.
query_and_get_error
(
"SELECT value FROM system.settings WHERE name='max_memory_usage' "
"SETTINGS max_memory_usage=4999999999"
)
# Invalid value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
settings
=
{
'max_memory_usage'
:
4999999999
},
result
=
None
,
exception
=
"Setting max_memory_usage shouldn't be less than 5000000000"
)
def
test_max_constraint
(
started_cluster
):
# Change a setting for session with SET.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"10000000000
\n
"
assert
instance
.
query
(
"SET max_memory_usage=20000000000;
\n
"
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"20000000000
\n
"
expected_error
=
"Setting max_memory_usage shouldn't be greater than 20000000000"
assert
expected_error
in
instance
.
query_and_get_error
(
"SET max_memory_usage=20000000001"
)
# Change a setting for query with SETTINGS.
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
)
==
\
"10000000000
\n
"
assert
instance
.
query
(
"SELECT value FROM system.settings WHERE name='max_memory_usage' "
"SETTINGS max_memory_usage=19999999999"
)
==
"19999999999
\n
"
assert
expected_error
in
instance
.
query_and_get_error
(
"SELECT value FROM system.settings WHERE name='max_memory_usage' "
"SETTINGS max_memory_usage=20000000001"
)
\ No newline at end of file
# Default value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
{},
result
=
"10000000000"
)
# Valid value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
settings
=
{
'max_memory_usage'
:
20000000000
},
result
=
"20000000000"
)
# Invalid value
assert_query_settings
(
instance
,
"SELECT value FROM system.settings WHERE name='max_memory_usage'"
,
settings
=
{
'max_memory_usage'
:
20000000001
},
result
=
None
,
exception
=
"Setting max_memory_usage shouldn't be greater than 20000000000"
)
def
assert_query_settings
(
instance
,
query
,
settings
,
result
=
None
,
exception
=
None
,
user
=
None
):
"""
Try and send the query with custom settings via all available methods:
1. TCP Protocol with settings packet
2. HTTP Protocol with settings params
3. TCP Protocol with session level settings
4. TCP Protocol with query level settings
"""
if
not
settings
:
settings
=
{}
# tcp level settings
if
exception
:
assert
exception
in
instance
.
query_and_get_error
(
query
,
settings
=
settings
,
user
=
user
)
else
:
assert
instance
.
query
(
query
,
settings
=
settings
,
user
=
user
).
strip
()
==
result
# http level settings
if
exception
:
assert
exception
in
instance
.
http_query
(
query
,
params
=
settings
,
user
=
user
)
else
:
assert
instance
.
http_query
(
query
,
params
=
settings
,
user
=
user
).
strip
()
==
result
# session level settings
queries
=
""
for
k
,
v
in
settings
.
items
():
queries
+=
"SET {}={};
\n
"
.
format
(
k
,
v
)
queries
+=
query
if
exception
:
assert
exception
in
instance
.
query_and_get_error
(
queries
,
user
=
user
)
else
:
assert
instance
.
query
(
queries
,
user
=
user
).
strip
()
==
result
if
settings
:
query
+=
" SETTINGS "
for
ix
,
(
k
,
v
)
in
enumerate
(
settings
.
items
()):
query
+=
"{} = {}"
.
format
(
k
,
v
)
if
ix
!=
len
(
settings
)
-
1
:
query
+=
", "
if
exception
:
assert
exception
in
instance
.
query_and_get_error
(
queries
,
user
=
user
)
else
:
assert
instance
.
query
(
queries
,
user
=
user
).
strip
()
==
result
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录