def _get_api_client(self, username, password, project_name, role_name, create_project=True): project = self.keystone.tenants.get(name=project_name) if not project: project = self.keystone.tenants.create(project_name) user = self.keystone.users.get(username) or self.keystone.users.create( username, password, '', project.id) role = self.keystone.roles.get(role_name) if not role: role = self.keystone.roles.create(role_name) self.keystone.roles.add_user_role(user, role, project) if create_project: p = Project(project.name) p.uuid = project.id self.admin_api.project_create(p) return MyVncApi( username=username, password=password, project_name=project.name, project_id=project.id, user_role=role_name, api_server_host=self._api_server_ip, api_server_port=self._api_server_port)
def _project_read(self, *args, **kwargs): """ Return a mock project with the expected values """ project = Project() project.uuid = kwargs['id'] project.fq_name = ['default-domain', 'test'] self._project = project return project
def test_create_pool(self): tenant_id = _uuid() pool_id = _uuid() vip_id = _uuid() subnet_id = _uuid() api = self.api_server project = Project(name='test') project.uuid = tenant_id template = ServiceTemplate('lb-test', project) template.uuid = _uuid() pool_attrs = LoadbalancerPoolType() pool_attrs.subnet_id = subnet_id pool = LoadbalancerPool( pool_id, project, loadbalancer_pool_properties=pool_attrs) pool.uuid = pool_id vip_attrs = VirtualIpType() vip_attrs.subnet_id = subnet_id vip_attrs.address = '127.0.0.1' vip = VirtualIp(vip_id, project, virtual_ip_properties=vip_attrs) vip.uuid = vip_id vip.set_loadbalancer_pool(pool) vnet = VirtualNetwork('test', project) vnet.uuid = _uuid() vmi = VirtualMachineInterface(vip_id, project) vmi.uuid = _uuid() vmi.set_virtual_network(vnet) iip = InstanceIp(vip_id, instance_ip_address='127.0.0.1') iip.uuid = _uuid() iip.set_virtual_machine_interface(vmi) iip_refs = [ {'to': iip.get_fq_name(), 'uuid': iip.uuid} ] vmi.get_instance_ip_back_refs = mock.Mock() vmi.get_instance_ip_back_refs.return_value = iip_refs vip.set_virtual_machine_interface(vmi) api.virtual_service_template_read = template api.loadbalancer_pool_read.return_value = pool api.virtual_ip_read.return_value = vip api.kv_retrieve.return_value = '%s %s' % (vnet.uuid, subnet_id) api.virtual_machine_interface_read.return_value = vmi api.instance_ip_read.return_value = iip api.service_instance_read.side_effect = NoIdError('404') context = {} pool_data = { 'id': pool_id, 'vip_id': vip_id } self.driver.create_pool(context, pool_data) api.service_instance_create.assert_called_with(mock.ANY)
def test_parallel_project_cassandra_create_read(self): project = Project('project-%s' % self.id()) project.uuid = str(uuid.uuid4()) default_aps_name = 'default-%s' % ApplicationPolicySet.resource_type aps_fq_name = project.fq_name + [default_aps_name] original_fq_name_to_uuid = self._api_server._db_conn.fq_name_to_uuid inoked = [] def mock_fq_name_to_uuid(obj_type, fq_name): if not inoked and obj_type == 'application_policy_set'\ and fq_name == aps_fq_name: inoked.append(True) raise NoIdError('') return original_fq_name_to_uuid(obj_type, fq_name) self.api.project_create(project) with mock.patch.object(self._api_server._db_conn, 'fq_name_to_uuid', side_effect=mock_fq_name_to_uuid): self.api.project_read(id=project.uuid)
def setUp(self): super(TestVncCfgApiServerWithRbac, self).setUp() self.keystone = kclient(username='******', password='******', tenant_name='admin', auth_url='http://127.0.0.1:5000/v2.0') self.admin_api = self._get_api_client('admin-%s' % self.id(), 'password', 'admin-project-%s' % self.id(), 'cloud-admin', create_project=False) p = Project(self.admin_api.project_name) p.uuid = self.admin_api.project_id self.admin_api.project_create(p) global_aal = self.admin_api.api_access_list_read( ['default-global-system-config', 'default-api-access-list']) global_aal_entries = global_aal.get_api_access_list_entries() global_aal_entries.add_rbac_rule(build_rule('* member:CRUD')) global_aal.set_api_access_list_entries(global_aal_entries) self.admin_api.api_access_list_update(global_aal)
def test_parallel_project_zk_create_read(self): project = Project('project-%s' % self.id()) project.uuid = str(uuid.uuid4()) default_aps_name = 'default-%s' % ApplicationPolicySet.resource_type aps_fq_name = project.fq_name + [default_aps_name] original_fq_name_to_uuid = self._api_server._db_conn.fq_name_to_uuid invoked = [] def mock_fq_name_to_uuid(obj_type, fq_name): # fq_name_to_uuid will return NoIdError from locate # and post_common which results create_fq_name_to_uuid_mapping # to be called for default aps again. if len(invoked) < 2 and obj_type == 'application_policy_set' \ and fq_name == aps_fq_name: invoked.append(True) raise NoIdError('') return original_fq_name_to_uuid(obj_type, fq_name) self.api.project_create(project) with mock.patch.object(self._api_server._db_conn, 'fq_name_to_uuid', side_effect=mock_fq_name_to_uuid): self.api.project_read(id=project.uuid)