########################################################################### # # Copyright (c) 2020 Diality Inc. - All Rights Reserved. # # 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 test_hd_simulator.py # # @date 06-Aug-2020 # @author P. Lucia # # @brief # # ############################################################################ import sys sys.path.append("..") from dialin.ui.hd_simulator import HDSimulator, MsgDefs, Alarms from dialin.hd.hemodialysis_device import HD from dialin.utils.base import AbstractObserver from time import sleep def test_invalid_parameters(): hd_simulator = HDSimulator(log_level="DEBUG") rejections = [ MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # overall response MsgDefs.REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE, # blood flow MsgDefs.REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE, # dialysate flow MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # duration MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin dispensing rate MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin bolus volume MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin stop time MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # saline bolus MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # acid concentrate MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # bicarbonate concentrate MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # dialyzer type MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # dialysate temperature MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # arterial pressure limit low MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # arterial pressure limit high MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # venous pressure limit low MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # venous pressure limit high MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # blood pressure measurement interval MsgDefs.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE # rinseback flow rate ] hd_simulator.cmd_send_treatment_parameter_validation_response(rejections) class Observer(AbstractObserver): def __init__(self): self.timeout_expired = False def update(self, result): print(result) self.timeout_expired = result.get("poweroff_timeout_expired", False) def test_poweroff(): hd = HD() observer = Observer() hd.buttons.attach(observer) hd_simulator = HDSimulator(log_level="DEBUG") hd_simulator.cmd_send_poweroff_button_pressed() sleep(1) hd_simulator.cmd_send_poweroff_timeout() sleep(1) hd_simulator.cmd_send_broadcast_poweroff_imminent() while not observer.timeout_expired: sleep(1) def test_clear_alarms(): hd_simulator = HDSimulator() hd_simulator.cmd_activate_alarm(Alarms.ALARM_ID_TREATMENT_STOPPED_BY_USER) sleep(1) hd_simulator.cmd_send_clear_alarms() if __name__ == '__main__': test_clear_alarms() sleep(1) test_poweroff()