# -*- coding: utf-8 -*- ## # Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. # copyright # THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, # IN PART OR IN WHOLE, # WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. # # file tst_Alarm # date 2020/06/26 # author Peter Lucia # import names import denaliMessages import utils from time import sleep import os HIGH = 3 MED = 2 LOW = 1 NONE = 0 HIGH_PRIORITY_COLOR = "#c53b33" MED_LOW_PRIORITY_COLOR = "#f5a623" class Alarms: # ALARM_ID = (priority, alarmID, escalates in, silent_espires_in, flags) # ALARM_ID_NO_ALARM = (NONE, 0, 0, 0, 0) ALARM_ID_SOFTWARE_FAULT = (HIGH, 1, 0, 0, 0) ALARM_ID_STUCK_BUTTON_TEST_FAILED = (HIGH, 2, 0, 0, 0) ALARM_ID_FPGA_POST_TEST_FAILED = (HIGH, 3, 0, 0, 0) ALARM_ID_WATCHDOG_POST_TEST_FAILED = (HIGH, 4, 0, 0, 0) ALARM_ID_UI_COMM_POST_FAILED = (HIGH, 5, 0, 0, 0) ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK = (MED, 6, 0, 0, 0) ALARM_ID_BLOOD_PUMP_OFF_CHECK = (MED, 7, 0, 0, 0) ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK = (MED, 8, 0, 0, 0) ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK = (HIGH, 9, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK = (MED, 10, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_OFF_CHECK = (MED, 11, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK = (MED, 12, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK = (HIGH, 13, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK = (MED, 14, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_OFF_CHECK = (MED, 15, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK = (MED, 16, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK = (HIGH, 17, 0, 0, 0) ALARM_ID_WATCHDOG_EXPIRED = (HIGH, 18, 0, 0, 0) ALARM_ID_RTC_COMM_ERROR = (HIGH, 19, 0, 0, 0) ALARM_ID_RTC_CONFIG_ERROR = (HIGH, 20, 0, 0, 0) ALARM_ID_DG_COMM_TIMEOUT = (HIGH, 21, 0, 0, 0) ALARM_ID_UI_COMM_TIMEOUT = (HIGH, 22, 0, 0, 0) ALARM_ID_COMM_TOO_MANY_BAD_CRCS = (HIGH, 23, 0, 0, 0) ALARM_ID_TREATMENT_STOPPED_BY_USER = (LOW, 24, 0, 0, 0) ALARM_ID_BLOOD_SITTING_WARNING = (MED, 25, 0, 0, 0) ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RESUME = (MED, 26, 0, 0, 0) ALARM_ID_BLOOD_SITTING_TOO_LONG_NO_RINSEBACK = (HIGH, 27, 0, 0, 0) ALARM_ID_CAN_MESSAGE_NOT_ACKED = (HIGH, 28, 0, 0, 0) ALARM_ID_OCCLUSION_BLOOD_PUMP = (HIGH, 29, 0, 0, 0) ALARM_ID_OCCLUSION_DIAL_IN_PUMP = (HIGH, 30, 0, 0, 0) ALARM_ID_OCCLUSION_DIAL_OUT_PUMP = (HIGH, 31, 0, 0, 0) ALARM_ID_ARTERIAL_PRESSURE_LOW = (HIGH, 32, 0, 0, 0) ALARM_ID_ARTERIAL_PRESSURE_HIGH = (HIGH, 33, 0, 0, 0) ALARM_ID_VENOUS_PRESSURE_LOW = (HIGH, 34, 0, 0, 0) ALARM_ID_VENOUS_PRESSURE_HIGH = (HIGH, 35, 0, 0, 0) ALARM_ID_UF_RATE_TOO_HIGH_ERROR = (HIGH, 36, 0, 0, 0) ALARM_ID_UF_VOLUME_ACCURACY_ERROR = (HIGH, 37, 0, 0, 0) ALARM_ID_RTC_BATTERY_LOW = (HIGH, 38, 0, 0, 0) ALARM_ID_RTC_OR_TIMER_ACCURACY_FAILURE = (HIGH, 39, 0, 0, 0) ALARM_ID_RTC_RAM_OPS_ERROR = (HIGH, 40, 0, 0, 0) ALARM_ID_NVDATA_EEPROM_OPS_FAILURE = (HIGH, 41, 0, 0, 0) ALARM_ID_NVDATA_MFG_RECORD_CRC_ERROR = (HIGH, 42, 0, 0, 0) ALARM_ID_NVDATA_SRVC_RECORD_CRC_ERROR = (HIGH, 43, 0, 0, 0) ALARM_ID_NVDATA_CAL_RECORD_CRC_ERROR = (HIGH, 44, 0, 0, 0) ALARM_ID_NVDATA_HW_USAGE_DATA_CRC_ERROR = (HIGH, 45, 0, 0, 0) AlARM_ID_NVDATA_DISINFECTION_DATE_CRC_ERROR = (HIGH, 46, 0, 0, 0) ALARM_ID_RO_PUMP_OUT_PRESSURE_OUT_OF_RANGE = (HIGH, 47, 0, 0, 0) ALARM_ID_TEMPERATURE_SENSORS_OUT_OF_RANGE = (HIGH, 48, 0, 0, 0) ALARM_ID_TEMPERATURE_SENSORS_INCONSISTENT = (HIGH, 49, 0, 0, 0) ALARM_ID_HD_COMM_TIMEOUT = (HIGH, 50, 0, 0, 0) ALARM_ID_VALVE_CONTROL_FAILURE = (HIGH, 51, 0, 0, 0) ALARM_ID_BLOOD_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 52, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 53, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_FLOW_VS_MOTOR_SPEED_CHECK = (HIGH, 54, 0, 0, 0) ALARM_ID_BLOOD_PUMP_MOTOR_SPEED_CHECK = (HIGH, 55, 0, 0, 0) ALARM_ID_DIAL_IN_PUMP_MOTOR_SPEED_CHECK = (HIGH, 56, 0, 0, 0) ALARM_ID_DIAL_OUT_PUMP_MOTOR_SPEED_CHECK = (HIGH, 57, 0, 0, 0) ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_TOO_HIGH = (HIGH, 58, 0, 0, 0) ALARM_ID_INLET_WATER_TEMPERATURE_OUT_OF_RANGE = (HIGH, 59, 0, 0, 0) ALARM_ID_DOES_NOT_EXIST = (HIGH, 99, 0, 0, 0) def test_alarms(alarms, alarm_list, skip_hd_timeout=True): """ Tests a list of alarm tuples. @param alarms: Alarm class object @param alarms_list: list of alarm tuples to test. @param skip_timeout: whether to skip the hd comm timeout error, default = False @return: None """ for idx, (priority, alarm_id, escalates_in, silent_expires_in, flags) in enumerate(alarm_list): if (alarm_list[idx] == alarms.ALARM_ID_HD_COMM_TIMEOUT) and skip_hd_timeout: continue test.log("Testing {0} = {1}".format(alarm_list[idx], alarm_id)) color = HIGH_PRIORITY_COLOR if priority == HIGH else MED_LOW_PRIORITY_COLOR denaliMessages.sendAlarm(priority, alarm_id, escalates_in, silent_expires_in, flags) sleep(0.5) if priority == HIGH: test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, color) sleep(0.5) mouseClick(waitForObjectExists(names.o_dismiss_alarm)) else: mouseClick(waitForObjectExists(names.o_alarm_bar)) sleep(0.5) test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, color) sleep(0.5) mouseClick(waitForObjectExists(names.o_okay_alarm)) sleep(0.5) mouseClick(waitForObjectExists(names.o_alarm_bar)) sleep(0.5) mouseClick(waitForObjectExists(names.o_dismiss_alarm)) sleep(0.5) denaliMessages.clear_all_alarms() def test_alarm_acknowledge(alarms): """ Exercises the acknowledge alarm functionality @return: None """ test.log("Testing alarm acknowledgement") denaliMessages.clear_all_alarms() sleep(0.5) denaliMessages.sendAlarm(*alarms.ALARM_ID_SOFTWARE_FAULT) sleep(0.5) test.compare(waitForObjectExists(names.o_alarm_dialog).color.name, HIGH_PRIORITY_COLOR) sleep(0.5) mouseClick(waitForObjectExists(names.o_okay_alarm)) sleep(0.5) denaliMessages.clear_all_alarms() sleep(0.5) denaliMessages.sendAlarm(*alarms.ALARM_ID_SOFTWARE_FAULT) sleep(0.5) def get_alarm_list(alarms): """ Gets the alarm list @return: The alarms (list of tuples) """ alarm_list = [] for attr in dir(alarms): if not callable(getattr(alarms, attr)) and attr.startswith("ALARM_ID"): alarm_list.append(getattr(alarms, attr)) return sorted(alarm_list, key = lambda val: val [1]) def main(): """ Main function to test the alarms. @return: None """ utils.tstStart() startApplication("denaliSquish -q") sleep(0.5) alarms = Alarms() alarm_list = get_alarm_list(alarms) test_alarms(alarms, alarm_list) # test the alarm acknowledgement test_alarm_acknowledge(alarms) os.system("killall denaliSquish") sleep(3) startApplication("denaliSquish") sleep(0.5) alarm_list = [alarms.ALARM_ID_HD_COMM_TIMEOUT] # test hd comm timeout since it was skipped in the last test test_alarms(alarms, alarm_list, skip_hd_timeout = False) utils.tstDone()