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')
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)
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'))
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)
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)
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, [])
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)
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)
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
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, [])
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)
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')
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)
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
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
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])
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
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
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)
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
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
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'])