
Include: - util modules. such as table_parser, ssh/localhost clients, cli module, exception, logger, etc. Util modules are mostly used by keywords. - keywords modules. These are helper functions that are used directly by test functions. - platform (with platform or platform_sanity marker) and stx-openstack (with sanity, sx_sanity, cpe_sanity, or storage_sanity marker) sanity testcases - pytest config conftest, and test fixture modules - test config file template/example Required packages: - python3.4 or python3.5 - pytest >=3.10,<4.0 - pexpect - requests - pyyaml - selenium (firefox, ffmpeg, pyvirtualdisplay, Xvfb or Xephyr or Xvnc) Limitations: - Anything that requires copying from Test File Server will not work until a public share is configured to shared test files. Tests skipped for now. Co-Authored-By: Maria Yousaf <maria.yousaf@windriver.com> Co-Authored-By: Marvin Huang <marvin.huang@windriver.com> Co-Authored-By: Yosief Gebremariam <yosief.gebremariam@windriver.com> Co-Authored-By: Paul Warner <paul.warner@windriver.com> Co-Authored-By: Xueguang Ma <Xueguang.Ma@windriver.com> Co-Authored-By: Charles Chen <charles.chen@windriver.com> Co-Authored-By: Daniel Graziano <Daniel.Graziano@windriver.com> Co-Authored-By: Jordan Li <jordan.li@windriver.com> Co-Authored-By: Nimalini Rasa <nimalini.rasa@windriver.com> Co-Authored-By: Senthil Mukundakumar <senthil.mukundakumar@windriver.com> Co-Authored-By: Anuejyan Manokeran <anujeyan.manokeran@windriver.com> Co-Authored-By: Peng Peng <peng.peng@windriver.com> Co-Authored-By: Chris Winnicki <chris.winnicki@windriver.com> Co-Authored-By: Joe Vimar <Joe.Vimar@windriver.com> Co-Authored-By: Alex Kozyrev <alex.kozyrev@windriver.com> Co-Authored-By: Jack Ding <jack.ding@windriver.com> Co-Authored-By: Ming Lei <ming.lei@windriver.com> Co-Authored-By: Ankit Jain <ankit.jain@windriver.com> Co-Authored-By: Eric Barrett <eric.barrett@windriver.com> Co-Authored-By: William Jia <william.jia@windriver.com> Co-Authored-By: Joseph Richard <Joseph.Richard@windriver.com> Co-Authored-By: Aldo Mcfarlane <aldo.mcfarlane@windriver.com> Story: 2005892 Task: 33750 Signed-off-by: Yang Liu <yang.liu@windriver.com> Change-Id: I7a88a47e09733d39f024144530f5abb9aee8cad2
86 lines
2.8 KiB
Python
Executable File
86 lines
2.8 KiB
Python
Executable File
#
|
|
# Copyright (c) 2019 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
|
|
import time
|
|
from pytest import mark, skip, param
|
|
|
|
from utils.tis_log import LOG
|
|
|
|
from consts.stx import VMStatus
|
|
from consts.timeout import VMTimeout
|
|
from keywords import host_helper, system_helper, vm_helper, network_helper
|
|
from testfixtures.recover_hosts import HostsToRecover
|
|
|
|
|
|
@mark.usefixtures('check_alarms')
|
|
@mark.parametrize('host_type', [
|
|
param('controller', marks=mark.sanity),
|
|
'compute',
|
|
# 'storage'
|
|
])
|
|
def test_system_persist_over_host_reboot(host_type):
|
|
"""
|
|
Validate Inventory summary over reboot of one of the controller see if
|
|
data persists over reboot
|
|
|
|
Test Steps:
|
|
- capture Inventory summary for list of hosts on system service-list
|
|
and neutron agent-list
|
|
- reboot the current Controller-Active
|
|
- Wait for reboot to complete
|
|
- Validate key items from inventory persist over reboot
|
|
|
|
"""
|
|
if host_type == 'controller':
|
|
host = system_helper.get_active_controller_name()
|
|
elif host_type == 'compute':
|
|
if system_helper.is_aio_system():
|
|
skip("No compute host for AIO system")
|
|
|
|
host = None
|
|
else:
|
|
hosts = system_helper.get_hosts(personality='storage')
|
|
if not hosts:
|
|
skip(msg="Lab has no storage nodes. Skip rebooting storage node.")
|
|
|
|
host = hosts[0]
|
|
|
|
LOG.tc_step("Pre-check for system status")
|
|
system_helper.wait_for_services_enable()
|
|
up_hypervisors = host_helper.get_up_hypervisors()
|
|
network_helper.wait_for_agents_healthy(hosts=up_hypervisors)
|
|
|
|
LOG.tc_step("Launch a vm")
|
|
vm_id = vm_helper.boot_vm(cleanup='function')[1]
|
|
vm_helper.wait_for_vm_pingable_from_natbox(vm_id)
|
|
|
|
if host is None:
|
|
host = vm_helper.get_vm_host(vm_id)
|
|
|
|
LOG.tc_step("Reboot a {} node and wait for reboot completes: "
|
|
"{}".format(host_type, host))
|
|
HostsToRecover.add(host)
|
|
host_helper.reboot_hosts(host)
|
|
host_helper.wait_for_hosts_ready(host)
|
|
|
|
LOG.tc_step("Check vm is still active and pingable after {} "
|
|
"reboot".format(host))
|
|
vm_helper.wait_for_vm_status(vm_id, status=VMStatus.ACTIVE, fail_ok=False)
|
|
vm_helper.wait_for_vm_pingable_from_natbox(vm_id=vm_id,
|
|
timeout=VMTimeout.DHCP_RETRY)
|
|
|
|
LOG.tc_step("Check neutron agents and system services are in good state "
|
|
"after {} reboot".format(host))
|
|
network_helper.wait_for_agents_healthy(up_hypervisors)
|
|
system_helper.wait_for_services_enable()
|
|
|
|
if host in up_hypervisors:
|
|
LOG.tc_step("Check {} can still host vm after reboot".format(host))
|
|
if not vm_helper.get_vm_host(vm_id) == host:
|
|
time.sleep(30)
|
|
vm_helper.live_migrate_vm(vm_id, destination_host=host)
|