def test_network_view_mapping_conditions_with_tenant_id_condition(self): user_id = 'test user' tenant_id = '80afaaba012acb9c12888128d5123a09' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr tat is not used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '10.0.0.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that no subnet cidr is used in mapping conditions db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual([], db_conditions) # make sure that tenant id is used in mapping condition once db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=tenant_id) self.assertEqual(1, len(db_conditions)) # test mapping where tenant id mapping is found ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet, self.grid_config, self.plugin) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # validate the mapping network view expected_netview_id = db_conditions[0].network_view_id db_netviews = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) netview_row = utils.find_one_in_list('id', expected_netview_id, db_netviews) expected_netview = netview_row.network_view db_mapping_members = dbi.get_mapping_members(self.ctx.session, expected_netview_id, grid_id=self.grid_id) expected_member_id = db_mapping_members[0].member_id self.assertEqual(expected_netview_id, ib_cxt.mapping.network_view_id) self.assertEqual(expected_netview, ib_cxt.mapping.network_view) self.assertEqual(expected_member_id, ib_cxt.mapping.authority_member.member_id)
def test_network_view_mapping_conditions_with_tenant_id_condition(self): user_id = 'test user' tenant_id = '80afaaba012acb9c12888128d5123a09' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr tat is not used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '10.0.0.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that no subnet cidr is used in mapping conditions db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual([], db_conditions) # make sure that tenant id is used in mapping condition once db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=tenant_id) self.assertEqual(1, len(db_conditions)) # test mapping where tenant id mapping is found ib_cxt = self._get_ib_context(user_id, network, subnet) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # validate the mapping network view expected_netview_id = db_conditions[0].network_view_id db_netviews = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) netview_row = utils.find_one_in_list('id', expected_netview_id, db_netviews) expected_netview = netview_row.network_view db_mapping_members = dbi.get_mapping_members(self.ctx.session, expected_netview_id, grid_id=self.grid_id) expected_member_id = db_mapping_members[0].member_id self.assertEqual(expected_netview_id, ib_cxt.mapping.network_view_id) self.assertEqual(expected_netview, ib_cxt.mapping.network_view) self.assertEqual(expected_member_id, ib_cxt.mapping.authority_member.member_id)
def _validate_mapping_conditions(self, network_view_json): db_network_views = dbi.get_network_views(self.ctx.session) db_mapping_conditions = dbi.get_mapping_conditions(self.ctx.session) expected_conditions = dict((nv['name'], nv['extattrs']) for nv in network_view_json if nv['extattrs']) expected_condition_rows = [] for netview in expected_conditions: netview_row = utils.find_one_in_list('network_view', netview, db_network_views) netview_id = netview_row.id for condition_name in expected_conditions[netview]: if 'Mapping' not in condition_name: continue values = expected_conditions[netview][condition_name]['value'] if not isinstance(values, list): expected_condition_rows.append(netview_id + DELIMITER + condition_name + DELIMITER + values) continue for value in values: expected_condition_rows.append(netview_id + DELIMITER + condition_name + DELIMITER + value) actual_condition_rows = utils.get_composite_values_from_records( ['network_view_id', 'neutron_object_name', 'neutron_object_value'], db_mapping_conditions) self.assertEqual(set(expected_condition_rows), set(actual_condition_rows))
def _load_persisted_mappings(self): session = self._context.session self.db_network_views = dbi.get_network_views(session, grid_id=self._grid_id) self.db_mapping_conditions = dbi.get_mapping_conditions( session, grid_id=self._grid_id) self.db_authority_members = dbi.get_mapping_members( session, grid_id=self._grid_id) self.db_service_members = dbi.get_service_members( session, grid_id=self._grid_id)
def _resync(self, force_sync=False): self.grid_mgr.sync(force_sync) self._cached_grid_members = dbi.get_members( self.context.session, grid_id=self.grid_id, member_status=const.MEMBER_STATUS_ON) self._cached_network_views = dbi.get_network_views( self.context.session, grid_id=self.grid_id) self._cached_mapping_conditions = dbi.get_mapping_conditions( self.context.session, grid_id=self.grid_id)
def _load_persisted_mappings(self): session = self._context.session self.db_network_views = dbi.get_network_views( session, grid_id=self._grid_id) self.db_mapping_conditions = dbi.get_mapping_conditions( session, grid_id=self._grid_id) self.db_authority_members = dbi.get_mapping_members( session, grid_id=self._grid_id) self.db_service_members = dbi.get_service_members( session, grid_id=self._grid_id)
def test_network_view_mapping_conditions_with_single_scope(self): user_id = 'test user' tenant_id = 'test-tenant' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr tat is not used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '10.0.0.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that no subnet cidr is used in mapping conditions db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual([], db_conditions) # check default network view when no mapping condition matches self.assertEqual('Single', self.grid_config.default_network_view_scope) self.assertEqual('default', self.grid_config.default_network_view) # test default mapping as 'Single' ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet, self.grid_config, self.plugin) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # verify that 'default' view is used db_netviews = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) netview_row = utils.find_one_in_list('network_view', 'default', db_netviews) expected_netview_id = netview_row.id db_grid_members = dbi.get_members(self.ctx.session, grid_id=self.grid_id) member_row = utils.find_one_in_list('member_type', 'GM', db_grid_members) expected_member_name = member_row.member_name self.assertEqual(expected_netview_id, ib_cxt.mapping.network_view_id) self.assertEqual('default', ib_cxt.mapping.network_view) self.assertEqual(expected_member_name, ib_cxt.mapping.authority_member.member_name)
def test_network_view_mapping_conditions_with_single_scope(self): user_id = 'test user' tenant_id = 'test-tenant' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr tat is not used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '10.0.0.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that no subnet cidr is used in mapping conditions db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual([], db_conditions) # check default network view when no mapping condition matches self.assertEqual('Single', self.grid_config.default_network_view_scope) self.assertEqual('default', self.grid_config.default_network_view) # test default mapping as 'Single' ib_cxt = self._get_ib_context(user_id, network, subnet) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # verify that 'default' view is used db_netviews = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) netview_row = utils.find_one_in_list('network_view', 'default', db_netviews) expected_netview_id = netview_row.id db_grid_members = dbi.get_members(self.ctx.session, grid_id=self.grid_id) member_row = utils.find_one_in_list('member_type', 'GM', db_grid_members) expected_member_name = member_row.member_name self.assertEqual(expected_netview_id, ib_cxt.mapping.network_view_id) self.assertEqual('default', ib_cxt.mapping.network_view) self.assertEqual(expected_member_name, ib_cxt.mapping.authority_member.member_name)
def test_network_view_mapping_conditions_with_subnet_cidr_condition(self): user_id = 'test user' tenant_id = '90fbad5a098a4b7cb98826128d5b40b3' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '12.12.2.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that mapping condition exists and prepare expectations db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual(1, len(db_conditions)) expected_network_view_id = db_conditions[0].network_view_id db_network_views = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) expected_netview_row = utils.find_one_in_list( 'id', expected_network_view_id, db_network_views) expected_authority_member_id = expected_netview_row.authority_member_id expected_network_view = expected_netview_row.network_view # prepare network view mapping to neutron network and subnet dbi.associate_network_view( self.ctx.session, expected_network_view_id, network['id'], subnet['id']) # test mapping where both tenant id and tenant cidr match ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet, self.grid_config, self.plugin) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # validate mapping self.assertEqual(expected_network_view_id, ib_cxt.mapping.network_view_id) self.assertEqual(expected_network_view, ib_cxt.mapping.network_view) self.assertEqual(expected_authority_member_id, ib_cxt.mapping.authority_member.member_id)
def test_network_view_mapping_conditions_with_subnet_cidr_condition(self): user_id = 'test user' tenant_id = '90fbad5a098a4b7cb98826128d5b40b3' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '12.12.2.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that mapping condition exists and prepare expectations db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual(1, len(db_conditions)) expected_network_view_id = db_conditions[0].network_view_id db_network_views = dbi.get_network_views(self.ctx.session, grid_id=self.grid_id) expected_netview_row = utils.find_one_in_list( 'id', expected_network_view_id, db_network_views) expected_authority_member_id = expected_netview_row.authority_member_id expected_network_view = expected_netview_row.network_view # prepare network view mapping to neutron network and subnet dbi.associate_network_view( self.ctx.session, expected_network_view_id, network['id'], subnet['id']) # test mapping where both tenant id and tenant cidr match ib_cxt = self._get_ib_context(user_id, network, subnet) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # validate mapping self.assertEqual(expected_network_view_id, ib_cxt.mapping.network_view_id) self.assertEqual(expected_network_view, ib_cxt.mapping.network_view) self.assertEqual(expected_authority_member_id, ib_cxt.mapping.authority_member.member_id)
def test_network_view_mapping_conditions_with_tenant_scope(self): user_id = 'test user' tenant_id = 'test-tenant-id' # prepare network network_name = 'Test Network' network = self.plugin_stub.create_network(tenant_id, network_name) # prepare subnet with cidr tat is not used in mapping conditions subnet_name = 'Test Subnet' subnet_cidr = '10.0.0.0/24' subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name, network['id'], subnet_cidr) # make sure that no subnet cidr is used in mapping conditions db_conditions = dbi.get_mapping_conditions( self.ctx.session, grid_id=self.grid_id, neutron_object_value=subnet_cidr) self.assertEqual([], db_conditions) # set default network view scope to 'Tenant' self.grid_config.default_network_view_scope = ( const.NETWORK_VIEW_SCOPE_TENANT) # test default mapping as 'Tenant' ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet, self.grid_config, self.plugin) ib_cxt.connector = mock.Mock() ib_cxt.ibom = mock.Mock() ib_cxt.ip_allocator = mock.Mock() # validate the mapping network view expected_netview = utils.generate_network_view_name(tenant_id) self.assertIsNone(ib_cxt.mapping.network_view_id) self.assertEqual(expected_netview, ib_cxt.mapping.network_view) self.assertEqual(None, ib_cxt.mapping.authority_member)
def test_mapping_management_mapping_conditions(self): # prepare grid self._create_default_grid() # prepare members self._create_simple_members() db_members = infoblox_db.get_members(self.ctx.session) gm_member = utils.find_one_in_list('member_type', 'GM', db_members) # prepare network views netview_dict = {'default': gm_member.member_id} self._create_network_views(netview_dict) db_network_views = infoblox_db.get_network_views(self.ctx.session) netview_default_row = utils.find_one_in_list('network_view', 'default', db_network_views) netview_id = netview_default_row.id # should be no conditions db_conditions = infoblox_db.get_mapping_conditions(self.ctx.session) self.assertEqual(0, len(db_conditions)) expected_rows = [] # test mapping condition additions neutron_object_name = const.EA_MAPPING_TENANT_ID neutron_object_value = '90fbad5a098a4b7cb98826128d5b40b3' expected_rows.append(netview_id + ':' + neutron_object_name + ':' + neutron_object_value) infoblox_db.add_mapping_condition(self.ctx.session, netview_id, neutron_object_name, neutron_object_value) neutron_object_name = const.EA_MAPPING_SUBNET_CIDR neutron_object_values = ["12.12.1.0/24", "13.13.1.0/24"] for value in neutron_object_values: expected_rows.append(netview_id + ':' + neutron_object_name + ':' + value) infoblox_db.add_mapping_conditions(self.ctx.session, netview_id, neutron_object_name, neutron_object_values) db_conditions = infoblox_db.get_mapping_conditions(self.ctx.session) actual_rows = utils.get_composite_values_from_records( ['network_view_id', 'neutron_object_name', 'neutron_object_value'], db_conditions, ':') self.assertEqual(expected_rows, actual_rows) # test mapping condition removals # - remove Tenant ID Mapping condition condition_1 = expected_rows[0].split(':') condition_neutron_object_name = condition_1[1] condition_neutron_object_value = condition_1[2] infoblox_db.remove_mapping_condition(self.ctx.session, netview_id, condition_neutron_object_name, condition_neutron_object_value) db_conditions = infoblox_db.get_mapping_conditions( self.ctx.session, network_view_id=netview_id, grid_id=self.grid_id, neutron_object_name=condition_neutron_object_name) self.assertEqual([], db_conditions) # - remove two Tenant CIDR Mapping conditions condition_2 = expected_rows[1].split(':') condition_3 = expected_rows[2].split(':') condition_neutron_object_name = condition_2[1] condition_neutron_object_values = [condition_2[2], condition_3[2]] infoblox_db.remove_mapping_conditions(self.ctx.session, netview_id, condition_neutron_object_name, condition_neutron_object_values) db_conditions = infoblox_db.get_mapping_conditions( self.ctx.session, network_view_id=netview_id, grid_id=self.grid_id, neutron_object_name=condition_neutron_object_name) self.assertEqual([], db_conditions) db_conditions = infoblox_db.get_mapping_conditions(self.ctx.session) self.assertEqual([], db_conditions)
def discovered_mapping_conditions(self): if self._discovered_mapping_conditions is None: self._discovered_mapping_conditions = dbi.get_mapping_conditions( self.context.session, grid_id=self.grid_id) return self._discovered_mapping_conditions