Exemple #1
0
    def verify_prerequisite(self, uut, abstract, steps, timeout):
        '''Learn Ops object and verify the requirements.

           If the requirements are not satisfied, then skip to the next
           testcase.

           Args:
               uut (`obj`): Device object.
               abstract (`obj`): Abstract object.
               steps (`step obj`): aetest step object
               timeout (`timeout obj`): Timeout Object

           Returns:
               None

           Raises:
               pyATS Results
        '''
        self.timeout = timeout
        try:
            self.pre_snap = self.mapping.learn_ops(device=uut,
                                                   abstract=abstract,
                                                   steps=steps,
                                                   timeout=self.timeout)
        except Exception as e:
            self.skipped('Cannot learn the feature',
                         from_exception=e,
                         goto=['next_tc'])

        for stp in steps.details:
            if stp.result.name == 'skipped':
                self.skipped('Cannot learn the feature', goto=['next_tc'])

        self.print_local_verifications()

        # get and store the member priority list
        try:
            out = ShowPlatform(device=uut).parse()
            # inital priority storage
            priority_dict = {}
            priority_list = []
            if 'slot' in out:
                for slot in out['slot']:
                    for rp in out['slot'][slot]['rp']:
                        if out['slot'][slot]['rp'][rp]['role'] == 'Member':
                            priority_dict[slot] = \
                                out['slot'][slot]['rp'][rp]['priority']
                            priority_list.append(
                                out['slot'][slot]['rp'][rp]['priority'])

                if len(list(set(priority_list))) != 1:
                    # sorted the slot priority
                    priority_list = sorted(priority_dict.items(),
                                           key=lambda x: x[1])

                    # update the verify_ops requirements
                    for ops, requirements in self.mapping._verify_ops_dict.items(
                    ):
                        if 'platform' in ops:
                            self.mapping._verify_ops_dict[ops][
                                'requirements'].append([
                                    'slot', 'rp',
                                    '{}'.format(priority_list[-1][0]),
                                    'swstack_role', 'Standby'
                                ])
                else:
                    # update the verify_ops requirements
                    for ops, requirements in self.mapping._verify_ops_dict.items(
                    ):
                        if 'platform' in ops:
                            self.mapping._verify_ops_dict[ops][
                                'requirements'].append([
                                    'slot', 'rp', '(?P<members>.*)',
                                    'swstack_role', '(Standby|Member)'
                                ])
        except Exception as e:
            log.warn('Cannot get the member priority. \n{}'.format(str(e)))
Exemple #2
0
def learn_system(device, steps, platform_pts=None):
    """Learn and store the system properties

       Args:
           testbed (`obj`): Testbed object

       Returns:
           None

       Raises:
           pyATS Results
    """

    # learn show version
    if not platform_pts:
        with steps.start(
                "Store image type/router type from 'show version' on {}".
                format(device.name)) as step:
            try:
                output = ShowVersion(device=device).parse()
                device.image_type = output['version']['image_type']
                device.router_type = output['version']['rtr_type']
            except Exception as e:
                log.warning(e)
                step.passx('Cannot get required router info on {}'.format(
                    device.name))

            log.info('Image type: {}\nRouter type: {}'.format(
                device.image_type, device.router_type))

        # learn show version
        with steps.start(
                "Store switches info from 'show platform' on {}".format(
                    device.name)) as step:

            req = {
                'active':
                [['slot', '(?P<switch>.*)', 'rp', '(.*)', 'role', 'Active']],
                'standby':
                [['slot', '(?P<switch>.*)', 'rp', '(.*)', 'role', 'Standby']],
                'members':
                [['slot', '(?P<switch>.*)', 'rp', '(.*)', 'role', 'Member']]
            }

            try:
                output = ShowPlatform(device=device).parse()
                ret = get_requirements(requirements=req, output=output)
                device.active = ret['active'][0]['switch']
                device.standby = ret['standby'][0]['switch']
                device.members = [i['switch'] for i in ret['members']]
            except Exception as e:
                log.warning(e)
                step.passx('Cannot get required router info on {}'.format(
                    device.name))

            log.info(
                'Active Switch: {}\nStandby Switch: {}\nMember Switch: {}'.
                format(device.active, device.standby, device.members))
    else:
        with steps.start("Store image type/router type from PTS on {}".format(
                device.name)) as step:
            try:
                # device.image_type = platform_pts.image_type
                device.image_type = 'developer image'
                device.router_type = platform_pts.rtr_type
            except Exception as e:
                log.warning(e)
                step.passx('Cannot get required router info on {}'.format(
                    device.name))

            log.info('Image type: {}\nRouter type: {}'.format(
                device.image_type, device.router_type))

        with steps.start("Store switches info from PTS on {}".format(
                device.name)) as step:

            req = {
                'active':
                [['slot', 'rp', '(?P<switch>.*)', 'swstack_role', 'Active'],
                 ['slot', 'rp', '(?P<switch>.*)', 'state', 'Ready']],
                'standby':
                [['slot', 'rp', '(?P<switch>.*)', 'swstack_role', 'Standby'],
                 ['slot', 'rp', '(?P<switch>.*)', 'state', 'Ready']],
                'members':
                [['slot', 'rp', '(?P<switch>.*)', 'swstack_role', 'Member'],
                 ['slot', 'rp', '(?P<switch>.*)', 'state', 'Ready']]
            }

            try:
                ret = get_requirements(requirements=req, output=platform_pts)
                device.active = ret['active'][0]['switch']
                device.standby = ret['standby'][0]['switch']
                device.members = [i['switch'] for i in ret['members']]
            except Exception as e:
                log.warning(e)
                step.passx('Cannot get required switches info on {}'.format(
                    device.name))

            log.info(
                'Active Switch: {}\nStandby Switch: {}\nMember Switch: {}'.
                format(device.active, device.standby, device.members))
Exemple #3
0
    def verify_show_platform(self, uut, steps, timeout):
        '''Attempting Platform Manager: Log Check for show platform on Router

           Args:
               uut (`obj`): Device object.
               steps (`step obj`): aetest step object
               timeout (`timeout obj`): Timeout Object

           Returns:
               None

           Raises:
               pyATS Results
        '''

        try:
            output = ShowPlatform(device=uut).parse()
        except Exception as e:
            self.skipped('Cannot get platform info from "show platform"',
                         from_exception=e)

        # get switch environment status
        with steps.start(
                'Get system platform infomration'
                ' from all switches',
                continue_=True) as step:
            requirements = {
                'slot_number': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'slot',
                    '(?P<slot_number>\d+)'
                ]],
                'ports': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'ports',
                    '(?P<ports>\d+)'
                ]],
                'model': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'name',
                    '(?P<model>.*)'
                ]],
                'serial_number': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'sn',
                    '(?P<serial_number>.*)'
                ]],
                'mac_address': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'mac_address',
                    '(?P<mac_address>.*)'
                ]],
                'hw_ver': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'hw_ver',
                    '(?P<hw_ver>.*)'
                ]],
                'sw_ver': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'sw_ver',
                    '(?P<sw_ver>.*)'
                ]],
                'role': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'role',
                    '(?P<role>(Active|Standby|Member))'
                ]],
                'priority': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'priority',
                    '(?P<priority>.*)'
                ]],
                'state': [[
                    'slot', '(?P<stack>.*)', 'rp', '(.*)', 'state',
                    '(?P<state>.*)'
                ]],
                'switch_mac_address':
                [['main', 'switch_mac_address', '(?P<switch_mac_address>.*)']],
                'mac_persistency_wait_time': [[
                    'main', 'mac_persistency_wait_time',
                    '(?P<mac_persistency_wait_time>.*)'
                ]],
            }
            try:
                ret = get_requirements(requirements=requirements,
                                       output=output)
            except Exception as e:
                step.failed("Cannot get stack required info from show platform"
                            "\nrequirements: {}".format(requirements),
                            from_exception=e)

        # check switch status and mode
        with steps.start(
                'Check if all Switches have all information '
                'requires',
                continue_=True) as step:
            # check active switch pid vid and sn info
            for key in ['switch_mac_address', 'mac_persistency_wait_time']:
                if key not in ret:
                    step.failed('Show platform output is not complete! '
                                'Missing {}'.format(key))
                else:
                    log.info('The {k} is {v}'.format(k=key, v=ret[key]))
                    requirements.pop(key)

            try:
                verify_requirements(reqs=requirements,
                                    full_stack=self.full_stack,
                                    keys_dict=ret)
            except Exception as e:
                step.failed(
                    "Show platform output is not complete! Missing switch number"
                    .format(requirements),
                    from_exception=e)