From 8b00025e3d8772a4f53708bceac99e33e3120bb9 Mon Sep 17 00:00:00 2001 From: Brian Daniels Date: Thu, 16 Nov 2017 11:48:57 -0600 Subject: [PATCH] Allow a host test to reset the device under test Add a host test reset function to allow the current DUT to be reset. This allow unexpected power loss to be tested. --- mbed_host_tests/host_tests/base_host_test.py | 8 ++++++++ mbed_host_tests/host_tests_conn_proxy/conn_primitive.py | 6 +++++- .../host_tests_conn_proxy/conn_primitive_remote.py | 3 +++ .../host_tests_conn_proxy/conn_primitive_serial.py | 3 +++ mbed_host_tests/host_tests_conn_proxy/conn_proxy.py | 9 +++++++-- mbed_host_tests/host_tests_runner/host_test_default.py | 3 +++ 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/mbed_host_tests/host_tests/base_host_test.py b/mbed_host_tests/host_tests/base_host_test.py index f1cacab..28572db 100644 --- a/mbed_host_tests/host_tests/base_host_test.py +++ b/mbed_host_tests/host_tests/base_host_test.py @@ -64,6 +64,14 @@ def reset_dut(self, value): if self.__event_queue: self.__event_queue.put(('__reset_dut', value, time())) + def reset(self): + """ + Reset the device under test and continue running the host test + :return: + """ + if self.__event_queue: + self.__event_queue.put(("__reset", "0", time())) + def notify_conn_lost(self, text): """! Notify main even loop that there was a DUT-host test connection error @param consume If True htrun will process (consume) all remaining events diff --git a/mbed_host_tests/host_tests_conn_proxy/conn_primitive.py b/mbed_host_tests/host_tests_conn_proxy/conn_primitive.py index eacd0e4..cef1978 100644 --- a/mbed_host_tests/host_tests_conn_proxy/conn_primitive.py +++ b/mbed_host_tests/host_tests_conn_proxy/conn_primitive.py @@ -67,6 +67,11 @@ def flush(self): """! Flush read/write channels of DUT """ raise NotImplementedError + def reset(self): + """! Reset the dut + """ + raise NotImplementedError + def connected(self): """! Check if there is a connection to DUT @return True if there is conenction to DUT (read/write/flush API works) @@ -83,4 +88,3 @@ def finish(self): """! Handle DUT dtor like (close resource) operations here """ raise NotImplementedError - diff --git a/mbed_host_tests/host_tests_conn_proxy/conn_primitive_remote.py b/mbed_host_tests/host_tests_conn_proxy/conn_primitive_remote.py index 33315b4..7ffa481 100644 --- a/mbed_host_tests/host_tests_conn_proxy/conn_primitive_remote.py +++ b/mbed_host_tests/host_tests_conn_proxy/conn_primitive_remote.py @@ -160,5 +160,8 @@ def finish(self): except self.remote_module.resources.ResourceError as e: self.logger.prn_err("RemoteConnectorPrimitive.finish() failed, reason: " + str(e)) + def reset(self): + self.__remote_reset() + def __del__(self): self.finish() diff --git a/mbed_host_tests/host_tests_conn_proxy/conn_primitive_serial.py b/mbed_host_tests/host_tests_conn_proxy/conn_primitive_serial.py index 7b7f37c..55cb90a 100644 --- a/mbed_host_tests/host_tests_conn_proxy/conn_primitive_serial.py +++ b/mbed_host_tests/host_tests_conn_proxy/conn_primitive_serial.py @@ -137,5 +137,8 @@ def finish(self): if self.serial: self.serial.close() + def reset(self): + self.reset_dev_via_serial(self.forced_reset_timeout) + def __del__(self): self.finish() diff --git a/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py b/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py index b4a3c3e..f494f20 100644 --- a/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py +++ b/mbed_host_tests/host_tests_conn_proxy/conn_proxy.py @@ -231,10 +231,15 @@ def __send_sync(timeout=None): else: # Return if state machine in host_test_default has finished to end process if key == '__host_test_finished' and value == True: - logger.prn_inf("received special even '%s' value='%s', finishing"% (key, value)) + logger.prn_inf("received special event '%s' value='%s', finishing"% (key, value)) connector.finish() return 0 - if not connector.write_kv(key, value): + elif key == '__reset': + logger.prn_inf("received special event '%s', resetting dut" % (key)) + connector.reset() + event_queue.put(("reset_complete", 0, time())) + elif not connector.write_kv(key, value): + connector.write_kv(key, value) __notify_conn_lost() break diff --git a/mbed_host_tests/host_tests_runner/host_test_default.py b/mbed_host_tests/host_tests_runner/host_test_default.py index db03be7..3a7210a 100644 --- a/mbed_host_tests/host_tests_runner/host_test_default.py +++ b/mbed_host_tests/host_tests_runner/host_test_default.py @@ -366,6 +366,9 @@ def process_code_coverage(key, value, timestamp): self.logger.prn_inf("%s(%s)" % (key, str(value))) result = value event_queue.put(('__exit_event_queue', 0, time())) + elif key == '__reset': + # This event only resets the dut, not the host test + dut_event_queue.put(('__reset', True, time())) elif key == '__reset_dut': # Disconnect to avoid connection lost event dut_event_queue.put(('__host_test_finished', True, time()))