Brian Daniels / mbed-tools

Fork of mbed-tools by Morpheus

Committer:
bridadan
Date:
Tue Apr 05 13:33:41 2016 +0000
Revision:
12:66348abb837e
Parent:
0:4a2e5f0422d6
Allowing "--source" to be specified multiple times, allowing you to compose builds from separate directories

Who changed what in which revision?

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