Beispiel #1
0
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)
Beispiel #2
0
    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()
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
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)
Beispiel #6
0
    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)
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #9
0
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)