Anders Blomdell / mbed-sdk-tools
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?

UserRevisionLine numberNew 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