示例#1
0
    def load_config(self, context, ixia_config_file_name):

        self.ixl.load_config(ixia_config_file_name)
        self.ixl.repository.test.set_attributes(enableForceOwnership=False)
        config_elements = self.ixl.repository.get_elements()

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        reservation_ports = {}
        for port in get_reservation_resources(my_api, context.reservation.reservation_id,
                                              'Generic Traffic Generator Port',
                                              'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                                              'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort'):
            reservation_ports[get_family_attribute(my_api, port, 'Logical Name').Value.strip()] = port

        perfectstorms = [ps.FullAddress for ps in get_reservation_resources(my_api, reservation_id,
                                                                            'PerfectStorm Chassis Shell 2G')]

        for name, element in config_elements.items():
            if name in reservation_ports:
                address = get_address(reservation_ports[name])
                ip_address, module, port = address.split('/')
                if ip_address in perfectstorms:
                    address = '{}/{}/{}'.format(ip_address, module, int(port) + 1)
                self.logger.debug('Logical Port {} will be reserved on Physical location {}'.format(name, address))
                element.reserve(address)
            else:
                self.logger.error('Configuration element "{}" not found in reservation elements {}'.
                                  format(element, reservation_ports.keys()))
                raise Exception('Configuration element "{}" not found in reservation elements {}'.
                                format(element, reservation_ports.keys()))

        self.logger.info("Port Reservation Completed")
示例#2
0
    def load_config(self, context, stc_config_file_name):
        """
        :param stc_config_file_name: full path to STC configuration file (tcc or xml)
        """

        self.stc.load_config(stc_config_file_name)
        config_ports = self.stc.project.get_ports()

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        reservation_ports = {}
        for port in get_reservation_resources(
                my_api, reservation_id, 'Generic Traffic Generator Port',
                'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                'STC Chassis Shell 2G.GenericTrafficGeneratorPort'):
            reservation_ports[get_family_attribute(
                my_api, port, 'Logical Name').Value.strip()] = port

        for name, port in config_ports.items():
            if name in reservation_ports:
                address = get_address(reservation_ports[name])
                self.logger.debug(
                    'Logical Port {} will be reserved on Physical location {}'.
                    format(name, address))
                port.reserve(address, force=True, wait_for_up=False)
            else:
                self.logger.error(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))
                raise Exception(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))

        self.logger.info("Port Reservation Completed")
示例#3
0
def connect():
    """ Create Xena manager object and connect to chassis. """

    global xm
    global chassis
    global port1
    global port2
    global session
    global sandbox_id

    session = CloudShellAPISession('localhost', 'admin', 'admin', 'Global')
    if 'SANDBOX_ID' in environ:
        sandbox_id = environ['SANDBOX_ID']
    else:
        context = create_command_context(session, ['xena 2g/Module6/Port0', 'xena 2g/Module6/Port1'],
                                         'Xena Controller', {})
        sandbox_id = context.reservation.reservation_id

    reserved_port1, reserved_port2 = get_reservation_resources(session, sandbox_id,
                                                               'Xena Chassis Shell 2G.GenericTrafficGeneratorPort')
    port1 = get_address(reserved_port1)
    port2 = get_address(reserved_port2)
    chassis = port1.split('/')[0]

    logger = logging.getLogger('log')
    logger.setLevel('INFO')
    logger.addHandler(logging.StreamHandler(sys.stdout))
    xm = init_xena(logger, owner)

    xm.session.add_chassis(chassis)
    def load_config(self, context, xena_configs_folder):

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        reservation_ports = get_reservation_resources(
            my_api, reservation_id,
            'Xena Chassis Shell 2G.GenericTrafficGeneratorPort')
        for reserved_port in reservation_ports:
            config = get_family_attribute(my_api, reserved_port,
                                          'Logical Name').Value.strip()
            address = get_address(reserved_port)
            self.logger.debug(
                'Configuration {} will be loaded on Physical location {}'.
                format(config, address))
            chassis = my_api.GetResourceDetails(
                reserved_port.Name.split('/')[0])
            encripted_password = my_api.GetAttributeValue(
                chassis.Name, 'Xena Chassis Shell 2G.Password').Value
            password = CloudShellSessionContext(
                context).get_api().DecryptPassword(encripted_password).Value
            tcp_port = my_api.GetAttributeValue(
                chassis.Name,
                'Xena Chassis Shell 2G.Controller TCP Port').Value
            if not tcp_port:
                tcp_port = '22611'
            ip, module, port = address.split('/')
            self.xm.session.add_chassis(ip, int(tcp_port), password)
            xena_port = XenaPort(self.xm.session.chassis_list[ip],
                                 '{}/{}'.format(module, port))
            xena_port.reserve(force=True)
            xena_port.load_config(
                path.join(xena_configs_folder, config) + '.xpc')
示例#5
0
 def test_load_config(self):
     reservation_ports = get_reservation_resources(self.session, self.context.reservation.reservation_id,
                                                   'Generic Traffic Generator Port',
                                                   'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                                                   'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, reservation_ports[0], 'Logical Name', 'Traffic1@Network1')
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', 'Traffic2@Network2')
     self.driver.load_config(self.context, 'E:/workspace/python/PyIxLoad/ixload/test/configs/test_config_840.rxf')
 def _load_config(self, config):
     reservation_ports = get_reservation_resources(self.session, self.context.reservation.reservation_id,
                                                   'Generic Traffic Generator Port',
                                                   'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                                                   'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, reservation_ports[0], 'Logical Name', 'Traffic1@Network1')
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', 'Traffic2@Network2')
     self.session.ExecuteCommand(self.context.reservation.reservation_id, 'IxLoad Controller', 'Service',
                                 'load_config', [InputNameValue('ixl_config_file_name', config)])
 def test_load_config(self):
     self.reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Xena Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, self.reservation_ports[0],
                          'Logical Name', 'test_config')
     set_family_attribute(self.session, self.reservation_ports[1],
                          'Logical Name', 'test_config')
     self.driver.load_config(self.context, os.path.dirname(__file__))
示例#8
0
 def test_load_config(self):
     self.reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Xena Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, self.reservation_ports[0],
                          'Logical Name', 'test_config')
     set_family_attribute(self.session, self.reservation_ports[1],
                          'Logical Name', 'test_config')
     self._exec_command(
         'load_config',
         InputNameValue('xena_configs_folder', path.dirname(__file__)))
 def _load_config(self, config, ports):
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Traffic Generator Test IP')
     for index, name in ports.items():
         set_family_attribute(self.session, reservation_ports[index],
                              'Logical Name', name)
     self.session.ExecuteCommand(self.context.reservation.reservation_id,
                                 'IxChariot Controller', 'Service',
                                 'load_config',
                                 [InputNameValue('ixc_config', config)])
 def test_load_config(self):
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Generic Traffic Generator Port',
         'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
         'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'Port 1')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Port 2')
     self.driver.load_config(self.context,
                             path.join(path.dirname(__file__), config))
示例#11
0
 def _load_config(self, config):
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Generic Traffic Generator Port',
         'STC Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'Client 1')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Server 1')
     self.session.ExecuteCommand(
         self.context.reservation.reservation_id, 'Avalanche Controller',
         'Service', 'load_config',
         [InputNameValue('avl_config_file_name', config)])
 def _load_config(self, config_name, scenario):
     config_file = path.join(path.dirname(__file__),
                             '{}.bbp'.format(config_name))
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'ByteBlower Chassis Shell 2G.GenericTrafficGeneratorPort',
         'ByteBlower Chassis Shell 2G.ByteBlowerEndPoint')
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'WAN_PORT')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'PORT_45')
     set_family_attribute(self.session, reservation_ports[2],
                          'Logical Name', 'PC1x2G')
     self.driver.load_config(self.context, config_file, scenario)
    def load_config(self, context, avl_config_file_name, avl_test_name):

        self.avl.load_config(avl_config_file_name)
        if avl_test_name:
            self.test = self.avl.project.tests[avl_test_name]
        else:
            self.test = self.avl.project.tests.values()[0]

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        reservation_ports = {}
        reservation_ports['client'] = {}
        reservation_ports['server'] = {}
        for port in get_reservation_resources(
                my_api, reservation_id, 'Generic Traffic Generator Port',
                'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                'STC Chassis Shell 2G.GenericTrafficGeneratorPort'):
            side, index = get_family_attribute(
                my_api, port, 'Logical Name').Value.strip().split(' ')
            reservation_ports[side.lower()][int(index)] = port

        locations = []
        for index, association in self.test.client.associations.items():
            if index in reservation_ports['client']:
                address = get_address(reservation_ports['client'][index])
                self.logger.debug(
                    'client association {} will be reserved on Physical location {}'
                    .format(index, address))
                locations.append(address)
                association.interface.set_port(address)
            else:
                self._association_not_found('client', index,
                                            reservation_ports['client'])

        for index, association in self.test.server.associations.items():
            if index in reservation_ports['server']:
                address = get_address(reservation_ports['server'][index])
                self.logger.debug(
                    'server association {} will be reserved on Physical location {}'
                    .format(index, address))
                locations.append(address)
                association.interface.set_port(address)
            else:
                self._association_not_found('server', index,
                                            reservation_ports['server'])

        self._reserve_ports(*locations)
        self.logger.info('Port Reservation Completed')
 def test_run_sequencer(self):
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Generic Traffic Generator Port',
         'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
         'STC Chassis Shell 2G.GenericTrafficGeneratorPort')
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'Port 1')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Port 2')
     self.driver.load_config(
         self.context,
         path.join(path.dirname(__file__), 'test_sequencer.tcc'))
     self.driver.sequencer_command(self.context, 'Start')
     self.driver.sequencer_command(self.context, 'Wait')
示例#15
0
 def negative_tests(self):
     test_config = os.path.dirname(__file__).replace('\\', '/') + '/test_config.rxf'
     reservation_ports = get_reservation_resources(self.session, self.context.reservation.reservation_id,
                                                   'Generic Traffic Generator Port'
                                                   'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                                                   'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort')
     assert(len(reservation_ports) == 2)
     set_family_attribute(self.session, reservation_ports[0], 'Logical Name', 'Traffic1@Network1')
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', '')
     self.assertRaises(Exception, self.driver.load_config, self.context, test_config)
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', 'Traffic1@Network1')
     self.assertRaises(Exception, self.driver.load_config, self.context, test_config)
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', 'Port x')
     self.assertRaises(Exception, self.driver.load_config, self.context, test_config)
     # cleanup
     set_family_attribute(self.session, reservation_ports[1], 'Logical Name', 'Traffic2@Network2')
示例#16
0
 def _load_config(self, config_name, scenario):
     config_file = path.join(path.dirname(__file__),
                             '{}.bbp'.format(config_name))
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'ByteBlower Chassis Shell 2G.GenericTrafficGeneratorPort',
         'ByteBlower Chassis Shell 2G.ByteBlowerEndPoint')
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'WAN_PORT')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'PORT_45')
     set_family_attribute(self.session, reservation_ports[2],
                          'Logical Name', 'PC1x2G')
     self.session.ExecuteCommand(
         self.context.reservation.reservation_id, namespace, 'Service',
         'load_config', [
             InputNameValue('config_file_location', config_file),
             InputNameValue('scenario', scenario)
         ])
    def load_config(self, context, ixia_config_file_name):

        self.ixn.new_config()
        self.ixn.load_config(ixia_config_file_name)
        config_ports = self.ixn.root.get_children('vport')

        for port in config_ports:
            port.release()

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        reservation_ports = {}
        for port in get_reservation_resources(
                my_api, reservation_id, 'Generic Traffic Generator Port',
                'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
                'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort'):
            reservation_ports[get_family_attribute(
                my_api, port, 'Logical Name').Value.strip()] = port

        for port in config_ports:
            name = port.obj_name()
            if name in reservation_ports:
                address = get_address(reservation_ports[name])
                self.logger.debug(
                    'Logical Port {} will be reserved on Physical location {}'.
                    format(name, address))
                port.reserve(address, wait_for_up=False)
            else:
                self.logger.error(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))
                raise Exception(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))

        for port in config_ports:
            port.wait_for_states(40, 'up')

        self.logger.info("Port Reservation Completed")
示例#18
0
    def load_config(self, context, bbl_config_file_name, scenario):

        self.project = bbl_config_file_name.replace('\\', '/')
        self.scenario = scenario

        return

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        # todo: geat ports from bbl.
        config_ports = ['WAN_PORT', 'PORT_45', 'PC1x2G']

        reservation_ports = {}
        for port in get_reservation_resources(
                my_api, reservation_id,
                'ByteBlower Chassis Shell 2G.GenericTrafficGeneratorPort',
                'ByteBlower Chassis Shell 2G.ByteBlowerEndPoint'):
            reservation_ports[get_family_attribute(
                my_api, port, 'Logical Name').Value.strip()] = port

        for port in config_ports:
            name = port.obj_name()
            if name in reservation_ports:
                address = get_address(reservation_ports[name])
                self.logger.debug(
                    'Logical Port {} will be reserved on Physical location {}'.
                    format(name, address))
                port.reserve(address, wait_for_up=False)
            else:
                self.logger.error(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))
                raise Exception(
                    'Configuration port "{}" not found in reservation ports {}'
                    .format(port, reservation_ports.keys()))

        self.logger.info("Port Reservation Completed")
 def negative_tests(self):
     reservation_ports = get_reservation_resources(
         self.session, self.context.reservation.reservation_id,
         'Generic Traffic Generator Port',
         'PerfectStorm Chassis Shell 2G.GenericTrafficGeneratorPort',
         'Ixia Chassis Shell 2G.GenericTrafficGeneratorPort')
     assert (len(reservation_ports) == 2)
     set_family_attribute(self.session, reservation_ports[0],
                          'Logical Name', 'Port 1')
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', '')
     self.assertRaises(Exception, self.driver.load_config, self.context,
                       path.join(path.dirname(__file__), config))
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Port 1')
     self.assertRaises(Exception, self.driver.load_config, self.context,
                       path.join(path.dirname(__file__), config))
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Port x')
     self.assertRaises(Exception, self.driver.load_config, self.context,
                       path.join(path.dirname(__file__), config))
     # cleanup
     set_family_attribute(self.session, reservation_ports[1],
                          'Logical Name', 'Port 2')
示例#20
0
    def load_config(self, context, ixc_config):

        self.session = self.connection.createSession('ixchariot')
        self.session.startSession()
        self.session.loadConfiguration(ixc_config)

        reservation_id = context.reservation.reservation_id
        my_api = CloudShellSessionContext(context).get_api()

        src_resources = {}
        dst_resources = {}
        for ep in get_reservation_resources(my_api, reservation_id,
                                            'Traffic Generator Test IP'):
            logical_name = my_api.GetAttributeValue(
                ep.Name, 'Logical Name').Value.strip()
            for end in logical_name.split():
                flow_end = end.split('-')[0].lower()
                flow_index = int(end.split('-')[1]) if len(
                    end.split('-')) == 2 else 1
                if flow_end in ['src', 'source']:
                    src_resources.setdefault(flow_index, []).append(ep.Name)
                elif flow_end in ['dst', 'destination']:
                    dst_resources.setdefault(flow_index, []).append(ep.Name)
                else:
                    raise Exception(
                        'Invalid logical name {} - {} not in [src, source, dst, destination]'
                        .format(logical_name, flow_end))

        flows_url = self._get_flows_url()
        flows = self.session.httpGet(flows_url)
        ids = [f.id for f in flows]
        if sorted(src_resources) != sorted(ids):
            raise Exception(
                'Src resource ids {} do not match flow IDs {}'.format(
                    src_resources, ids))
        if sorted(dst_resources) != sorted(ids):
            raise Exception(
                'Dst resource ids {} do not match flow IDs {}'.format(
                    dst_resources, ids))
        for id_ in ids:
            network_url = '{}/{}/network/'.format(flows_url, id_)
            self.session.httpDelete(network_url + 'sourceEndpoints')
            self.session.httpDelete(network_url + 'destinationEndpoints')

        for id_ in src_resources:
            for src_ep in src_resources[id_]:
                ep = self.ixchariotapi.createEndpoint(
                    src_ep.split('/')[2],
                    src_ep.split('/')[1])
                self.session.httpPost('{}/{}/network/sourceEndpoints'.format(
                    flows_url, id_),
                                      data=ep)

        for id_ in dst_resources:
            for src_ep in dst_resources[id_]:
                ep = self.ixchariotapi.createEndpoint(
                    src_ep.split('/')[2],
                    src_ep.split('/')[1])
                self.session.httpPost(
                    '{}/{}/network/destinationEndpoints'.format(
                        flows_url, id_),
                    data=ep)

        # In case of multiple eps delay is required to make sure configuration completed (based on trial and error).
        time.sleep(4)
        self.logger.info("Load Configuration Completed")

        return self.session.sessionId