########################################################################### # # Copyright (c) 2021-2024 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 # # @author (last) Peter Lucia # @date (last) 21-May-2021 # @author (original) Peter Lucia # @date (original) 29-Apr-2021 # ############################################################################ import sys sys.path.append("../../") from dialin.ui.hd_simulator import HDSimulator, RequestRejectReasons 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 = [ RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # overall response RequestRejectReasons.REQUEST_REJECT_REASON_BLOOD_FLOW_OUT_OF_RANGE, # blood flow RequestRejectReasons.REQUEST_REJECT_REASON_DIAL_FLOW_OUT_OF_RANGE, # dialysate flow RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # duration RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin dispensing rate RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin bolus volume RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # heparin stop time RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # saline bolus RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # acid concentrate RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # bicarbonate concentrate RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # dialyzer type RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # dialysate temperature RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # arterial pressure limit low RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # arterial pressure limit high RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # venous pressure limit low RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # venous pressure limit high RequestRejectReasons.REQUEST_REJECT_REASON_NOT_IN_TREATMENT_MODE, # blood pressure measurement interval RequestRejectReasons.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_valid_parameters(): hd_simulator = HDSimulator(log_level="DEBUG") rejections = [ RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # requestValid RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # bloodFlowRate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialysateFlowRate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # duration RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparinStopTime RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # salineBolus RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # acidConcentrate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # bicarbonateConcentrate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialyzerType RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # bloodPressureMeasureInterval RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # rinsebackFlowRate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # arterialPressureLimitLow RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # arterialPressureLimitHigh RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # venousPressureLimitLow RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # venousPressureLimitHigh RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparinDispensingRate RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # heparinBolusVolume RequestRejectReasons.REQUEST_REJECT_REASON_NONE, # dialysateTemp ] hd_simulator.cmd_send_treatment_parameter_validation_response(rejections) def test_invalid_parameters(): hd_simulator = HDSimulator(log_level="DEBUG") param_count = 18 for i in range(param_count): rejections = [0 for _ in range(param_count)] rejections[i] = 1 hd_simulator.cmd_send_treatment_parameter_manual_validation_response(rejections) sleep(2) def test_priming(): hd_simulator = HDSimulator(log_level="DEBUG") state = 0 total_seconds = 100 for seconds_remaining in range(total_seconds, -1, -1): if seconds_remaining % (total_seconds // 3) == 0: state += 1 hd_simulator.cmd_send_priming_time_remaining(state, seconds_remaining, total_seconds) sleep(0.05) class StartTreatmentObserver(AbstractObserver): def __init__(self): self.received_response = False def update(self, result): print(result) self.received_response = True def test_start_confirm_end_treatment(): hd_simulator = HDSimulator(log_level="DEBUG") hd_simulator.alarms_simulator.cmd_send_clear_alarms() observer = StartTreatmentObserver() hd_simulator.attach(observer) while not observer.received_response: sleep(0.50) if __name__ == '__main__': test_start_confirm_end_treatment()