Adding test_auto_recover_after_service_affecting_failure testcase
This test makes the standby controller crash, and then wait for the alarm 200.004 trigger and clear after the system automatic reboot Change-Id: Ia86eceef87879d42b5e692d9a01208c61547bdb2 Signed-off-by: do Nascimento, Pablo <Pablo.DoNascimento@windriver.com>
This commit is contained in:
25
keywords/linux/kernel/kernel_keywords.py
Normal file
25
keywords/linux/kernel/kernel_keywords.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from config.configuration_manager import ConfigurationManager
|
||||
from framework.ssh.prompt_response import PromptResponse
|
||||
from framework.ssh.ssh_connection import SSHConnection
|
||||
from keywords.base_keyword import BaseKeyword
|
||||
|
||||
|
||||
class KernelKeywords(BaseKeyword):
|
||||
"""
|
||||
Class for linux kernal related command keywords
|
||||
"""
|
||||
|
||||
def __init__(self, ssh_connection: SSHConnection):
|
||||
self.ssh_connection = ssh_connection
|
||||
|
||||
def trigger_kernel_crash(self):
|
||||
"""
|
||||
Makes the system crash, secondary kernel will be loaded, then will produce a vmcore and reboot.
|
||||
"""
|
||||
# Setup expected prompts for password request and echo command
|
||||
password_prompt = PromptResponse("Password:", ConfigurationManager.get_lab_config().get_admin_credentials().get_password())
|
||||
root_cmd = PromptResponse("root@", "echo c > /proc/sysrq-trigger")
|
||||
expected_prompts = [password_prompt, root_cmd]
|
||||
|
||||
# Run echo command to crash standby controller
|
||||
self.ssh_connection.send_expect_prompts("sudo su", expected_prompts)
|
1
testcases/cloud_platform/regression/alarm/__init__.py
Normal file
1
testcases/cloud_platform/regression/alarm/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Alarm testcases"""
|
@@ -0,0 +1,64 @@
|
||||
from pytest import mark
|
||||
|
||||
from framework.validation.validation import validate_equals_with_retry
|
||||
from keywords.cloud_platform.fault_management.alarms.alarm_list_keywords import AlarmListKeywords
|
||||
from keywords.cloud_platform.ssh.lab_connection_keywords import LabConnectionKeywords
|
||||
from keywords.cloud_platform.system.host.system_host_list_keywords import SystemHostListKeywords
|
||||
from keywords.linux.kernel.kernel_keywords import KernelKeywords
|
||||
|
||||
|
||||
@mark.p0
|
||||
def test_auto_recover_after_service_affecting_failure(request):
|
||||
"""
|
||||
Testcase to verify there are no alarms on the system
|
||||
Test Steps:
|
||||
- connect to active controller
|
||||
- run command fm alarm-list
|
||||
- verify that no alarms exist
|
||||
- Enter root on standby controller
|
||||
- run command echo c > /proc/sysrq-trigger
|
||||
- run command fm alarm-list
|
||||
- verify 200.004 alarm is triggered
|
||||
- wait for alarms to clear
|
||||
|
||||
"""
|
||||
ssh_connection_active_controller = LabConnectionKeywords().get_active_controller_ssh()
|
||||
ssh_connection_standby_controller = LabConnectionKeywords().get_standby_controller_ssh()
|
||||
|
||||
standby_controller = SystemHostListKeywords(ssh_connection_active_controller).get_standby_controller()
|
||||
|
||||
# Get the host name of the standby controller
|
||||
standby_controller_host_name = standby_controller.get_host_name()
|
||||
|
||||
# Check if the system already has any alarm on it
|
||||
alarms_to_clear = AlarmListKeywords(ssh_connection_active_controller).alarm_list()
|
||||
assert not alarms_to_clear, "There are no alarms on the system"
|
||||
|
||||
# Use trigger_kernal_crash keyword to crash standby controller
|
||||
KernelKeywords(ssh_connection_standby_controller).trigger_kernel_crash()
|
||||
|
||||
def alarm_exists():
|
||||
alarms = AlarmListKeywords(ssh_connection_active_controller).alarm_list()
|
||||
alarms_list = [alarm_object for alarm_object in alarms if alarm_object.get_alarm_id() == "200.004"]
|
||||
return len(alarms_list) > 0
|
||||
|
||||
validate_equals_with_retry(alarm_exists, True, "Validating that alarm 200.004 exists", timeout=120)
|
||||
|
||||
# Check if the alarm 200.004 was triggered
|
||||
alarms = AlarmListKeywords(ssh_connection_active_controller).alarm_list()
|
||||
alarms_list = [alarm_object for alarm_object in alarms if alarm_object.get_alarm_id() == "200.004"]
|
||||
assert alarms_list, "Alarm 200.004 was found on the system"
|
||||
|
||||
# Wait for standby controller reboot
|
||||
def wait_standby_controller_reboot():
|
||||
host_value = SystemHostListKeywords(ssh_connection_active_controller).get_system_host_list().get_host(standby_controller_host_name)
|
||||
|
||||
return host_value.get_availability() == "available" and host_value.get_administrative() == "unlocked" and host_value.get_operational() == "enabled"
|
||||
|
||||
validate_equals_with_retry(wait_standby_controller_reboot, True, "Waiting for standby controller reboot", timeout=800)
|
||||
|
||||
# Check if the alarms clears after a period of times
|
||||
validate_equals_with_retry(alarm_exists, False, "Validating that alarm 200.004 exists", timeout=120)
|
||||
alarms_to_clear = AlarmListKeywords(ssh_connection_active_controller).alarm_list()
|
||||
alarms_list = [alarm_object for alarm_object in alarms_to_clear if alarm_object.get_alarm_id() == "200.004"]
|
||||
assert not alarms_list, "There are no more alarms on the system"
|
Reference in New Issue
Block a user