Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
host_tests/host_tests_plugins/host_test_plugins.py@43:2a7da56ebd24, 2018-09-25 (annotated)
- Committer:
- theotherjimmy
- Date:
- Tue Sep 25 13:43:09 2018 -0500
- Revision:
- 43:2a7da56ebd24
- Parent:
- 0:66f3b5499f7f
Release 5.10.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:66f3b5499f7f | 1 | """ |
screamer | 0:66f3b5499f7f | 2 | mbed SDK |
screamer | 0:66f3b5499f7f | 3 | Copyright (c) 2011-2013 ARM Limited |
screamer | 0:66f3b5499f7f | 4 | |
screamer | 0:66f3b5499f7f | 5 | Licensed under the Apache License, Version 2.0 (the "License"); |
screamer | 0:66f3b5499f7f | 6 | you may not use this file except in compliance with the License. |
screamer | 0:66f3b5499f7f | 7 | You may obtain a copy of the License at |
screamer | 0:66f3b5499f7f | 8 | |
screamer | 0:66f3b5499f7f | 9 | http://www.apache.org/licenses/LICENSE-2.0 |
screamer | 0:66f3b5499f7f | 10 | |
screamer | 0:66f3b5499f7f | 11 | Unless required by applicable law or agreed to in writing, software |
screamer | 0:66f3b5499f7f | 12 | distributed under the License is distributed on an "AS IS" BASIS, |
screamer | 0:66f3b5499f7f | 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
screamer | 0:66f3b5499f7f | 14 | See the License for the specific language governing permissions and |
screamer | 0:66f3b5499f7f | 15 | limitations under the License. |
screamer | 0:66f3b5499f7f | 16 | """ |
theotherjimmy |
43:2a7da56ebd24 | 17 | from __future__ import print_function |
screamer | 0:66f3b5499f7f | 18 | |
screamer | 0:66f3b5499f7f | 19 | from os import access, F_OK |
screamer | 0:66f3b5499f7f | 20 | from sys import stdout |
screamer | 0:66f3b5499f7f | 21 | from time import sleep |
screamer | 0:66f3b5499f7f | 22 | from subprocess import call |
screamer | 0:66f3b5499f7f | 23 | |
screamer | 0:66f3b5499f7f | 24 | |
screamer | 0:66f3b5499f7f | 25 | class HostTestPluginBase: |
screamer | 0:66f3b5499f7f | 26 | """ Base class for all plug-ins used with host tests. |
screamer | 0:66f3b5499f7f | 27 | """ |
screamer | 0:66f3b5499f7f | 28 | ########################################################################### |
screamer | 0:66f3b5499f7f | 29 | # Interface: |
screamer | 0:66f3b5499f7f | 30 | ########################################################################### |
screamer | 0:66f3b5499f7f | 31 | |
screamer | 0:66f3b5499f7f | 32 | ########################################################################### |
screamer | 0:66f3b5499f7f | 33 | # Interface attributes defining plugin name, type etc. |
screamer | 0:66f3b5499f7f | 34 | ########################################################################### |
screamer | 0:66f3b5499f7f | 35 | name = "HostTestPluginBase" # Plugin name, can be plugin class name |
screamer | 0:66f3b5499f7f | 36 | type = "BasePlugin" # Plugin type: ResetMethod, Copymethod etc. |
screamer | 0:66f3b5499f7f | 37 | capabilities = [] # Capabilities names: what plugin can achieve |
screamer | 0:66f3b5499f7f | 38 | # (e.g. reset using some external command line tool) |
screamer | 0:66f3b5499f7f | 39 | stable = False # Determine if plugin is stable and can be used |
screamer | 0:66f3b5499f7f | 40 | |
screamer | 0:66f3b5499f7f | 41 | ########################################################################### |
screamer | 0:66f3b5499f7f | 42 | # Interface methods |
screamer | 0:66f3b5499f7f | 43 | ########################################################################### |
screamer | 0:66f3b5499f7f | 44 | def setup(self, *args, **kwargs): |
screamer | 0:66f3b5499f7f | 45 | """ Configure plugin, this function should be called before plugin execute() method is used. |
screamer | 0:66f3b5499f7f | 46 | """ |
screamer | 0:66f3b5499f7f | 47 | return False |
screamer | 0:66f3b5499f7f | 48 | |
screamer | 0:66f3b5499f7f | 49 | def execute(self, capabilitity, *args, **kwargs): |
screamer | 0:66f3b5499f7f | 50 | """ Executes capability by name. |
screamer | 0:66f3b5499f7f | 51 | Each capability e.g. may directly just call some command line |
screamer | 0:66f3b5499f7f | 52 | program or execute building pythonic function |
screamer | 0:66f3b5499f7f | 53 | """ |
screamer | 0:66f3b5499f7f | 54 | return False |
screamer | 0:66f3b5499f7f | 55 | |
screamer | 0:66f3b5499f7f | 56 | ########################################################################### |
screamer | 0:66f3b5499f7f | 57 | # Interface helper methods - overload only if you need to have custom behaviour |
screamer | 0:66f3b5499f7f | 58 | ########################################################################### |
screamer | 0:66f3b5499f7f | 59 | def print_plugin_error(self, text): |
screamer | 0:66f3b5499f7f | 60 | """ Function prints error in console and exits always with False |
screamer | 0:66f3b5499f7f | 61 | """ |
theotherjimmy |
43:2a7da56ebd24 | 62 | print("Plugin error: %s::%s: %s" % (self.name, self.type, text)) |
screamer | 0:66f3b5499f7f | 63 | return False |
screamer | 0:66f3b5499f7f | 64 | |
screamer | 0:66f3b5499f7f | 65 | def print_plugin_info(self, text, NL=True): |
screamer | 0:66f3b5499f7f | 66 | """ Function prints notification in console and exits always with True |
screamer | 0:66f3b5499f7f | 67 | """ |
theotherjimmy |
43:2a7da56ebd24 | 68 | print("Plugin info: %s::%s: %s"% (self.name, self.type, text)) |
screamer | 0:66f3b5499f7f | 69 | return True |
screamer | 0:66f3b5499f7f | 70 | |
screamer | 0:66f3b5499f7f | 71 | def print_plugin_char(self, char): |
screamer | 0:66f3b5499f7f | 72 | """ Function prints char on stdout |
screamer | 0:66f3b5499f7f | 73 | """ |
screamer | 0:66f3b5499f7f | 74 | stdout.write(char) |
screamer | 0:66f3b5499f7f | 75 | stdout.flush() |
screamer | 0:66f3b5499f7f | 76 | return True |
screamer | 0:66f3b5499f7f | 77 | |
screamer | 0:66f3b5499f7f | 78 | def check_mount_point_ready(self, destination_disk, init_delay=0.2, loop_delay=0.25): |
screamer | 0:66f3b5499f7f | 79 | """ Checks if destination_disk is ready and can be accessed by e.g. copy commands |
screamer | 0:66f3b5499f7f | 80 | @init_delay - Initial delay time before first access check |
screamer | 0:66f3b5499f7f | 81 | @loop_delay - pooling delay for access check |
screamer | 0:66f3b5499f7f | 82 | """ |
screamer | 0:66f3b5499f7f | 83 | if not access(destination_disk, F_OK): |
screamer | 0:66f3b5499f7f | 84 | self.print_plugin_info("Waiting for mount point '%s' to be ready..."% destination_disk, NL=False) |
screamer | 0:66f3b5499f7f | 85 | sleep(init_delay) |
screamer | 0:66f3b5499f7f | 86 | while not access(destination_disk, F_OK): |
screamer | 0:66f3b5499f7f | 87 | sleep(loop_delay) |
screamer | 0:66f3b5499f7f | 88 | self.print_plugin_char('.') |
screamer | 0:66f3b5499f7f | 89 | |
screamer | 0:66f3b5499f7f | 90 | def check_parameters(self, capabilitity, *args, **kwargs): |
screamer | 0:66f3b5499f7f | 91 | """ This function should be ran each time we call execute() |
screamer | 0:66f3b5499f7f | 92 | to check if none of the required parameters is missing. |
screamer | 0:66f3b5499f7f | 93 | """ |
screamer | 0:66f3b5499f7f | 94 | missing_parameters = [] |
screamer | 0:66f3b5499f7f | 95 | for parameter in self.required_parameters: |
screamer | 0:66f3b5499f7f | 96 | if parameter not in kwargs: |
screamer | 0:66f3b5499f7f | 97 | missing_parameters.append(parameter) |
screamer | 0:66f3b5499f7f | 98 | if len(missing_parameters) > 0: |
screamer | 0:66f3b5499f7f | 99 | self.print_plugin_error("execute parameter(s) '%s' missing!"% (', '.join(parameter))) |
screamer | 0:66f3b5499f7f | 100 | return False |
screamer | 0:66f3b5499f7f | 101 | return True |
screamer | 0:66f3b5499f7f | 102 | |
screamer | 0:66f3b5499f7f | 103 | def run_command(self, cmd, shell=True): |
screamer | 0:66f3b5499f7f | 104 | """ Runs command from command line. |
screamer | 0:66f3b5499f7f | 105 | """ |
screamer | 0:66f3b5499f7f | 106 | result = True |
screamer | 0:66f3b5499f7f | 107 | ret = 0 |
screamer | 0:66f3b5499f7f | 108 | try: |
screamer | 0:66f3b5499f7f | 109 | ret = call(cmd, shell=shell) |
screamer | 0:66f3b5499f7f | 110 | if ret: |
screamer | 0:66f3b5499f7f | 111 | self.print_plugin_error("[ret=%d] Command: %s"% (int(ret), cmd)) |
screamer | 0:66f3b5499f7f | 112 | return False |
screamer | 0:66f3b5499f7f | 113 | except Exception as e: |
screamer | 0:66f3b5499f7f | 114 | result = False |
screamer | 0:66f3b5499f7f | 115 | self.print_plugin_error("[ret=%d] Command: %s"% (int(ret), cmd)) |
screamer | 0:66f3b5499f7f | 116 | self.print_plugin_error(str(e)) |
screamer | 0:66f3b5499f7f | 117 | return result |