Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
tp-qemu
提交
f6d38303
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,发现更多精彩内容 >>
未验证
提交
f6d38303
编写于
10月 23, 2018
作者:
Q
Qianqian Zhu
提交者:
GitHub
10月 23, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1154 from sitoliu/hotplug_loop
virtio_console.py: continuous hotplug/unplug virtio serial device
上级
a28bfdc9
e5f64480
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
93 addition
and
0 deletion
+93
-0
qemu/tests/cfg/virtio_console.cfg
qemu/tests/cfg/virtio_console.cfg
+3
-0
qemu/tests/virtio_console.py
qemu/tests/virtio_console.py
+90
-0
未找到文件。
qemu/tests/cfg/virtio_console.cfg
浏览文件 @
f6d38303
...
...
@@ -133,6 +133,9 @@
- replug_random:
only spread_linear
virtio_console_interruption = replug_random
- replug_loop:
only spread_linear
virtio_console_interruption = replug_loop
- suspend:
virtio_console_interruption = s3
- hibernate:
...
...
qemu/tests/virtio_console.py
浏览文件 @
f6d38303
...
...
@@ -19,6 +19,7 @@ from avocado.utils import process
from
virttest
import
error_context
from
virttest
import
qemu_virtio_port
from
virttest
import
env_process
from
virttest
import
qemu_qtree
from
virttest.utils_test.qemu
import
migration
from
virttest
import
utils_misc
from
virttest
import
funcatexit
...
...
@@ -563,12 +564,97 @@ def run(test, params, env):
logging
.
error
(
msg
)
test
.
fail
(
msg
)
def
get_bus_of_port
(
vm
,
port_device
):
"""
Get right virtio-serial-pci name by qtree
:param vm: vm object in this test
:param port_device: QDevice object of this port
"""
qtree
=
qemu_qtree
.
QtreeContainer
()
qtree_check_port
=
port_device
.
get_param
(
'id'
)
try
:
qtree
.
parse_info_qtree
(
vm
.
monitor
.
info
(
'qtree'
))
for
qbus
in
qtree
.
get_nodes
():
if
isinstance
(
qbus
,
qemu_qtree
.
QtreeBus
)
and
(
qbus
.
qtree
[
'type'
]
==
"virtio-serial-bus"
):
for
qdev
in
qbus
.
get_children
():
if
isinstance
(
qdev
,
qemu_qtree
.
QtreeDev
)
and
(
'id'
in
qdev
.
qtree
)
and
(
qdev
.
qtree
[
'id'
]
==
qtree_check_port
):
return
qbus
.
qtree
[
'id'
]
return
None
except
AttributeError
as
err
:
logging
.
warn
(
"Monitor deson't supoort qtree skip this test, error"
" log: %s "
%
err
)
@
error_context
.
context_aware
def
test_interrupted_transfer
():
"""
This test creates loopback between 2 ports and interrupts transfer
eg. by stopping the machine or by unplugging of the port.
"""
def
_replug_loop
():
""" Replug ports and pci in a loop """
def
_port_unplug
(
port_idx
):
dev
=
ports
[
port_idx
]
portdev
=
vm
.
devices
.
get_by_params
({
"name"
:
dev
.
qemu_id
})[
0
]
if
not
portdev
:
test
.
error
(
"No port named %s"
%
dev
.
qemu_id
)
if
portdev
.
get_param
(
"bus"
)
==
"None"
:
bus_info
=
portdev
.
get_param
(
"bus"
)
else
:
bus_info
=
get_bus_of_port
(
vm
,
portdev
)
port_property
=
dict
(
id
=
portdev
.
get_param
(
"id"
),
name
=
portdev
.
get_param
(
"name"
),
chardev
=
portdev
.
get_param
(
"chardev"
),
bus
=
bus_info
)
if
not
port_property
[
"bus"
]:
test
.
error
(
"Can't find the bus %s for this port"
%
bus_info
)
(
out
,
ver_out
)
=
vm
.
devices
.
simple_unplug
(
portdev
,
vm
.
monitor
)
if
not
ver_out
:
test
.
error
(
"Error occured when unplug %s"
%
dev
.
name
)
time
.
sleep
(
intr_time
)
return
port_property
def
_port_plug
(
device
,
property
):
portdev
=
qdevices
.
QDevice
(
device
)
for
key
,
value
in
{
'id'
:
property
[
'id'
],
'chardev'
:
property
[
'chardev'
],
'name'
:
property
[
'name'
],
'bus'
:
property
[
'bus'
]}.
items
():
portdev
.
set_param
(
key
,
value
)
(
out
,
ver_out
)
=
vm
.
devices
.
simple_hotplug
(
portdev
,
vm
.
monitor
)
if
not
ver_out
:
test
.
error
(
"Error occured when plug port %s."
%
property
[
'name'
])
time
.
sleep
(
intr_time
)
def
_pci_unplug
(
bus
):
device
=
vm
.
devices
.
get_by_params
({
"id"
:
str
(
bus
).
split
(
'.'
)[
0
]})[
0
]
if
not
device
:
test
.
error
(
"No bus %s in vm."
%
bus
)
bus_property
=
dict
(
id
=
device
.
get_param
(
"id"
))
(
out
,
ver_out
)
=
vm
.
devices
.
simple_unplug
(
device
,
vm
.
monitor
)
if
not
ver_out
:
test
.
error
(
"Error occured when plug bus. out: %s"
,
out
)
time
.
sleep
(
intr_time
)
return
bus_property
def
_pci_plug
(
property
):
bus
=
qdevices
.
QDevice
(
"virtio-serial-pci"
)
bus
.
set_param
(
'id'
,
property
[
'id'
])
(
out
,
ver_out
)
=
vm
.
devices
.
simple_hotplug
(
bus
,
vm
.
monitor
)
if
not
ver_out
:
test
.
error
(
"Error occured when plug bus. out: %s"
,
out
)
time
.
sleep
(
intr_time
)
send_prop
=
_port_unplug
(
0
)
recv_prop
=
_port_unplug
(
1
)
bus_prop
=
_pci_unplug
(
send_prop
[
'bus'
])
# replug all devices
_pci_plug
(
bus_prop
)
_port_plug
(
'virtserialport'
,
send_prop
)
_port_plug
(
'virtserialport'
,
recv_prop
)
def
_stop_cont
():
""" Stop and resume VM """
vm
.
pause
()
...
...
@@ -768,6 +854,10 @@ def run(test, params, env):
else
:
interruption
=
_console_random_replug
acceptable_loss
=
max
(
buflen
*
10
,
1000
)
elif
interruption
==
'replug_loop'
:
if
is_serialport
:
interruption
=
_replug_loop
acceptable_loss
=
max
(
buflen
*
15
,
1000
)
elif
interruption
==
's3'
:
interruption
=
_s3
acceptable_loss
=
2000
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录