コード例 #1
0
    def test_update_status_none(self):

        resource_data = {}
        for key, value in RESOURCE_RETURN_MAPPING['ext_globalip'].iteritems():
            if isinstance(value, dict):
                resource_data[key] = []
                for resource_row in fixture.RESOURCE_DATA_GLOBALIP[key]:
                    resource_data[key].append(Resource(resource_row, value))

        node_data = []
        for data in fixture.NODE_DATA_LIST:
            node_data.append(Node(data,
                                  NODE_RETURN_MAPPING['all_node']['Virtual']))

        nal_api.get_resources(IsA(http.HttpRequest),
                              IsA('str'),
                              func_type='ext_globalip')\
            .AndReturn(resource_data)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          IsA('str'),
                          func_type='all_node')\
            .AndReturn(node_data)

        self.mox.ReplayAll()

        obj_id = '|'.join(['ext_globalip',
                           'global_ip',
                           '135'])
        res = self.client.get(reverse(RESOURCE_UPDATE_URL,
                                      kwargs={'resource_id': obj_id,
                                              'update_type': 'change_status'}))
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'project/resource/update.html')
コード例 #2
0
    def test_detail_api_error(self):
        obj_id = '|'.join(
            ['vfw', str(fixture.NODE_DATA_VFW['vnf_info'][0]['ID'])])
        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndRaise(OSError)

        tenant_names = {}
        tenant_list = []
        for data in TENANT_LIST_RETURN:
            tenant_list.append(Tenant(data))
            tenant_names[data['id']] = data['name']
        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_list, True])

        node_data = []
        check_node_data = []
        for data in fixture.NODE_DATA_LIST:
            node = Node(data, NODE_RETURN_MAPPING['all_node']['Virtual'])
            node_data.append(node)
            node.tenant_name = tenant_names.get(node.tenant_id, None)
            check_node_data.append(node)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(NODE_DETAIL_URL, kwargs={"node_id": obj_id}))

        self.assertRedirects(res, NODE_INDEX_URL)
コード例 #3
0
    def test_update_check(self):
        node_data = {}
        obj_id = '|'.join(
            ['vfw', str(fixture.NODE_DATA_VFW['vnf_info'][0]['ID'])])
        for key, value in NODE_RETURN_MAPPING['vfw'].iteritems():
            if isinstance(value, dict):
                node_data[key] = []
                for node_row in fixture.NODE_DATA_VFW[key]:
                    node_data[key].append(Node(node_row, value))

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        self.mox.ReplayAll()

        res = self.client.get(
            reverse(NODE_UPDATE_URL, args=(obj_id, 'license')))
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/node/update.html')
        self.assertEqual(res.context['text'], IsA('str'))
コード例 #4
0
    def test_index_multi_data(self):
        tenant_names = {}
        tenant_list = []
        for data in TENANT_LIST_RETURN:
            tenant_list.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        node_data = []
        check_node_data = []
        for data in fixture.NODE_DATA_LIST:
            node = Node(data, NODE_RETURN_MAPPING['all_node']['Virtual'])
            node_data.append(node)
            node.tenant_name = tenant_names.get(node.tenant_id, None)
            check_node_data.append(node)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_list, True])

        self.mox.ReplayAll()
        res = self.client.get(NODE_INDEX_URL)
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/node/index.html')
        self.assertItemsEqual(res.context['table'].data, check_node_data)
コード例 #5
0
    def test_update_api_error(self):
        node_data = {}
        obj_id = '|'.join(
            ['vfw', str(fixture.NODE_DATA_VFW['vnf_info'][0]['ID'])])
        for key, value in NODE_RETURN_MAPPING['vfw'].iteritems():
            if isinstance(value, dict):
                node_data[key] = []
                for node_row in fixture.NODE_DATA_VFW[key]:
                    node_data[key].append(Node(node_row, value))

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        nal_api.update_node(IsA(http.HttpRequest), IsA({})).AndRaise(OSError)

        self.mox.ReplayAll()

        formData = {
            'node_id': obj_id.split('|')[1],
            'function_type': obj_id.split('|')[0],
            'type': '1',
            'device_type': '1',
            'update_type': 'license'
        }
        self.assertRaises(OSError, self.client.post,
                          reverse(NODE_UPDATE_URL, args=(obj_id, 'license')),
                          formData)
コード例 #6
0
    def test_index_api_error_handle(self):

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node')\
            .AndRaise(exceptions.NotAvailable())

        tenant_list = []
        for data in TENANT_LIST_RETURN:
            tenant_list.append(Tenant(data))
        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_list, True])

        self.mox.ReplayAll()
        res = self.client.get(NODE_INDEX_URL)
        self.assertItemsEqual(res.context['table'].data, [])
コード例 #7
0
    def test_detail_tenant_error(self):
        node_data = {}
        obj_id = '|'.join(
            ['vfw', str(fixture.NODE_DATA_VFW['vnf_info'][0]['ID'])])
        for key, value in NODE_RETURN_MAPPING['vfw'].iteritems():
            if isinstance(value, dict):
                node_data[key] = []
                for node_row in fixture.NODE_DATA_VFW[key]:
                    node_data[key].append(Node(node_row, value))

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        network_list = []
        for network_data in NETWORK_LIST_FOR_TENANT_RETURN:
            network_list.append(Network(network_data))

        api.neutron.network_list_for_tenant(IsA(http.HttpRequest),
                                            IsA('str')).AndReturn(network_list)

        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndRaise(OSError)

        tenant_names = {}
        tenant_list = []
        for data in TENANT_LIST_RETURN:
            tenant_list.append(Tenant(data))
            tenant_names[data['id']] = data['name']
        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_list, True])

        node_data = []
        check_node_data = []
        for data in fixture.NODE_DATA_LIST:
            node = Node(data, NODE_RETURN_MAPPING['all_node']['Virtual'])
            node_data.append(node)
            node.tenant_name = tenant_names.get(node.tenant_id, None)
            check_node_data.append(node)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(NODE_DETAIL_URL, kwargs={"node_id": obj_id}))

        self.assertRedirects(res, NODE_INDEX_URL)
コード例 #8
0
    def delete(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        node_id = obj_id.split('|')[1]
        port_id = obj_id.split('|')[2]

        node = nal_api.get_nodes(request, rec_id=node_id, func_type=func_type)
        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]
        port_list = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name']]
        for port_data in port_list:
            if port_data.port_id == port_id:
                IaaS_network_id = port_data.IaaS_network_id
                IaaS_port_id = port_data.IaaS_port_id
                IaaS_port_info = api.neutron.port_get(request, IaaS_port_id)
                IaaS_subnet_id = IaaS_port_info.fixed_ips[0]['subnet_id']
        try:
            LOG.info('Deleting port "%s".' % IaaS_network_id)
            params = {
                'function_type': func_type + '_port_d',
                'node_id': detail_data.node_id,
                'IaaS_network_id': IaaS_network_id,
                'IaaS_subnet_id': IaaS_subnet_id,
                'IaaS_port_id': IaaS_port_id,
                'port_id': port_id,
                'device_type': detail_data.device_type
            }
            nal_api.update_node(request, params)
        except Exception:
            msg = _('Failed to delete network')
            redirect_id = '|'.join([func_type, node_id])
            redirect = reverse(constants.NODE_DETAIL_URL,
                               kwargs={"node_id": redirect_id})
            exceptions.handle(request, msg, redirect=redirect)
コード例 #9
0
    def get_data(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        node_id = obj_id.split('|')[1]
        node = nal_api.get_nodes(request, rec_id=node_id, func_type=func_type)

        if node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']] == []:
            raise exceptions.NotFound

        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]
        detail_data.device_name = \
            DEVICE_TYPE_MAPPING[func_type][str(detail_data.device_type)]

        tenant_name = detail_data.tenant_id
        try:
            if tenant_name != '-':
                tenant_data = api.keystone.tenant_get(request,
                                                      detail_data.tenant_id)
                tenant_name = getattr(tenant_data, 'name', '-')
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve tenant information."))
        detail_data.tenant_name = tenant_name

        return detail_data
コード例 #10
0
    def test_index_no_data(self):
        node_data = []
        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        tenant_list = []
        for data in TENANT_LIST_RETURN:
            tenant_list.append(Tenant(data))
        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_list, True])

        self.mox.ReplayAll()
        res = self.client.get(NODE_INDEX_URL)
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/node/index.html')
        self.assertItemsEqual(res.context['table'].data, [])
コード例 #11
0
    def test_index_tenant_error(self):
        node_data = []
        for data in fixture.NODE_DATA_LIST:
            node = Node(data, NODE_RETURN_MAPPING['all_node']['Virtual'])
            node_data.append(node)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndRaise(OSError)

        self.mox.ReplayAll()
        res = self.client.get(NODE_INDEX_URL)

        self.assertTemplateUsed(res, 'admin/node/index.html')
        self.assertItemsEqual(res.context['table'].data, node_data)
        self.assertMessageCount(res, error=1)
コード例 #12
0
    def test_update_parameter_error(self):

        resource_data = {}
        for key, value in RESOURCE_RETURN_MAPPING['ext_globalip'].iteritems():
            if isinstance(value, dict):
                resource_data[key] = []
                for resource_row in fixture.RESOURCE_DATA_GLOBALIP[key]:
                    resource_data[key].append(Resource(resource_row, value))

        node_data = []
        for data in fixture.NODE_DATA_LIST:
            node_data.append(Node(data,
                                  NODE_RETURN_MAPPING['all_node']['Virtual']))

        nal_api.get_resources(IsA(http.HttpRequest),
                              IsA('str'),
                              func_type='ext_globalip')\
            .AndReturn(resource_data)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          IsA('str'),
                          func_type='all_node')\
            .AndReturn(node_data)

        nal_api.update_resource(IsA(http.HttpRequest),
                                IsA({}))\
            .AndRaise(exceptions.NotAvailable())

        self.mox.ReplayAll()

        obj_id = '|'.join(['ext_globalip',
                           'global_ip',
                           '133'])
        formData = {'func_type': 'ext_globalip',
                    'resource': '133',
                    'status': '2',
                    'node_id': 'xxxxx-xxxxx-xxxxx-xxxxx-xxxx1',
                    'update_type': 'change_status'}
        res = self.client.post(reverse(RESOURCE_UPDATE_URL,
                                       args=(obj_id, 'change_status')),
                               formData)

        self.assertTemplateUsed(res, 'project/resource/update.html')
コード例 #13
0
    def test_update_status_success(self):

        resource_data = {}
        for key, value in RESOURCE_RETURN_MAPPING['ext_globalip'].iteritems():
            if isinstance(value, dict):
                resource_data[key] = []
                for resource_row in fixture.RESOURCE_DATA_GLOBALIP[key]:
                    resource_data[key].append(Resource(resource_row, value))

        node_data = []
        for data in fixture.NODE_DATA_LIST:
            node_data.append(Node(data,
                                  NODE_RETURN_MAPPING['all_node']['Virtual']))

        nal_api.get_resources(IsA(http.HttpRequest),
                              IsA('str'),
                              func_type='ext_globalip')\
            .AndReturn(resource_data)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          IsA('str'),
                          func_type='all_node')\
            .AndReturn(node_data)

        nal_api.update_resource(IsA(http.HttpRequest),
                                IsA({})).AndReturn(True)

        self.mox.ReplayAll()

        obj_id = '|'.join(['ext_globalip',
                           'global_ip',
                           '133'])
        formData = {'func_type': 'ext_globalip',
                    'resource': '133',
                    'status': '2',
                    'node_id': 'xxxxx-xxxxx-xxxxx-xxxxx-xxxx1',
                    'update_type': 'change_status'}
        res = self.client.post(reverse(RESOURCE_UPDATE_URL,
                                       args=(obj_id, 'change_status')),
                               formData)
        self.assertNoFormErrors(res)
        self.assertMessageCount(success=1)
コード例 #14
0
ファイル: views.py プロジェクト: openmsa/NO
 def _get_data(self):
     try:
         func_type = self.kwargs['node_id'].split('|')[0]
         node_id = self.kwargs['node_id'].split('|')[1]
         node = nal_api.get_nodes(self.request, rec_id=node_id,
                                  func_type=func_type)
     except Exception:
         msg = _('Unable to retrieve details for node "%s".') \
             % (node_id)
         exceptions.handle(self.request, msg,
                           redirect=self.get_redirect_url())
     return node
コード例 #15
0
ファイル: tables.py プロジェクト: openmsa/NO
    def get_data(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        node_id = obj_id.split('|')[1]
        node = nal_api.get_nodes(request, rec_id=node_id, func_type=func_type)

        if node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']] == []:
            raise exceptions.NotFound

        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]
        detail_data.device_name = \
            DEVICE_TYPE_MAPPING[func_type][str(detail_data.device_type)]
        return detail_data
コード例 #16
0
    def test_detail_plb(self):

        node_data = {}
        obj_id = '|'.join(
            ['plb', str(fixture.NODE_DATA_PLB['pnf_info'][0]['ID'])])
        for key, value in NODE_RETURN_MAPPING['plb'].iteritems():
            if isinstance(value, dict):
                node_data[key] = []
                for node_row in fixture.NODE_DATA_PLB[key]:
                    node_data[key].append(Node(node_row, value))

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        network_list = []
        for network_data in NETWORK_LIST_FOR_TENANT_RETURN:
            network_list.append(Network(network_data))

        api.neutron.network_list_for_tenant(IsA(http.HttpRequest),
                                            IsA('str')).AndReturn(network_list)

        tenant_data = Tenant({
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        })

        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndReturn(tenant_data)

        self.mox.ReplayAll()
        res = self.client.get(
            reverse(NODE_DETAIL_URL, kwargs={"node_id": obj_id}))
        self.assertNoFormErrors(res)
        self.assertTemplateUsed(res, 'admin/node/detail.html')
        for i, detail \
                in enumerate(NODE_DETAIL_DISPLAY_COLUMNS['plb']['detail']):
            self.assertItemsEqual(res.context['node'][i][0], detail[0])
コード例 #17
0
ファイル: forms.py プロジェクト: openmsa/NO
    def __init__(self, request, *args, **kwargs):
        super(UpdateNodeForm, self).__init__(request, *args, **kwargs)

        func_type = kwargs['initial']['obj_id'].split('|')[0]
        node_id = kwargs['initial']['obj_id'].split('|')[1]
        port_id = ''
        if len(kwargs['initial']['obj_id'].split('|')) == 3:
            port_id = kwargs['initial']['obj_id'].split('|')[2]
        update_type = kwargs['initial']['update_type']

        node = nal_api.get_nodes(self.request,
                                 rec_id=node_id,
                                 func_type=func_type)
        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]
        network_list = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name']]

        self.fields['node_id'].initial = detail_data.node_id
        self.fields['function_type'].initial = func_type
        self.fields['update_type'].initial = update_type
        self.fields['device_type'].initial = detail_data.device_type

        if NODE_UPDATE_COLUMNS[update_type]['display_type'] == 'input_column':
            device_name = \
                DEVICE_TYPE_MAPPING[func_type][str(detail_data.device_type)]

            for key, val in NODE_UPDATE_COLUMNS[update_type]['common'].items():
                self.fields[key] = getattr(forms, val['field'])(
                    label=val['label'],
                    choices=val['choices'],
                    required=val['required'])

            for column in NODE_UPDATE_COLUMNS[update_type]['separate']:
                if device_name in DISPLAY_UPDATE_COLUMNS_MAP[column[0]]:
                    self.fields[column[0]] = getattr(
                        forms, column[1]['field'])(
                            label=column[1]['label'],
                            required=column[1]['required'],
                            help_text=column[1].get('help_text'))

            self._logic_by_update_type(request, update_type, device_name,
                                       detail_data, network_list, port_id)

        elif NODE_UPDATE_COLUMNS[update_type]['display_type'] == 'check':
            pass

        else:
            pass
コード例 #18
0
ファイル: forms.py プロジェクト: openmsa/NO
    def __init__(self, request, *args, **kwargs):
        super(UpdateNodeForm, self).__init__(request, *args, **kwargs)

        func_type = kwargs['initial']['obj_id'].split('|')[0]
        node_id = kwargs['initial']['obj_id'].split('|')[1]
        update_type = kwargs['initial']['update_type']

        node = nal_api.get_nodes(self.request,
                                 rec_id=node_id,
                                 func_type=func_type)
        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]

        self.fields['node_id'].initial = detail_data.node_id
        self.fields['function_type'].initial = func_type
        self.fields['update_type'].initial = update_type
        self.fields['type'].initial = detail_data.type
        self.fields['device_type'].initial = detail_data.device_type
コード例 #19
0
    def delete(self, request, obj_id):
        func_type = obj_id.split('|')[0]
        node_id = obj_id.split('|')[1]

        node = nal_api.get_nodes(request, rec_id=node_id, func_type=func_type)
        detail_data = \
            node[NODE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']][0]

        job_cleaning_mode = '0'
        if str(detail_data.task_status) == '9':
            job_cleaning_mode = '1'

        try:
            LOG.info('Deleting node "%s".' % node_id)
            nal_api.delete_node(request, func_type, node_id,
                                detail_data.device_type, job_cleaning_mode)
        except Exception:
            redirect = reverse(constants.NODE_INDEX_URL)
            exceptions.handle(request, redirect=redirect)
コード例 #20
0
ファイル: views.py プロジェクト: openmsa/NO
    def get_data(self):
        nodes = []
        try:
            tenant_id = self.request.user.project_id
            nodes = nal_api.get_nodes(self.request, tenant_id,
                                      func_type='all_node')
        except Exception:
            exceptions.handle(self.request,
                              _('Unable to retrieve node list.'))

        node_list = []
        for node in nodes:
            node.func_type = \
                NODE_FUNCTION_TYPE_MAPPING[str(node.apl_type)][str(node.type)]
            node.device_name = \
                DEVICE_TYPE_MAPPING[node.func_type][str(node.device_type)]
            node_list.append(node)

        return node_list
コード例 #21
0
ファイル: forms.py プロジェクト: openmsa/NO
    def __init__(self, request, *args, **kwargs):
        super(UpdateResourceForm, self).__init__(request, *args, **kwargs)

        func_type = kwargs['initial']['resource_id'].split('|')[0]
        resource_id = kwargs['initial']['resource_id'].split('|')[2]
        update_type = kwargs['initial']['update_type']

        tenant_id = self.request.user.project_id
        resource = nal_api.get_resources(self.request,
                                         tenant_id,
                                         func_type=func_type)
        self.fields['resource'].initial = resource_id
        self.fields['func_type'].initial = func_type
        self.fields['update_type'].initial = update_type

        update_detail_info = RESOURCE_UPDATE_COLUMNS_DEF[update_type]
        if update_detail_info['display_type'] == 'input_column':
            for contract_data in resource['contract_info']:
                if str(contract_data.id) == resource_id:
                    detail_data = contract_data
                    self.fields['resource'].initial = contract_data.resource
                    break
            else:
                raise exceptions.NotFound

            for column in update_detail_info['common']:
                input_attrs = {}
                for attr_key, attr_val in column[1]['widget'].items():
                    input_attrs[attr_key] = attr_val

                if column[1]['field'] == 'ChoiceField':
                    self.fields[column[0]] = getattr(
                        forms, column[1]['field'])(
                            label=column[1]['label'],
                            choices=column[1]['choices'],
                            required=column[1]['required'],
                            widget=forms.Select(attrs=input_attrs))
                else:
                    self.fields[column[0]] = getattr(
                        forms, column[1]['field'])(
                            label=column[1]['label'],
                            required=column[1]['required'],
                            widget=forms.TextInput(attrs=input_attrs))

                if hasattr(detail_data, column[0]):
                    self.fields[column[0]].initial = getattr(
                        detail_data, column[0])

            for column in update_detail_info['separate']:
                input_attrs = {}
                for input in column[1]['input_type']:
                    input_attrs['data-' + input] = column[1]['label']

                input_attrs['class'] = 'switched'
                input_attrs['id'] = column[0]

                if column[1]['field'] == 'ChoiceField':
                    self.fields[column[0]] = \
                        getattr(forms, column[1]['field'])(
                            label=column[1]['label'],
                            choices=column[1]['choices'],
                            required=column[1]['required'],
                            widget=forms.Select(attrs=input_attrs))
                else:
                    self.fields[column[0]] = \
                        getattr(forms, column[1]['field'])(
                            label=column[1]['label'],
                            required=column[1]['required'],
                            widget=forms.TextInput(attrs=input_attrs))

                if hasattr(detail_data, column[0]):
                    self.fields[column[0]].initial = getattr(
                        detail_data, column[0])

            if 'node_id' in self.fields:
                nodes = nal_api.get_nodes(self.request,
                                          tenant_id,
                                          func_type='all_node')

                node_choices = []
                for node in nodes:
                    if node.type == '2':
                        node_choices.append((node.node_id, node.name
                                             or node.node_id))

                if node_choices:
                    self.fields['node_id'].choices = node_choices

                if getattr(detail_data, 'status') != '0':
                    self.fields['status'].initial = '2'
                    self.fields['node_id'].initial = getattr(
                        detail_data, 'node_id')
        else:
            pass
コード例 #22
0
    def test_row_update(self):

        node_data = {}
        obj_id = '|'.join(
            ['vlb', str(fixture.NODE_DATA_VLB['vnf_info'][0]['ID'])])
        for key, value in NODE_RETURN_MAPPING['vlb'].iteritems():
            if isinstance(value, dict):
                node_data[key] = []
                for node_row in fixture.NODE_DATA_VLB[key]:
                    node_data[key].append(Node(node_row, value))

        nal_api.get_nodes(IsA(http.HttpRequest),
                          rec_id=obj_id.split('|')[1],
                          func_type=obj_id.split('|')[0]).AndReturn(node_data)

        tenant_data = Tenant({
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        })

        api.keystone.tenant_get(IsA(http.HttpRequest),
                                IsA('str')).AndReturn(tenant_data)

        tenant_list = [{
            'id': 'aaa8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameA'
        }, {
            'id': 'bbb8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameB'
        }, {
            'id': 'ccc8f50f82da4370813e6ea797b1fb87',
            'name': 'network_nameC'
        }]
        tenant_data = []
        tenant_names = {}
        for data in tenant_list:
            tenant_data.append(Tenant(data))
            tenant_names[data['id']] = data['name']

        node_data = []
        check_node_data = []
        for data in fixture.NODE_DATA_LIST:
            node = Node(data, NODE_RETURN_MAPPING['all_node']['Virtual'])
            node_data.append(node)
            node.tenant_name = tenant_names.get(node.tenant_id, None)
            check_node_data.append(node)

        nal_api.get_nodes(IsA(http.HttpRequest),
                          func_type='all_node').AndReturn(node_data)

        api.keystone.tenant_list(IsA(http.HttpRequest),
                                 paginate=True).AndReturn([tenant_data, True])

        self.mox.ReplayAll()

        params = {
            'action': 'row_update',
            'table': 'node',
            'obj_id': obj_id,
        }
        res = self.client.get('?'.join([NODE_INDEX_URL, urlencode(params)]))
        self.assertContains(res,
                            fixture.NODE_DATA_VLB['vnf_info'][0]['node_name'])