提交 bc44b6e6 编写于 作者: Z Zhengtong Liu

nic_hotplug.py: fix serial console conflict

Conflict will happen if we try to open a new serial console instance
while there is already a activated instance existed from the same console
object. Updated the serial console operation here to get rid of this kind
of conflicts.
Signed-off-by: NZhengtong Liu <zhengtli@redhat.com>
上级 b3e1f774
...@@ -36,11 +36,13 @@ def run(test, params, env): ...@@ -36,11 +36,13 @@ def run(test, params, env):
:param params: Dictionary with the test parameters. :param params: Dictionary with the test parameters.
:param env: Dictionary with test environment. :param env: Dictionary with test environment.
""" """
def renew_ip_address(session, mac, is_linux_guest=True): def renew_ip_address(mac, is_linux_guest=True):
session = vm.wait_for_serial_login(timeout=login_timeout)
if not is_linux_guest: if not is_linux_guest:
utils_net.restart_windows_guest_network_by_key(session, utils_net.restart_windows_guest_network_by_key(session,
"macaddress", "macaddress",
mac) mac)
session.close()
return None return None
ifname = utils_net.get_linux_ifname(session, mac) ifname = utils_net.get_linux_ifname(session, mac)
p_cfg = "/etc/sysconfig/network-scripts/ifcfg-%s" % ifname p_cfg = "/etc/sysconfig/network-scripts/ifcfg-%s" % ifname
...@@ -52,9 +54,10 @@ def run(test, params, env): ...@@ -52,9 +54,10 @@ def run(test, params, env):
session.cmd_output_safe("dhclient -r", timeout=240) session.cmd_output_safe("dhclient -r", timeout=240)
session.cmd_output_safe("dhclient %s" % ifname, timeout=240) session.cmd_output_safe("dhclient %s" % ifname, timeout=240)
session.cmd_output_safe(arp_clean) session.cmd_output_safe(arp_clean)
session.close()
return None return None
def get_hotplug_nic_ip(vm, nic, session, is_linux_guest=True): def get_hotplug_nic_ip(vm, nic, is_linux_guest=True):
def __get_address(): def __get_address():
try: try:
index = [ index = [
...@@ -67,7 +70,7 @@ def run(test, params, env): ...@@ -67,7 +70,7 @@ def run(test, params, env):
(nic["nic_name"], vm.name)) (nic["nic_name"], vm.name))
except (virt_vm.VMIPAddressMissingError, except (virt_vm.VMIPAddressMissingError,
virt_vm.VMAddressVerificationError): virt_vm.VMAddressVerificationError):
renew_ip_address(session, nic["mac"], is_linux_guest) renew_ip_address(nic["mac"], is_linux_guest)
return return
nic_ip = utils_misc.wait_for(__get_address, timeout=360) nic_ip = utils_misc.wait_for(__get_address, timeout=360)
...@@ -80,11 +83,12 @@ def run(test, params, env): ...@@ -80,11 +83,12 @@ def run(test, params, env):
logging.debug("\tARP table: %s", arps) logging.debug("\tARP table: %s", arps)
return None return None
def ping_hotplug_nic(ip, mac, session, is_linux_guest): def ping_hotplug_nic(ip, mac, is_linux_guest):
status, output = utils_test.ping(ip, 10, timeout=30) status, output = utils_test.ping(ip, 10, timeout=30)
if status != 0: if status != 0:
if not is_linux_guest: if not is_linux_guest:
return status, output return status, output
session = vm.wait_for_serial_login(timeout=login_timeout)
ifname = utils_net.get_linux_ifname(session, mac) ifname = utils_net.get_linux_ifname(session, mac)
add_route_cmd = "route add %s dev %s" % (ip, ifname) add_route_cmd = "route add %s dev %s" % (ip, ifname)
del_route_cmd = "route del %s dev %s" % (ip, ifname) del_route_cmd = "route del %s dev %s" % (ip, ifname)
...@@ -94,6 +98,7 @@ def run(test, params, env): ...@@ -94,6 +98,7 @@ def run(test, params, env):
status, output = utils_test.ping(hotnic_ip, 10, timeout=30) status, output = utils_test.ping(hotnic_ip, 10, timeout=30)
logging.info("Del the route.") logging.info("Del the route.")
status, output = session.cmd_output_safe(del_route_cmd) status, output = session.cmd_output_safe(del_route_cmd)
session.close()
return status, output return status, output
def device_add_nic(pci_model, netdev, device_id): def device_add_nic(pci_model, netdev, device_id):
...@@ -165,11 +170,11 @@ def run(test, params, env): ...@@ -165,11 +170,11 @@ def run(test, params, env):
logging.debug("Hotplug %sth '%s' nic named '%s'", logging.debug("Hotplug %sth '%s' nic named '%s'",
nic_index, nic_model, nic_name) nic_index, nic_model, nic_name)
hotplug_nic = vm.hotplug_nic(**nic_params) hotplug_nic = vm.hotplug_nic(**nic_params)
s_session.close()
logging.info("Check if new interface gets ip address") logging.info("Check if new interface gets ip address")
hotnic_ip = get_hotplug_nic_ip( hotnic_ip = get_hotplug_nic_ip(
vm, vm,
hotplug_nic, hotplug_nic,
s_session,
guest_is_linux) guest_is_linux)
if not hotnic_ip: if not hotnic_ip:
test.fail("Hotplug nic can not get ip address") test.fail("Hotplug nic can not get ip address")
...@@ -177,7 +182,7 @@ def run(test, params, env): ...@@ -177,7 +182,7 @@ def run(test, params, env):
logging.info("Ping guest's new ip from host") logging.info("Ping guest's new ip from host")
status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"], status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"],
s_session, guest_is_linux) guest_is_linux)
if status: if status:
err_msg = "New nic failed ping test, error info: '%s'" err_msg = "New nic failed ping test, error info: '%s'"
test.fail(err_msg % output) test.fail(err_msg % output)
...@@ -185,12 +190,11 @@ def run(test, params, env): ...@@ -185,12 +190,11 @@ def run(test, params, env):
logging.info("Reboot vm after hotplug nic") logging.info("Reboot vm after hotplug nic")
# reboot vm via serial port since some guest can't auto up # reboot vm via serial port since some guest can't auto up
# hotplug nic and next step will check is hotplug nic works. # hotplug nic and next step will check is hotplug nic works.
s_session = vm.reboot(session=s_session, serial=True) session = vm.wait_for_serial_login(timeout=login_timeout)
vm.verify_alive() vm.reboot(session, serial=True).close()
hotnic_ip = get_hotplug_nic_ip( hotnic_ip = get_hotplug_nic_ip(
vm, vm,
hotplug_nic, hotplug_nic,
s_session,
guest_is_linux) guest_is_linux)
if not hotnic_ip: if not hotnic_ip:
test.fail( test.fail(
...@@ -198,7 +202,7 @@ def run(test, params, env): ...@@ -198,7 +202,7 @@ def run(test, params, env):
logging.info("Ping guest's new ip from host") logging.info("Ping guest's new ip from host")
status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"], status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"],
s_session, guest_is_linux) guest_is_linux)
if status: if status:
err_msg = "New nic failed ping test, error info: '%s'" err_msg = "New nic failed ping test, error info: '%s'"
test.fail(err_msg % output) test.fail(err_msg % output)
...@@ -209,7 +213,7 @@ def run(test, params, env): ...@@ -209,7 +213,7 @@ def run(test, params, env):
vm.resume() vm.resume()
logging.info("Ping guest's new ip after resume") logging.info("Ping guest's new ip after resume")
status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"], status, output = ping_hotplug_nic(host_ip_addr, hotplug_nic["mac"],
s_session, guest_is_linux) guest_is_linux)
if status: if status:
err_msg = "New nic failed ping test after stop/cont, " err_msg = "New nic failed ping test after stop/cont, "
err_msg += "error info: '%s'" % output err_msg += "error info: '%s'" % output
...@@ -222,17 +226,16 @@ def run(test, params, env): ...@@ -222,17 +226,16 @@ def run(test, params, env):
unplug_nic_index = random.randint(0, len(nic_hotplugged) - 1) unplug_nic_index = random.randint(0, len(nic_hotplugged) - 1)
vm.hotunplug_nic(nic_hotplugged[unplug_nic_index].nic_name) vm.hotunplug_nic(nic_hotplugged[unplug_nic_index].nic_name)
nic_hotplugged.pop(unplug_nic_index) nic_hotplugged.pop(unplug_nic_index)
s_session = vm.reboot(session=s_session, serial=True) session = vm.wait_for_serial_login(timeout=login_timeout)
vm.verify_alive() vm.reboot(session, serial=True).close()
s_session.close()
finally:
for nic in nic_hotplugged: for nic in nic_hotplugged:
vm.hotunplug_nic(nic.nic_name) vm.hotunplug_nic(nic.nic_name)
logging.info("Re-enabling the primary link(s)") logging.info("Re-enabling the primary link(s)")
for nic in primary_nic: for nic in primary_nic:
vm.set_link(nic.device_id, up=True) vm.set_link(nic.device_id, up=True)
logging.info("Reboot vm to verify it alive after hotunplug nic(s)") logging.info("Reboot vm to verify it alive after hotunplug nic(s)")
serial = len(vm.virtnet) > 0 and False or True session = vm.wait_for_serial_login(timeout=login_timeout)
session = vm.reboot(serial=serial) vm.reboot(session, serial=True).close()
vm.verify_alive() finally:
session.close() if s_session:
s_session.close()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册