Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
tp-qemu
提交
eb9da2d9
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,发现更多精彩内容 >>
未验证
提交
eb9da2d9
编写于
2月 14, 2018
作者:
X
Xu Han
提交者:
GitHub
2月 14, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1168 from aliang123/1507185
fix virtio-scsi-pci plug/unplug with repitition fail issue
上级
6c7a9d81
02761052
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
49 addition
and
11 deletion
+49
-11
qemu/tests/block_hotplug.py
qemu/tests/block_hotplug.py
+49
-11
未找到文件。
qemu/tests/block_hotplug.py
浏览文件 @
eb9da2d9
import
logging
import
re
import
random
from
virttest
import
data_dir
from
virttest
import
storage
...
...
@@ -7,6 +8,7 @@ from virttest import error_context
from
virttest
import
utils_misc
from
virttest
import
utils_test
from
virttest.qemu_devices
import
qdevices
from
virttest
import
qemu_qtree
@
error_context
.
context_aware
...
...
@@ -56,6 +58,17 @@ def run(test, params, env):
disk
=
list
(
set
(
disk2
).
difference
(
set
(
disk1
)))
return
disk
def
unplug_device
(
vm
,
get_disk_cmd
,
device
):
"""
Unplug device
"""
disks_before_unplug
=
find_disk
(
vm
,
get_disk_cmd
)
device
.
unplug
(
vm
.
monitor
)
device
.
verify_unplug
(
""
,
vm
.
monitor
)
unplug_status
=
utils_misc
.
wait_for
(
lambda
:
len
(
get_new_disk
(
find_disk
(
vm
,
get_disk_cmd
),
disks_before_unplug
))
!=
0
,
pause
)
return
unplug_status
img_list
=
params
.
get
(
"images"
).
split
()
img_format_type
=
params
.
get
(
"img_format_type"
,
"qcow2"
)
pci_type
=
params
.
get
(
"pci_type"
,
"virtio-blk-pci"
)
...
...
@@ -67,7 +80,6 @@ def run(test, params, env):
disk_op_timeout
=
int
(
params
.
get
(
"disk_op_timeout"
,
360
))
get_disk_cmd
=
params
.
get
(
"get_disk_cmd"
)
context_msg
=
"Running sub test '%s' %s"
device_list
=
[]
disk_index
=
params
.
objects
(
"disk_index"
)
disk_letter
=
params
.
objects
(
"disk_letter"
)
...
...
@@ -75,6 +87,9 @@ def run(test, params, env):
vm
.
verify_alive
()
for
iteration
in
xrange
(
repeat_times
):
device_list
=
[]
controller_list
=
[]
controller_device_dict
=
{}
error_context
.
context
(
"Hotplug block device (iteration %d)"
%
iteration
,
logging
.
info
)
...
...
@@ -91,7 +106,8 @@ def run(test, params, env):
if
params
.
get
(
"need_controller"
,
"no"
)
==
"yes"
:
controller_model
=
params
.
get
(
"controller_model"
)
controller
=
qdevices
.
QDevice
(
controller_model
)
controller
=
qdevices
.
QDevice
(
controller_model
,
params
=
{
"id"
:
"hotadded_scsi%s"
%
num
})
bus_extra_param
=
params
.
get
(
"bus_extra_params_%s"
%
img_list
[
num
+
1
])
# TODO:Add iothread support for qdevice
if
bus_extra_param
and
"iothread"
in
bus_extra_param
:
...
...
@@ -104,6 +120,8 @@ def run(test, params, env):
if
not
ver_out
:
err
=
"%s is not in qtree after hotplug"
%
controller_model
test
.
fail
(
err
)
else
:
controller_list
.
append
(
controller
)
drive
=
qdevices
.
QRHDrive
(
"block%d"
%
num
)
drive
.
set_param
(
"file"
,
find_image
(
img_list
[
num
+
1
]))
...
...
@@ -113,6 +131,8 @@ def run(test, params, env):
device
.
set_param
(
"drive"
,
drive_id
)
device
.
set_param
(
"id"
,
"block%d"
%
num
)
if
params
.
get
(
"need_controller"
,
"no"
)
==
"yes"
and
bool
(
random
.
randrange
(
2
)):
device
.
set_param
(
"bus"
,
controller
.
get_param
(
"id"
)
+
'.0'
)
blk_extra_param
=
params
.
get
(
"blk_extra_params_%s"
%
img_list
[
num
+
1
])
if
blk_extra_param
and
"iothread"
in
blk_extra_param
:
match
=
re
.
search
(
"iothread=(\w+)"
,
blk_extra_param
)
...
...
@@ -130,6 +150,20 @@ def run(test, params, env):
new_disks
=
get_new_disk
(
disks_before_plug
,
disks_after_plug
)
else
:
test
.
fail
(
"Can't get new disks"
)
if
params
.
get
(
"need_controller"
,
"no"
)
==
"yes"
:
info_qtree
=
vm
.
monitor
.
info
(
'qtree'
,
False
)
qtree
=
qemu_qtree
.
QtreeContainer
()
qtree
.
parse_info_qtree
(
info_qtree
)
for
node
in
qtree
.
get_nodes
():
if
node
.
qtree
.
get
(
"id"
)
==
device
.
get_param
(
"id"
):
try
:
controller_id
=
node
.
parent
.
qtree
.
get
(
"id"
).
split
(
"."
)[
0
]
except
AttributeError
:
test
.
fail
(
"can't get parent of:
\n
%s"
%
node
)
controller_device_dict
.
setdefault
(
controller_id
,
[]).
append
(
device
)
break
else
:
test
.
fail
(
"Can't find device '%s' in qtree"
%
device
.
get_param
(
"id"
))
else
:
if
params
.
get
(
"drive_format"
)
in
pci_type
:
get_disk_cmd
+=
" | egrep -v '^/dev/[hsv]da[0-9]*$'"
...
...
@@ -185,16 +219,20 @@ def run(test, params, env):
logging
.
info
)
utils_test
.
run_virt_sub_test
(
test
,
params
,
env
,
sub_type
)
for
num
in
xrange
(
blk_num
):
error_context
.
context
(
"Unplug block device (iteration %d)"
%
iteration
,
logging
.
info
)
disks_before_unplug
=
find_disk
(
vm
,
get_disk_cmd
)
device_list
[
num
].
unplug
(
vm
.
monitor
)
device_list
[
num
].
verify_unplug
(
""
,
vm
.
monitor
)
unplug_status
=
utils_misc
.
wait_for
(
lambda
:
len
(
get_new_disk
(
find_disk
(
vm
,
get_disk_cmd
),
disks_before_unplug
))
!=
0
,
pause
)
error_context
.
context
(
"Unplug block device (iteration %d)"
%
iteration
,
logging
.
info
)
for
controller
in
controller_list
:
controller_id
=
controller
.
get_param
(
"id"
)
for
device
in
controller_device_dict
.
get
(
controller_id
,
[]):
unplug_status
=
unplug_device
(
vm
,
get_disk_cmd
,
device
)
if
not
unplug_status
:
test
.
fail
(
"Failed to unplug disks '%s'"
%
device
.
get_param
(
"id"
))
device_list
.
remove
(
device
)
controller
.
unplug
(
vm
.
monitor
)
for
device
in
device_list
:
unplug_status
=
unplug_device
(
vm
,
get_disk_cmd
,
device
)
if
not
unplug_status
:
test
.
fail
(
"Failed to unplug disks
"
)
test
.
fail
(
"Failed to unplug disks
'%s'"
%
device
.
get_param
(
"id"
)
)
sub_type
=
params
.
get
(
"sub_type_after_unplug"
)
if
sub_type
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录