From 4d8dfed27f3893389ecd09ba4367eb39d578c879 Mon Sep 17 00:00:00 2001 From: Przemek Wirkus Date: Mon, 27 Oct 2014 16:38:19 +0000 Subject: [PATCH] Host test copy functionality migration: copy functionality partially moved to host_test (tested with basic set of tests, not with e.g. NET tests. Host test copy functionality: TODO: modify rest of host tests to use self.mbed.reset() and self.mbed.copy_image() according to curent test scipt API --- workspace_tools/host_tests/host_test.py | 39 ++++++++++++---- workspace_tools/test_api.py | 59 ++++++------------------- 2 files changed, 44 insertions(+), 54 deletions(-) diff --git a/workspace_tools/host_tests/host_test.py b/workspace_tools/host_tests/host_test.py index 82fdd53418..8d261ca170 100644 --- a/workspace_tools/host_tests/host_test.py +++ b/workspace_tools/host_tests/host_test.py @@ -25,6 +25,7 @@ except ImportError, e: import os from sys import stdout from time import sleep, time +from os.path import exists from optparse import OptionParser import host_tests_plugins @@ -92,7 +93,7 @@ class Mbed: # Options related to copy / reset mbed device self.port = self.options.port self.disk = self.options.disk - self.image_path = self.options.image_path + self.image_path = self.options.image_path.strip('"') self.copy_method = self.options.copy_method self.serial = None @@ -174,21 +175,29 @@ class Mbed: # Flush serials to get only input after reset self.flush() if self.options.forced_reset_type: - host_tests_plugins.call_plugin('ResetMethod', self.options.forced_reset_type, disk=self.disk) + result = host_tests_plugins.call_plugin('ResetMethod', self.options.forced_reset_type, disk=self.disk) else: - host_tests_plugins.call_plugin('ResetMethod', 'default', serial=self.serial) + result = host_tests_plugins.call_plugin('ResetMethod', 'default', serial=self.serial) # Give time to wait for the image loading reset_tout_s = self.options.forced_reset_timeout if self.options.forced_reset_timeout is not None else self.DEFAULT_RESET_TOUT self.reset_timeout(reset_tout_s) + return result def copy_image(self, image_path=None, disk=None, copy_method=None): - """ Copy file depending on method you want to use. Handles exception - and return code from shell copy commands. + """ Closure for copy_image_raw() method. + Method which is actually copying image to mbed """ + # Set closure environment image_path = image_path if image_path is not None else self.image_path disk = disk if disk is not None else self.disk copy_method = copy_method if copy_method is not None else self.copy_method + # Call proper copy method + return self.copy_image_raw(image_path, disk, copy_method) + def copy_image_raw(self, image_path=None, disk=None, copy_method=None): + """ Copy file depending on method you want to use. Handles exception + and return code from shell copy commands. + """ if copy_method is not None: # image_path - Where is binary with target's firmware result = host_tests_plugins.call_plugin('CopyMethod', copy_method, image_path=image_path, destination_disk=disk) @@ -214,6 +223,7 @@ class TestResults: self.RESULT_ERROR = 'error' self.RESULT_IO_SERIAL = 'ioerr_serial' self.RESULT_NO_IMAGE = 'no_image' + self.RESULT_IOERR_COPY = "ioerr_copy" class Test(TestResults): @@ -226,6 +236,19 @@ class Test(TestResults): """ Test runner for host test. This function will start executing test and forward test result via serial port to test suite """ + # Copy image to device + self.notify("HOST: Copy image onto target...") + result = self.mbed.copy_image() + if not result: + self.print_result(self.RESULT_IOERR_COPY) + + # Reset device + self.notify("HOST: Reset target...") + result = self.mbed.reset() + if not result: + self.print_result(self.RESULT_IO_SERIAL) + + # Run test try: result = self.test() self.print_result(self.RESULT_SUCCESS if result else self.RESULT_FAILURE) @@ -234,7 +257,8 @@ class Test(TestResults): self.print_result(self.RESULT_ERROR) def setup(self): - """ Setup and check if configuration for test is correct. E.g. if serial port can be opened + """ Setup and check if configuration for test is + correct. E.g. if serial port can be opened. """ result = True if not self.mbed.serial: @@ -263,7 +287,6 @@ class DefaultTest(Test): serial_init_res = self.mbed.init_serial() if not serial_init_res: self.print_result(self.RESULT_IO_SERIAL) - self.mbed.reset() class Simple(DefaultTest): @@ -271,7 +294,7 @@ class Simple(DefaultTest): output from MUT, no supervision over test running in MUT is executed. Just waiting for result """ - def run(self): + def test(self): try: while True: c = self.mbed.serial_read(512) diff --git a/workspace_tools/test_api.py b/workspace_tools/test_api.py index 48bbc01a4b..2b5ca115c3 100644 --- a/workspace_tools/test_api.py +++ b/workspace_tools/test_api.py @@ -592,30 +592,6 @@ class SingleTestRunner(object): result = self.TEST_LOOPS_DICT[test_id] return result - def image_copy_method_selector(self, target_name, image_path, disk, copy_method, - images_config=None, image_dest=None, verbose=False): - """ Function copied image file and fiddles with image configuration files in needed. - This function will select proper image configuration (modify image config file - if needed) after image is copied. - """ - image_dest = image_dest if image_dest is not None else '' - _copy_res, _err_msg, _copy_method = self.file_copy_method_selector(image_path, disk, copy_method, image_dest=image_dest, verbose=verbose) - return _copy_res, _err_msg, _copy_method - - def file_copy_method_selector(self, image_path, disk, copy_method, image_dest='', verbose=False): - """ Copy file depending on method you want to use. Handles exception - and return code from shell copy commands. - """ - result = False - resutl_msg = '' # TODO: pass result_msg from plugin to test suite - if copy_method is not None: - # image_path - Where is binary with target's firmware - result = host_tests_plugins.call_plugin('CopyMethod', copy_method, image_path=image_path, destination_disk=disk) - else: - copy_method = 'default' - result = host_tests_plugins.call_plugin('CopyMethod', copy_method, image_path=image_path, destination_disk=disk) - return result, resutl_msg, copy_method - def delete_file(self, file_path): """ Remove file from the system """ @@ -684,7 +660,7 @@ class SingleTestRunner(object): # Host test execution start_host_exec_time = time() - single_test_result = self.TEST_RESULT_UNDEF # singe test run result + single_test_result = self.TEST_RESULT_UNDEF # single test run result _copy_method = selected_copy_method if not exists(image_path): @@ -693,28 +669,19 @@ class SingleTestRunner(object): single_test_output = self.logger.log_line(self.logger.LogType.ERROR, 'Image file does not exist: %s'% image_path) print single_test_output else: - # Choose one method of copy files to mbed MSD drive - _copy_res, _err_msg, _copy_method = self.image_copy_method_selector(target_name, image_path, disk, selected_copy_method, - images_config, image_dest) + sleep(target_by_mcu.program_cycle_s()) + # Host test execution + start_host_exec_time = time() - if not _copy_res: # copy error to mbed MSD - single_test_result = self.TEST_RESULT_IOERR_COPY - single_test_output = self.logger.log_line(self.logger.LogType.ERROR, "Copy method '%s' failed. Reason: %s"% (_copy_method, _err_msg)) - print single_test_output - else: - sleep(target_by_mcu.program_cycle_s()) - # Host test execution - start_host_exec_time = time() - - host_test_verbose = self.opts_verbose_test_result_only or self.opts_verbose - host_test_reset = self.opts_mut_reset_type if reset_type is None else reset_type - single_test_result, single_test_output = self.run_host_test(test.host_test, - image_path, disk, port, duration, - micro=target_name, - verbose=host_test_verbose, - reset=host_test_reset, - reset_tout=reset_tout, - copy_method=selected_copy_method) + host_test_verbose = self.opts_verbose_test_result_only or self.opts_verbose + host_test_reset = self.opts_mut_reset_type if reset_type is None else reset_type + single_test_result, single_test_output = self.run_host_test(test.host_test, + image_path, disk, port, duration, + micro=target_name, + verbose=host_test_verbose, + reset=host_test_reset, + reset_tout=reset_tout, + copy_method=selected_copy_method) # Store test result test_all_result.append(single_test_result)