def __print_fw_version_of_device_connected_to_port(port): '''Print firmware version of a device connected to the COM port''' try: with OpenThreadController(port) as otc: print('%s: %s' % (port, otc.version)) except: logger.exception('failed to get version of %s' % port)
def _init_dut(self): """Initialize the DUT. DUT will be restarted. and openthread will started. """ dut_port = settings.DUT_DEVICE dut = OpenThreadController(dut_port) self.dut = dut if not settings.APC_HOST or self.manual_reset: self.dut.reset()
def _init_dut(self): """Initialize the DUT. DUT will be restarted. and openthread will started. """ if self.auto_dut: self.dut = None return dut_port = settings.DUT_DEVICE[0] dut = OpenThreadController(dut_port) self.dut = dut
def _init_devices(self): """Reboot all usb devices. Note: If APC_HOST is not valid, usb devices is not rebooted. """ if self.manual_reset: raw_input('Reset golden devices and press enter to continue..') return elif not settings.PDU_CONTROLLER_TYPE: if settings.GOLDEN_DEVICE_TYPE != 'OpenThread': logger.warning('All golden devices may not be resetted') return if settings.AUTO_DUT: return for device in settings.GOLDEN_DEVICES: port, _ = device try: with OpenThreadController(port) as otc: logger.info('Resetting %s' % port) otc.reset() except: logger.exception('Failed to reset device %s' % port) self.history.mark_bad_golden_device(device) return tries = 3 pdu_factory = PduControllerFactory() while True: try: pdu = pdu_factory.create_pdu_controller( settings.PDU_CONTROLLER_TYPE) pdu.open(**settings.PDU_CONTROLLER_OPEN_PARAMS) except EOFError: logger.warning('Failed to connect to telnet') tries = tries - 1 if tries: time.sleep(10) continue else: logger.error('Fatal error: cannot connect to apc') raise else: pdu.reboot(**settings.PDU_CONTROLLER_REBOOT_PARAMS) pdu.close() break time.sleep(20)
def list_devices(names=None, continue_from=None, **kwargs): """List devices in settings file and print versions""" if continue_from: continue_from = settings.GOLDEN_DEVICES.index(continue_from) else: continue_from = 0 for port in names or settings.GOLDEN_DEVICES[continue_from:]: try: with OpenThreadController(port) as otc: print('%s: %s' % (port, otc.version)) except: logger.exception('failed to get version of %s' % port)
def _init_devices(self): """Reboot all usb devices. Note: If APC_HOST is not valid, usb devices is not rebooted. """ if self.manual_reset: raw_input('Reset golden devices and press enter to continue..') return elif not settings.APC_HOST: if settings.GOLDEN_DEVICE_TYPE != 'OpenThread': logger.warning('All golden devices may not be resetted') return if settings.AUTO_DUT: return for device in settings.GOLDEN_DEVICES: try: with OpenThreadController(device) as otc: logger.info('Resetting %s' % device) otc.reset() except: logger.exception('Failed to reset device %s' % device) self.history.mark_bad_golden_device(device) return tries = 3 while True: try: apc = ApcPduController(settings.APC_HOST) except EOFError: logger.warning('Failed to connect to telnet') tries = tries - 1 if tries: time.sleep(10) continue else: logger.error('Fatal error: cannot connect to apc') raise else: apc.reboot(settings.APC_OUTLET) apc.close() break time.sleep(20)
def list_devices(names=None, continue_from=None, **kwargs): """List devices in settings file and print versions""" if not names: names = [device for device, _type in settings.GOLDEN_DEVICES if _type == 'OpenThread'] if continue_from: continue_from = names.index(continue_from) else: continue_from = 0 for port in names[continue_from:]: try: with OpenThreadController(port) as otc: print('%s: %s' % (port, otc.version)) except BaseException: logger.exception('failed to get version of %s' % port)
def discover(names=None, pattern='*.py', skip='efp', dry_run=False, blacklist=None, manual_reset=False, delete_history=False, list_devices=False, max_devices=0, continue_from=None, result_file='./result.json', auto_reboot=False): '''Discover all test cases and skip those passed Args: pattern (str): Pattern to match case modules, refer python's unittest documentation for more details skip (str): types cases to skip ''' if list_devices: if continue_from: continue_from = settings.GOLDEN_DEVICES.index(continue_from) else: continue_from = 0 for port in names or settings.GOLDEN_DEVICES[continue_from:]: try: with OpenThreadController(port) as otc: print('%s: %s' % (port, otc.version)) except: logger.exception('failed to get version of %s' % port) return if delete_history: os.system('del history.json') if blacklist: try: excludes = filter(lambda line: not line.startswith('#'), map(lambda line: line.strip('\n'), open(blacklist, 'r').readlines())) except: logger.exception('Failed to open test case black list file') raise else: excludes = [] log = None if os.path.isfile(result_file): try: log = json.load(open(result_file, 'r')) except: pass if not log: log = {} json.dump(log, open(result_file, 'w'), indent=2) suite = unittest.TestSuite() discovered = unittest.defaultTestLoader.discover('cases', pattern) if names and continue_from: names = names[names.index(continue_from):] for s1 in discovered: for s2 in s1: for case in s2: if case.__class__ is HarnessCase: continue case_name = unicode(case.__class__.__name__) # whitelist if len(names) and case_name not in names: logger.info('case[%s] skipped', case_name) continue # skip cases if case_name in log.keys(): if (log[case_name]['passed'] and ('p' in skip)) \ or (log[case_name]['passed'] is False and ('f' in skip)) \ or (log[case_name]['passed'] is None and ('e' in skip)): logger.warning('case[%s] skipped for its status[%s]', case_name, log[case_name]['passed']) continue # continue from if continue_from: if continue_from != case_name: logger.warning('case[%s] skipped for continue from[%s]', case_name, continue_from) continue else: continue_from = None # black list if case_name in excludes: logger.warning('case[%s] skipped for blacklist', case_name) continue # max devices if max_devices and case.golden_devices_required > max_devices: logger.warning('case[%s] skipped for exceeding max golden devices allowed[%d]', case_name, max_devices) continue suite.addTest(case) logger.info('case[%s] added', case_name)
def discover(names=None, pattern='*.py', skip='efp', dry_run=False, manual_reset=False, delete_blacklist=False, list_devices=False, continue_from=None, result_file='./result.json', auto_reboot=False): '''Discover all test cases and skip those passed Args: pattern (str): Pattern to match case modules, refer python's unittest documentation for more details skip (str): types cases to skip ''' if list_devices: if continue_from: continue_from = settings.GOLDEN_DEVICES.index(continue_from) else: continue_from = 0 for port in names or settings.GOLDEN_DEVICES[continue_from:]: print('%s: %s' % (port, OpenThreadController(port).version)) return if delete_blacklist: os.system('del history.json') log = None if os.path.isfile(result_file): try: log = json.load(open(result_file, 'r')) except: pass if not log: log = {} json.dump(log, open(result_file, 'w'), indent=2) suite = unittest.TestSuite() discovered = unittest.defaultTestLoader.discover('cases', pattern) if names and continue_from: names = names[names.index(continue_from):] for s1 in discovered: for s2 in s1: for case in s2: if case.__class__ is HarnessCase: continue case_name = unicode(case.__class__.__name__) # whitelist if len(names): if case_name in names: suite.addTest(case) logger.info('case[%s] added', case_name) # skip cases else: if case_name in log.keys(): if (log[case_name]['passed'] and ('p' in skip)) \ or (log[case_name]['passed'] is False and ('f' in skip)) \ or (log[case_name]['passed'] is None and ('e' in skip)): logger.warning('case[%s] skipped', case_name) continue # continue from if continue_from: if continue_from != case_name: logger.warning('case[%s] skipped', case_name) continue else: continue_from = None suite.addTest(case) logger.info('case[%s] added', case_name)