def test_index_multi_data(self): tenant_data = [] tenant_names = {} for data in TENANT_LIST_RETURN: tenant_data.append(Tenant(data)) tenant_names[data['id']] = data['name'] service_data = [] check_service_data = [] for data in fixture.SERVICE_DATA_LIST: service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect']) service_data.append(service) service.tenant_name = tenant_names.get(service.tenant_id, None) check_service_data.append(service) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndReturn([tenant_data, True]) self.mox.ReplayAll() res = self.client.get(SERVICE_INDEX_URL) self.assertNoFormErrors(res) self.assertTemplateUsed(res, 'admin/service/index.html') self.assertItemsEqual(res.context['table'].data, check_service_data)
def test_detail_api_error_handle(self): dc_group_info = fixture.SERVICE_DATA_DEFAULT['dc_group_info'] obj_id = '|'.join(['dcconnect', str(dc_group_info[0]['group_id'])]) nal_api.get_services(IsA(http.HttpRequest), group_id=obj_id.split('|')[1], func_type=obj_id.split('|')[0]).AndRaise( exceptions.NotAvailable()) tenant_data = [] tenant_names = {} for data in TENANT_LIST_RETURN: tenant_data.append(Tenant(data)) tenant_names[data['id']] = data['name'] service_data = [] check_service_data = [] for data in fixture.SERVICE_DATA_LIST: service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect']) service_data.append(service) service.tenant_name = tenant_names.get(service.tenant_id, None) check_service_data.append(service) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndReturn([tenant_data, True]) self.mox.ReplayAll() res = self.client.get( reverse(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id})) self.assertRedirects(res, SERVICE_INDEX_URL)
def test_index_api_error_handle(self): tenant_data = [] for data in TENANT_LIST_RETURN: tenant_data.append(Tenant(data)) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndRaise( exceptions.NotAvailable()) self.mox.ReplayAll() res = self.client.get(SERVICE_INDEX_URL) self.assertItemsEqual(res.context['table'].data, [])
def get_data(self, request, obj_id): func_type = obj_id.split('|')[0] group_id = obj_id.split('|')[1] detail_service = nal_api.get_services(request, group_id=group_id, func_type=func_type) service_columns = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type] detail_data = detail_service[service_columns['detail_name']][0] network_list = detail_service[service_columns['network_name']] 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 for network in network_list: if getattr(network, 'dc_id') == detail_data.my_dc_id: setattr(detail_data, 'my_group_flg', '1') break return detail_data
def delete(self, request, obj_id): func_type = obj_id.split('|')[0] service_id = obj_id.split('|')[1] service = nal_api.get_services(request, group_id=service_id, func_type=func_type) detail_list = \ service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']] detail_data = detail_list[0] params = { 'function_type': func_type, 'group_id': service_id, 'service_type': detail_data.service_type } service_name = SERVICE_TYPE_MAPPING.get(detail_data.service_type, '') service_detail = SERVICE_TYPE_DETAIL_MAPPING.get(service_name, {}) for key, value in service_detail.iteritems(): params[key] = value if str(detail_data.task_status) == '9': params['job_cleaning_mode'] = 1 try: LOG.info('Deleting service "%s".' % service_id) nal_api.delete_service(request, params) except Exception: redirect = reverse(constants.SERVICE_INDEX_URL) msg = 'Unable to delete service.' exceptions.handle(request, msg, redirect=redirect)
def get_data(self): services = [] try: services = nal_api.get_services(self.request, func_type='all_dcconnect') except Exception: exceptions.handle(self.request, _('Unable to retrieve service list.')) tenants = [] try: tenants, _more = api.keystone.tenant_list(self.request, paginate=True) except Exception: exceptions.handle(self.request, _("Unable to retrieve all tenant information.")) tenant_names = {} for tenant in tenants: tenant_names[tenant.id] = tenant.name service_list = [] for service in services: service.tenant_name = tenant_names.get(service.tenant_id, '') service_list.append(service) return service_list
def allowed(self, request, service): func_type = self.table.kwargs['group_id'].split('|')[0] group_id = self.table.kwargs['group_id'].split('|')[1] service = nal_api.get_services(self.table.request, group_id=group_id, func_type=func_type) detail_list = \ service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name']] detail_data = detail_list[0] network_data = \ service[SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name']] if getattr(detail_data, 'my_dc_id') in [ getattr(network, 'dc_id') for network in network_data ]: allow_member = SERVICE_DISPLAY_BUTTONS_LIST['is_member'] else: allow_member = SERVICE_DISPLAY_BUTTONS_LIST['is_not_member'] allow_status = \ SERVICE_DISPLAY_BUTTONS_FOR_STATUS[str(detail_data.task_status)] service_name = SERVICE_TYPE_MAPPING[str(detail_data.service_type)] allow_device = SERVICE_DISPLAY_BUTTONS_FOR_DEVICE[service_name] allow_set = set(allow_member) & set(allow_status) & set(allow_device) if self.__class__.__name__ in list(allow_set): return True return False
def test_index_no_data(self): tenant_data = [] for data in TENANT_LIST_RETURN: tenant_data.append(Tenant(data)) service_data = [] nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndReturn([tenant_data, True]) self.mox.ReplayAll() res = self.client.get(SERVICE_INDEX_URL) self.assertNoFormErrors(res) self.assertTemplateUsed(res, 'admin/service/index.html') self.assertItemsEqual(res.context['table'].data, [])
def test_index_tenant_error(self): service_data = [] for data in fixture.SERVICE_DATA_LIST: service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect']) service_data.append(service) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndRaise(OSError) self.mox.ReplayAll() res = self.client.get(SERVICE_INDEX_URL) self.assertTemplateUsed(res, 'admin/service/index.html') self.assertItemsEqual(res.context['table'].data, service_data) self.assertMessageCount(res, error=1)
def test_detail_tenant_error(self): service_data = {} obj_id = '|'.join([ 'dcconnect', str(fixture.SERVICE_DATA_DEFAULT['dc_group_info'][0]['group_id']) ]) for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems(): if isinstance(value, dict): service_data[key] = [] for service_row in fixture.SERVICE_DATA_DEFAULT[key]: service_data[key].append(Service(service_row, value)) nal_api.get_services( IsA(http.HttpRequest), group_id=obj_id.split('|')[1], func_type=obj_id.split('|')[0]).AndReturn(service_data) api.keystone.tenant_get(IsA(http.HttpRequest), IsA('str')).AndRaise(OSError) tenant_data = [] tenant_names = {} for data in TENANT_LIST_RETURN: tenant_data.append(Tenant(data)) tenant_names[data['id']] = data['name'] service_data = [] check_service_data = [] for data in fixture.SERVICE_DATA_LIST: service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect']) service_data.append(service) service.tenant_name = tenant_names.get(service.tenant_id, None) check_service_data.append(service) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndReturn([tenant_data, True]) self.mox.ReplayAll() res = self.client.get( reverse(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id})) self.assertRedirects(res, SERVICE_INDEX_URL)
def handle(self, request, data): try: service_type = data['service_type'] service_type_name = SERVICE_TYPE_MAPPING[service_type] tenant_id = request.user.project_id services = nal_api.get_services(request, tenant_id, func_type='all_dcconnect') for service in services: if SERVICE_FUNCTION_TYPE_MAPPING[service.service_type] \ == 'dcconnect': messages.error( request, 'DC connection service is already created.') raise exceptions.NotAvailable func_type = SERVICE_FUNCTION_TYPE_MAPPING[service_type] params = { 'service_name': data['service_name'], 'service_type': service_type, 'function_type': func_type } for column in SERVICE_CREATE_COLUMNS['separate']: if service_type_name in DISPLAY_CREATE_COLUMNS_MAP[column[0]]: if isinstance(data[column[0]], bool): data[column[0]] = int(data[column[0]]) params[column[0]] = data[column[0]] service_detail = \ SERVICE_TYPE_DETAIL_MAPPING.get(service_type_name, {}) for key, value in service_detail.iteritems(): params[key] = value if 'IaaS_subnet_id' in params: subnet_id = data['IaaS_subnet_id'] subnet_detail = _get_subnet_detail(request, subnet_id) network = _get_network_detail(request, subnet_detail.network_id) params['IaaS_network_type'] = network['IaaS_network_type'] params['IaaS_network_id'] = network['IaaS_network_id'] params['IaaS_segmentation_id'] = \ network['IaaS_segmentation_id'] params['network_name'] = network['network_name'] service = nal_api.create_service(request, params) msg = _('Job of service creation is running.') LOG.debug(msg) messages.success(request, msg) return True except exceptions.NotAvailable: return False except Exception: redirect = reverse(constants.SERVICE_INDEX_URL) exceptions.handle(request, redirect=redirect)
def get_data(self): services = [] try: tenant_id = self.request.user.project_id services = nal_api.get_services(self.request, tenant_id, func_type='all_dcconnect') except Exception: exceptions.handle(self.request, _('Unable to retrieve service list.')) return services
def test_detail_in_dc_member(self): service_data = {} obj_id = '|'.join([ 'dcconnect', str(fixture.SERVICE_DATA_DEFAULT['dc_group_info'][0]['group_id']) ]) for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems(): if isinstance(value, dict): service_data[key] = [] for service_row in fixture.SERVICE_DATA_DEFAULT[key]: service_data[key].append(Service(service_row, value)) nal_api.get_services( IsA(http.HttpRequest), group_id=obj_id.split('|')[1], func_type=obj_id.split('|')[0]).AndReturn(service_data) 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(SERVICE_DETAIL_URL, kwargs={"group_id": obj_id})) self.assertNoFormErrors(res) self.assertTemplateUsed(res, 'admin/service/detail.html') for i, detail in enumerate( SERVICE_DETAIL_DISPLAY_COLUMNS['dcconnect']['detail']): if i == 0: self.assertItemsEqual(res.context['service'][0], ['Tenant Name', 'network_nameA']) else: pass self.assertItemsEqual(res.context['service'][i + 1][0], detail[0])
def _get_data(self): try: func_type = self.kwargs['group_id'].split('|')[0] group_id = self.kwargs['group_id'].split('|')[1] service = nal_api.get_services(self.request, group_id=group_id, func_type=func_type) except Exception: msg = _('Unable to retrieve details for service "%s".') \ % (group_id) exceptions.handle(self.request, msg, redirect=self.get_redirect_url()) return service
def get_data(self, request, obj_id): func_type = obj_id.split('|')[0] group_id = obj_id.split('|')[1] detail_service = nal_api.get_services(request, group_id=group_id, func_type=func_type) network_name = \ SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['network_name'] detail_name = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type]['detail_name'] detail_data = detail_service[detail_name][0] setattr(detail_data, 'my_group_flg', '0') for network in detail_service[network_name]: if getattr(network, 'dc_id') == detail_data.my_dc_id: setattr(detail_data, 'my_group_flg', '1') break return detail_data
def __init__(self, request, *args, **kwargs): super(UpdateServiceForm, self).__init__(request, *args, **kwargs) func_type = kwargs['initial']['obj_id'].split('|')[0] group_id = kwargs['initial']['obj_id'].split('|')[1] subnet_id = '' if len(kwargs['initial']['obj_id'].split('|')) == 3: subnet_id = kwargs['initial']['obj_id'].split('|')[2] update_type = kwargs['initial']['update_type'] service = nal_api.get_services(self.request, group_id=group_id, func_type=func_type) self.fields['group_id'].initial = group_id self.fields['func_type'].initial = func_type self.fields['update_type'].initial = update_type if SERVICE_UPDATE_COLUMNS[update_type]['display_type'] == \ 'input_column': service_columns = SERVICE_DETAIL_DISPLAY_COLUMNS[func_type] detail_data = service[service_columns['detail_name']][0] network_list = service[service_columns['network_name']] for column in SERVICE_UPDATE_COLUMNS[update_type]['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]): if 'service_type' == column[0]: self.fields['service_type'].initial = \ SERVICE_TYPE_MAPPING.get( str(getattr(detail_data, column[0])), getattr(detail_data, column[0])) else: self.fields[column[0]].initial = getattr( detail_data, column[0]) for column in SERVICE_UPDATE_COLUMNS[update_type]['separate']: if SERVICE_TYPE_MAPPING[str(detail_data.service_type)] in \ DISPLAY_UPDATE_COLUMNS_MAP[column[0]]: if column[1]['field'] == 'ChoiceField': self.fields[column[0]] = getattr( forms, column[1]['field'])( label=column[1]['label'], choices=column[1]['choices'], help_text=column[1].get('help_text'), required=column[1]['required']) elif column[1]['field'] == 'BooleanField': self.fields[column[0]] = getattr( forms, column[1]['field'])(label=column[1]['label'], required=column[1]['required']) else: self.fields[column[0]] = getattr( forms, column[1]['field'])( label=column[1]['label'], help_text=column[1].get('help_text'), required=column[1]['required']) self._logic_by_update_type(request, update_type, detail_data, network_list, subnet_id)
def test_row_update(self): dc_group_info = fixture.SERVICE_DATA_NO_MEMBER_LIST['dc_group_info'] service_data = {} obj_id = '|'.join(['dcconnect', str(dc_group_info[0]['group_id'])]) for key, value in SERVICE_RETURN_MAPPING['dcconnect'].iteritems(): if isinstance(value, dict): service_data[key] = [] for service_row in fixture.SERVICE_DATA_NO_MEMBER_LIST[key]: service_data[key].append(Service(service_row, value)) nal_api.get_services( IsA(http.HttpRequest), group_id=obj_id.split('|')[1], func_type=obj_id.split('|')[0]).AndReturn(service_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'] service_data = [] check_service_data = [] for data in fixture.SERVICE_DATA_LIST: service = Service(data, SERVICE_RETURN_MAPPING['all_dcconnect']) service_data.append(service) service.tenant_name = tenant_names.get(service.tenant_id, None) check_service_data.append(service) nal_api.get_services(IsA(http.HttpRequest), func_type='all_dcconnect').AndReturn(service_data) api.keystone.tenant_list(IsA(http.HttpRequest), paginate=True).AndReturn([tenant_data, True]) self.mox.ReplayAll() params = { 'action': 'row_update', 'table': 'service', 'obj_id': obj_id, } res = self.client.get('?'.join([SERVICE_INDEX_URL, urlencode(params)])) self.assertContains(res, dc_group_info[0]['group_name'])