Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
tp-qemu
提交
92f6c5c9
T
tp-qemu
项目概览
openeuler
/
tp-qemu
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
tp-qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
92f6c5c9
编写于
10月 31, 2018
作者:
Y
YongxueHong
提交者:
GitHub
10月 31, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1470 from lolyu/1612025
nfs_corrupt: check nfs is resumed before cont vm
上级
ade6fc31
90a9ea48
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
75 addition
and
46 deletion
+75
-46
generic/tests/cfg/nfs_corrupt.cfg
generic/tests/cfg/nfs_corrupt.cfg
+1
-1
generic/tests/nfs_corrupt.py
generic/tests/nfs_corrupt.py
+74
-45
未找到文件。
generic/tests/cfg/nfs_corrupt.cfg
浏览文件 @
92f6c5c9
...
@@ -14,5 +14,5 @@
...
@@ -14,5 +14,5 @@
drive_cache = none
drive_cache = none
kill_vm = yes
kill_vm = yes
post_command_noncritical = yes
post_command_noncritical = yes
wait_paused_timeout =
12
0
wait_paused_timeout =
24
0
nfs_stat_chk_re = "running"
nfs_stat_chk_re = "running"
generic/tests/nfs_corrupt.py
浏览文件 @
92f6c5c9
...
@@ -8,6 +8,10 @@ from virttest import utils_misc
...
@@ -8,6 +8,10 @@ from virttest import utils_misc
from
virttest
import
utils_net
from
virttest
import
utils_net
from
virttest
import
env_process
from
virttest
import
env_process
from
virttest
import
error_context
from
virttest
import
error_context
from
virttest
import
utils_disk
from
virttest
import
utils_numeric
from
virttest
import
virt_vm
from
virttest
import
qemu_monitor
class
NFSCorruptError
(
Exception
):
class
NFSCorruptError
(
Exception
):
...
@@ -21,6 +25,9 @@ class NFSCorruptConfig(object):
...
@@ -21,6 +25,9 @@ class NFSCorruptConfig(object):
"""
"""
This class sets up nfs_corrupt test environment.
This class sets up nfs_corrupt test environment.
"""
"""
iptables_template
=
(
"iptables -t filter -{{op}} INPUT -d {ip} -m state"
" --state NEW,RELATED,ESTABLISHED -p tcp --dport 2049"
" -j REJECT"
)
def
__init__
(
self
,
test
,
params
,
ip
=
"localhost"
):
def
__init__
(
self
,
test
,
params
,
ip
=
"localhost"
):
self
.
nfs_dir
=
os
.
path
.
join
(
test
.
tmpdir
,
"nfs_dir"
)
self
.
nfs_dir
=
os
.
path
.
join
(
test
.
tmpdir
,
"nfs_dir"
)
...
@@ -28,6 +35,7 @@ class NFSCorruptConfig(object):
...
@@ -28,6 +35,7 @@ class NFSCorruptConfig(object):
self
.
chk_re
=
params
.
get
(
"nfs_stat_chk_re"
,
"running"
)
self
.
chk_re
=
params
.
get
(
"nfs_stat_chk_re"
,
"running"
)
self
.
nfs_ip
=
ip
self
.
nfs_ip
=
ip
self
.
required_size
=
params
.
object_params
(
"stg"
).
get
(
"image_size"
)
self
.
required_size
=
params
.
object_params
(
"stg"
).
get
(
"image_size"
)
self
.
iptables_template
=
self
.
iptables_template
.
format
(
ip
=
self
.
nfs_ip
)
cmd_list
=
self
.
_get_service_cmds
()
cmd_list
=
self
.
_get_service_cmds
()
self
.
start_cmd
=
cmd_list
[
0
]
self
.
start_cmd
=
cmd_list
[
0
]
...
@@ -89,14 +97,19 @@ class NFSCorruptConfig(object):
...
@@ -89,14 +97,19 @@ class NFSCorruptConfig(object):
error_context
.
context
(
"Checking available space to export"
,
error_context
.
context
(
"Checking available space to export"
,
logging
.
info
)
logging
.
info
)
stat
=
os
.
statvfs
(
self
.
nfs_dir
)
stat
=
os
.
statvfs
(
self
.
nfs_dir
)
free
=
str
(
stat
.
f_bsize
*
stat
.
f_bfree
)
+
'B'
free
=
stat
.
f_bsize
*
stat
.
f_bfree
available_size
=
float
(
utils_misc
.
normalize_data_size
(
free
,
required
=
float
(
order_magnitude
=
"M"
))
utils_misc
.
normalize_data_size
(
required_size
=
float
(
utils_misc
.
normalize_data_size
(
self
.
required_size
,
self
.
required_size
,
order_magnitude
=
"M"
))
order_magnitude
=
"B"
if
available_size
<
required_size
:
)
raise
NFSCorruptError
(
"Space available: %fM, space needed: %fM"
)
%
(
available_size
,
required_size
))
if
free
<
required
:
msg
=
"Space available: %s, space needed: %s"
%
(
utils_numeric
.
format_size_human_readable
(
free
),
self
.
required_size
)
raise
NFSCorruptError
(
msg
)
if
force_start
:
if
force_start
:
self
.
start_service
()
self
.
start_service
()
...
@@ -112,12 +125,30 @@ class NFSCorruptConfig(object):
...
@@ -112,12 +125,30 @@ class NFSCorruptConfig(object):
@
error_context
.
context_aware
@
error_context
.
context_aware
def
cleanup
(
self
,
force_stop
=
False
):
def
cleanup
(
self
,
force_stop
=
False
):
error_context
.
context
(
"Cleaning up test NFS share"
,
logging
.
info
)
error_context
.
context
(
"Cleaning up test NFS share"
,
logging
.
info
)
process
.
run
(
"umount %s"
%
self
.
mnt_dir
,
shell
=
True
)
process
.
run
(
"umount
-l -f
%s"
%
self
.
mnt_dir
,
shell
=
True
)
process
.
run
(
"exportfs -u %s:%s"
%
(
self
.
nfs_ip
,
self
.
nfs_dir
),
process
.
run
(
"exportfs -u %s:%s"
%
(
self
.
nfs_ip
,
self
.
nfs_dir
),
shell
=
True
)
shell
=
True
)
if
force_stop
:
if
force_stop
:
self
.
stop_service
()
self
.
stop_service
()
def
is_mounted
(
self
):
"""
Return True if nfs is mounted, otherwise False.
"""
return
utils_disk
.
is_mount
(
self
.
mnt_dir
)
def
is_mounted_dir_acessible
(
self
):
"""
Check to see if mount directory is accessible.
"""
if
not
self
.
is_mounted
():
return
False
try
:
os
.
stat
(
self
.
mnt_dir
)
except
OSError
:
return
False
return
True
def
start_service
(
self
):
def
start_service
(
self
):
"""
"""
Starts the NFS server.
Starts the NFS server.
...
@@ -143,13 +174,18 @@ class NFSCorruptConfig(object):
...
@@ -143,13 +174,18 @@ class NFSCorruptConfig(object):
:param chk_re: Regular expression that tells whether NFS is running
:param chk_re: Regular expression that tells whether NFS is running
or not.
or not.
"""
"""
status
=
process
.
system_output
(
self
.
status_cmd
,
ignore_status
=
True
,
out
=
process
.
run
(
self
.
status_cmd
,
ignore_status
=
True
,
shell
=
True
)
shell
=
True
)
if
re
.
findall
(
self
.
chk_re
,
out
.
stdout_text
):
if
re
.
findall
(
self
.
chk_re
,
status
):
return
True
return
True
else
:
else
:
return
False
return
False
def
iptables_rule_gen
(
self
,
op
=
'A'
):
"""
Generate iptables rules to block/accept nfs connection.
"""
return
self
.
iptables_template
.
format
(
op
=
op
)
@
error_context
.
context_aware
@
error_context
.
context_aware
def
run
(
test
,
params
,
env
):
def
run
(
test
,
params
,
env
):
...
@@ -190,7 +226,7 @@ def run(test, params, env):
...
@@ -190,7 +226,7 @@ def run(test, params, env):
cmd
=
"ls /dev/[sh]d[a-z]"
cmd
=
"ls /dev/[sh]d[a-z]"
cmd
+=
" | tail -n 1"
cmd
+=
" | tail -n 1"
return
session
.
cmd_output
(
cmd
)
return
session
.
cmd_output
(
cmd
)
.
rstrip
()
def
check_vm_status
(
vm
,
status
):
def
check_vm_status
(
vm
,
status
):
"""
"""
...
@@ -203,7 +239,7 @@ def run(test, params, env):
...
@@ -203,7 +239,7 @@ def run(test, params, env):
"""
"""
try
:
try
:
vm
.
verify_status
(
status
)
vm
.
verify_status
(
status
)
except
:
except
(
virt_vm
.
VMStatusError
,
qemu_monitor
.
MonitorLockError
)
:
return
False
return
False
else
:
else
:
return
True
return
True
...
@@ -225,19 +261,23 @@ def run(test, params, env):
...
@@ -225,19 +261,23 @@ def run(test, params, env):
env_process
.
preprocess_image
(
test
,
stg_params
,
image_name
)
env_process
.
preprocess_image
(
test
,
stg_params
,
image_name
)
vm
=
env
.
get_vm
(
params
[
"main_vm"
])
vm
=
env
.
get_vm
(
params
[
"main_vm"
])
vm
.
create
(
params
=
params
)
try
:
vm
.
create
(
params
=
params
)
except
Exception
:
config
.
cleanup
()
test
.
error
(
"failed to create VM"
)
session
=
vm
.
wait_for_login
(
timeout
=
int
(
params
.
get
(
"login_timeout"
,
360
)))
session
=
vm
.
wait_for_login
(
timeout
=
int
(
params
.
get
(
"login_timeout"
,
360
)))
nfs_devname
=
get_nfs_devname
(
params
,
session
)
nfs_devname
=
get_nfs_devname
(
params
,
session
)
# Write disk on NFS server
# Write disk on NFS server
error_context
.
context
(
"Write disk that image on NFS"
,
logging
.
info
)
error_context
.
context
(
"Write disk that image on NFS"
,
logging
.
info
)
write_disk_cmd
=
"dd if=/dev/urandom of=%s"
%
nfs_devname
write_disk_cmd
=
"dd if=/dev/zero of=%s oflag=direct"
%
nfs_devname
logging
.
info
(
"dd with command: %s"
,
write_disk_cmd
)
session
.
sendline
(
write_disk_cmd
)
session
.
sendline
(
write_disk_cmd
)
try
:
try
:
# Read some command output, it will timeout
# Read some command output, it will timeout
session
.
read_up_to_prompt
(
timeout
=
30
)
session
.
read_up_to_prompt
(
timeout
=
30
)
except
:
except
Exception
:
pass
pass
try
:
try
:
...
@@ -247,37 +287,26 @@ def run(test, params, env):
...
@@ -247,37 +287,26 @@ def run(test, params, env):
vm
.
verify_status
(
"running"
)
vm
.
verify_status
(
"running"
)
try
:
try
:
cmd
=
"iptables"
error_context
.
context
(
"Reject NFS connection on host"
,
cmd
+=
" -t filter"
logging
.
info
)
cmd
+=
" -A INPUT"
process
.
system
(
config
.
iptables_rule_gen
(
'A'
))
cmd
+=
" -d %s"
%
host_ip
cmd
+=
" -m state"
error_context
.
context
(
"Check if VM status is 'paused'"
,
cmd
+=
" --state NEW,RELATED,ESTABLISHED"
logging
.
info
)
cmd
+=
" -p tcp"
cmd
+=
" --dport 2049"
cmd
+=
" -j REJECT"
error_context
.
context
(
"Reject NFS connection on host"
,
logging
.
info
)
process
.
system
(
cmd
)
error_context
.
context
(
"Check if VM status is 'paused'"
,
logging
.
info
)
if
not
utils_misc
.
wait_for
(
if
not
utils_misc
.
wait_for
(
lambda
:
check_vm_status
(
vm
,
"paused"
),
lambda
:
check_vm_status
(
vm
,
"paused"
),
int
(
params
.
get
(
'wait_paused_timeout'
,
12
0
))):
int
(
params
.
get
(
'wait_paused_timeout'
,
24
0
))):
test
.
error
(
"Guest is not paused after stop NFS"
)
test
.
error
(
"Guest is not paused after stop NFS"
)
finally
:
finally
:
error_context
.
context
(
"Accept NFS connection on host"
,
logging
.
info
)
error_context
.
context
(
"Accept NFS connection on host"
,
cmd
=
"iptables"
logging
.
info
)
cmd
+=
" -t filter"
process
.
system
(
config
.
iptables_rule_gen
(
'D'
))
cmd
+=
" -D INPUT"
cmd
+=
" -d %s"
%
host_ip
error_context
.
context
(
"Ensure nfs is resumed"
,
logging
.
info
)
cmd
+=
" -m state"
nfs_resume_timeout
=
int
(
params
.
get
(
'nfs_resume_timeout'
,
240
))
cmd
+=
" --state NEW,RELATED,ESTABLISHED"
if
not
utils_misc
.
wait_for
(
config
.
is_mounted_dir_acessible
,
cmd
+=
" -p tcp"
nfs_resume_timeout
):
cmd
+=
" --dport 2049"
test
.
error
(
"NFS connection does not resume"
)
cmd
+=
" -j REJECT"
process
.
system
(
cmd
)
error_context
.
context
(
"Continue guest"
,
logging
.
info
)
error_context
.
context
(
"Continue guest"
,
logging
.
info
)
vm
.
resume
()
vm
.
resume
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录