Beispiel #1
0
    def _register_services(self):
        session = self.context.session

        service = const.SERVICE_TYPE_DHCP
        for member in self.mapping.dhcp_members:
            service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                member_id=member.member_id,
                grid_id=self.grid_id,
                service=service)
            if not service_members:
                dbi.add_service_member(session, self.mapping.network_view_id,
                                       member.member_id, service)

        service = const.SERVICE_TYPE_DNS
        for member in self.mapping.dns_members:
            service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                member_id=member.member_id,
                grid_id=self.grid_id,
                service=service)
            if not service_members:
                dbi.add_service_member(session, self.mapping.network_view_id,
                                       member.member_id, service)
    def _register_services(self):
        session = self.context.session

        service = const.SERVICE_TYPE_DHCP
        for member in self.mapping.dhcp_members:
            service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                member_id=member.member_id,
                grid_id=self.grid_id,
                service=service)
            if not service_members:
                dbi.add_service_member(session, self.mapping.network_view_id,
                                       member.member_id, service)

        service = const.SERVICE_TYPE_DNS
        for member in self.mapping.dns_members:
            service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                member_id=member.member_id,
                grid_id=self.grid_id,
                service=service)
            if not service_members:
                dbi.add_service_member(session, self.mapping.network_view_id,
                                       member.member_id, service)
Beispiel #3
0
    def _reserve_dhcp_member(self):
        # for CPM, the authority member itself serves DHCP
        if (self.mapping.authority_member.member_type ==
                const.MEMBER_TYPE_CP_MEMBER):
            return self.mapping.authority_member

        # for GM,
        # check if a network view is already serving dhcp.
        #   if true, then use the same dhcp member.
        #   if false, see if gm itself is serving dhcp for other network view.
        #     if true, then try to get the next available dhcp member.
        #     if false, use gm for dhcp
        session = self.context.session
        dhcp_member = None

        dhcp_service_members = dbi.get_service_members(
            session,
            network_view_id=self.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        if dhcp_service_members:
            dhcp_member = utils.find_one_in_list(
                'member_id',
                dhcp_service_members[0].member_id,
                self.discovered_grid_members)
        else:
            if self.grid_config.use_grid_master_for_dhcp:
                dhcp_service_members = dbi.get_service_members(
                    session,
                    member_id=self.mapping.authority_member.member_id,
                    service=const.SERVICE_TYPE_DHCP)
                if dhcp_service_members:
                    # authority is GM, a dhcp member needs to be selected.
                    dhcp_member = dbi.get_next_dhcp_member(session,
                                                           self.grid_id, True)
                    if not dhcp_member:
                        raise exc.InfobloxDHCPMemberNotReserved(
                            network_view=self.mapping.network_view,
                            cidr=self.subnet.get('cidr'))
                else:
                    dhcp_member = self.mapping.authority_member
            else:
                dhcp_member = dbi.get_next_dhcp_member(session,
                                                       self.grid_id, False)
                if not dhcp_member:
                    raise exc.InfobloxDHCPMemberNotReserved(
                        network_view=self.mapping.network_view,
                        cidr=self.subnet.get('cidr'))

        return dhcp_member
    def _reserve_dhcp_member(self):
        # for CPM, the authority member itself serves DHCP
        if (self.mapping.authority_member.member_type ==
                const.MEMBER_TYPE_CP_MEMBER):
            return self.mapping.authority_member

        # for GM,
        # check if a network view is already serving dhcp.
        #   if true, then use the same dhcp member.
        #   if false, see if gm itself is serving dhcp for other network view.
        #     if true, then try to get the next available dhcp member.
        #     if false, use gm for dhcp
        session = self.context.session
        dhcp_member = None

        dhcp_service_members = dbi.get_service_members(
            session,
            network_view_id=self.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        if dhcp_service_members:
            dhcp_member = utils.find_one_in_list(
                'member_id',
                dhcp_service_members[0].member_id,
                self.discovered_grid_members)
        else:
            if self.grid_config.use_grid_master_for_dhcp:
                dhcp_service_members = dbi.get_service_members(
                    session,
                    member_id=self.mapping.authority_member.member_id,
                    service=const.SERVICE_TYPE_DHCP)
                if dhcp_service_members:
                    # authority is GM, a dhcp member needs to be selected.
                    dhcp_member = dbi.get_next_dhcp_member(session,
                                                           self.grid_id, True)
                    if not dhcp_member:
                        raise exc.InfobloxDHCPMemberNotReserved(
                            network_view=self.mapping.network_view,
                            cidr=self.subnet.get('cidr'))
                else:
                    dhcp_member = self.mapping.authority_member
            else:
                dhcp_member = dbi.get_next_dhcp_member(session,
                                                       self.grid_id, False)
                if not dhcp_member:
                    raise exc.InfobloxDHCPMemberNotReserved(
                        network_view=self.mapping.network_view,
                        cidr=self.subnet.get('cidr'))

        return dhcp_member
Beispiel #5
0
 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 _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)
Beispiel #7
0
    def _test_reserve_service_members_with_ib_network_gm_owned(
            self, dns_support):
        user_id = 'test user'
        tenant_id = 'tenant-id'

        # prepare network
        network_name = 'Test Network'
        network = self.plugin_stub.create_network(tenant_id, network_name)

        # prepare subnet
        subnet_name = 'Test Subnet'
        subnet_cidr = '11.11.1.0/24'
        subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name,
                                                network['id'], subnet_cidr)

        self.grid_config.dhcp_support = True
        self.grid_config.dns_support = dns_support

        ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet,
                                            self.grid_config, self.plugin)
        ib_cxt._register_services = mock.Mock()
        dhcp_members = dbi.get_service_members(
            self.ctx.session,
            network_view_id=ib_cxt.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        expected_dhcp_member = dhcp_members[0]

        # ib network with no members and options
        connector = mock.Mock()
        test_ib_network = ib_objects.NetworkV4(connector,
                                               network_view='default',
                                               cidr='12.12.1.0/24')
        test_ib_network.members = []
        test_ib_network.options = []

        ib_cxt.reserve_service_members(test_ib_network)

        expected_dns_members = (ib_cxt.mapping.dhcp_members
                                if dns_support else [])
        self.assertEqual(expected_dhcp_member.member_id,
                         ib_cxt.mapping.dhcp_members[0].member_id)
        self.assertEqual(expected_dns_members, ib_cxt.mapping.dns_members)
        actual_opt_router = [
            opt for opt in test_ib_network.options if opt.name == 'routers'
        ]
        self.assertEqual(subnet['gateway_ip'], actual_opt_router[0].value)
    def _test_reserve_service_members_with_ib_network_gm_owned(
            self, dns_support):
        user_id = 'test user'
        tenant_id = 'tenant-id'

        # prepare network
        network_name = 'Test Network'
        network = self.plugin_stub.create_network(tenant_id, network_name)

        # prepare subnet
        subnet_name = 'Test Subnet'
        subnet_cidr = '11.11.1.0/24'
        subnet = self.plugin_stub.create_subnet(tenant_id, subnet_name,
                                                network['id'], subnet_cidr)

        self.grid_config.dhcp_support = True
        self.grid_config.dns_support = dns_support

        ib_cxt = ib_context.InfobloxContext(self.ctx, user_id, network, subnet,
                                            self.grid_config, self.plugin)
        ib_cxt._register_services = mock.Mock()
        dhcp_members = dbi.get_service_members(
            self.ctx.session,
            network_view_id=ib_cxt.mapping.network_view_id,
            service=const.SERVICE_TYPE_DHCP)
        expected_dhcp_member = dhcp_members[0]

        # ib network with no members and options
        connector = mock.Mock()
        test_ib_network = ib_objects.NetworkV4(connector,
                                               network_view='default',
                                               cidr='12.12.1.0/24')
        test_ib_network.members = []
        test_ib_network.options = []

        ib_cxt.reserve_service_members(test_ib_network)

        expected_dns_members = (
            ib_cxt.mapping.dhcp_members if dns_support else [])
        self.assertEqual(expected_dhcp_member.member_id,
                         ib_cxt.mapping.dhcp_members[0].member_id)
        self.assertEqual(expected_dns_members, ib_cxt.mapping.dns_members)
        actual_opt_router = [opt for opt in test_ib_network.options
                             if opt.name == 'routers']
        self.assertEqual(subnet['gateway_ip'], actual_opt_router[0].value)
Beispiel #9
0
    def _update_service_member_mapping(self):
        if not self.ib_network:
            return

        if not self.grid_config.dhcp_support:
            return

        session = self.context.session

        # dhcp members
        dhcp_members = self._get_dhcp_members(self.ib_network)
        if not dhcp_members:
            return

        ib_dhcp_members = []
        for m in dhcp_members:
            dhcp_ip = m.member_dhcp_ip or m.member_ip
            ib_dhcp_members.append(
                ib_objects.AnyMember(_struct='dhcpmember',
                                     name=m.member_name,
                                     ipv4addr=dhcp_ip))

        # get dns members from ib network if member exists. if not, get them
        # from service members
        dns_members = self._get_dns_members(self.ib_network)
        if not dns_members:
            dns_members = []
            dns_service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                service=const.SERVICE_TYPE_DNS)
            for sm in dns_service_members:
                member = utils.find_one_in_list('member_id', sm.member_id,
                                                self.discovered_grid_members)
                if member:
                    dns_members.append(member)

        nameservers = self._get_nameservers(dns_members)

        self.mapping.dhcp_members = dhcp_members
        self.mapping.dns_members = dns_members
        self.mapping.ib_dhcp_members = ib_dhcp_members
        self.mapping.ib_nameservers = nameservers
    def _update_service_member_mapping(self):
        if not self.ib_network:
            return

        if not self.grid_config.dhcp_support:
            return

        session = self.context.session

        # dhcp members
        dhcp_members = self._get_dhcp_members(self.ib_network)
        if not dhcp_members:
            return

        ib_dhcp_members = []
        for m in dhcp_members:
            dhcp_ip = m.member_dhcp_ip or m.member_ip
            ib_dhcp_members.append(ib_objects.AnyMember(_struct='dhcpmember',
                                                        name=m.member_name,
                                                        ipv4addr=dhcp_ip))

        # get dns members from ib network if member exists. if not, get them
        # from service members
        dns_members = self._get_dns_members(self.ib_network)
        if not dns_members:
            dns_members = []
            dns_service_members = dbi.get_service_members(
                session,
                network_view_id=self.mapping.network_view_id,
                service=const.SERVICE_TYPE_DNS)
            for sm in dns_service_members:
                member = utils.find_one_in_list('member_id',
                                                sm.member_id,
                                                self.discovered_grid_members)
                if member:
                    dns_members.append(member)

        nameservers = self._get_nameservers(dns_members)

        self.mapping.dhcp_members = dhcp_members
        self.mapping.dns_members = dns_members
        self.mapping.ib_dhcp_members = ib_dhcp_members
        self.mapping.ib_nameservers = nameservers
Beispiel #11
0
    def _validate_member_mapping(self, network_view_json, network_json):
        db_members = dbi.get_members(self.ctx.session,
                                     grid_id=self.test_grid_config.grid_id)
        db_network_views = dbi.get_network_views(self.ctx.session)
        db_mapping_members = dbi.get_mapping_members(self.ctx.session)
        db_service_members = dbi.get_service_members(self.ctx.session)

        gm_row = utils.find_one_in_list('member_type',
                                        const.MEMBER_TYPE_GRID_MASTER,
                                        db_members)
        gm_member_id = gm_row.member_id

        dedicated_delegation_members = dict()
        for netview in network_view_json:
            netview_name = netview['name']
            if (netview.get('cloud_info')
                    and netview.get('cloud_info').get('delegated_member')):
                delegated_member = utils.find_one_in_list(
                    'member_name',
                    netview['cloud_info']['delegated_member']['name'],
                    db_members)
                dedicated_delegation_members[netview_name] = (
                    delegated_member.member_id)

        expected_mapping_members = []
        expected_service_members = []

        # get delegated authority members from network views
        for netview in dedicated_delegation_members:
            netview_row = utils.find_one_in_list('network_view', netview,
                                                 db_network_views)
            netview_id = netview_row.id
            authority_member = dedicated_delegation_members[netview]
            mapping_relation = const.MAPPING_RELATION_DELEGATED
            mapping_row_info = (netview_id + DELIMITER + authority_member +
                                DELIMITER + mapping_relation)
            expected_mapping_members.append(mapping_row_info)

        # get authority members from networks
        for network in network_json:
            netview = network['network_view']
            netview_row = utils.find_one_in_list('network_view', netview,
                                                 db_network_views)
            netview_id = netview_row.id

            mapping_relation = const.MAPPING_RELATION_GM_OWNED
            authority_member = gm_member_id
            if netview in dedicated_delegation_members:
                authority_member = dedicated_delegation_members[netview]
                mapping_relation = const.MAPPING_RELATION_DELEGATED
            elif (network.get('cloud_info')
                  and network['cloud_info'].get('delegated_member')):
                delegated_member = utils.find_one_in_list(
                    'member_name',
                    network['cloud_info']['delegated_member']['name'],
                    db_members)
                authority_member = delegated_member.member_id
                mapping_relation = const.MAPPING_RELATION_DELEGATED

            mapping_row_info = (netview_id + DELIMITER + authority_member +
                                DELIMITER + mapping_relation)
            if mapping_row_info not in expected_mapping_members:
                expected_mapping_members.append(mapping_row_info)

            if network.get('members'):
                for m in network['members']:
                    if m['_struct'] == 'dhcpmember':
                        dhcp_member = utils.find_one_in_list(
                            'member_name', m['name'], db_members)
                        mapping_row_info = (netview_id + DELIMITER +
                                            dhcp_member.member_id + DELIMITER +
                                            const.SERVICE_TYPE_DHCP)
                        if mapping_row_info not in expected_service_members:
                            expected_service_members.append(mapping_row_info)

            if network.get('options'):
                dns_membe_ips = []
                for option in network['options']:
                    if option.get('name') == 'domain-name-servers':
                        option_values = option.get('value')
                        if option_values:
                            dns_membe_ips = option_values.split(',')
                            break
                for membe_ip in dns_membe_ips:
                    dns_member = utils.find_one_in_list(
                        'member_ip', membe_ip, db_members)
                    mapping_row_info = (netview_id + DELIMITER +
                                        dns_member.member_id + DELIMITER +
                                        const.SERVICE_TYPE_DNS)
                    if mapping_row_info not in expected_service_members:
                        expected_service_members.append(mapping_row_info)

        actual_mapping_members = utils.get_composite_values_from_records(
            ['network_view_id', 'member_id', 'mapping_relation'],
            db_mapping_members)
        self.assertEqual(set(expected_mapping_members),
                         set(actual_mapping_members))

        actual_service_members = utils.get_composite_values_from_records(
            ['network_view_id', 'member_id', 'service'], db_service_members)
        self.assertEqual(set(expected_service_members),
                         set(actual_service_members))
    def test_service_member(self):
        # prepare grid
        self._create_default_grid()

        # prepare grid members
        member_list = [{'member_id': 'm1',
                        'member_name': 'm1.com',
                        'member_ip': '10.10.1.1',
                        'member_ipv6': None,
                        'member_type': const.MEMBER_TYPE_GRID_MASTER,
                        'member_status': 'ON'},
                       {'member_id': 'm2',
                        'member_name': 'm2.com',
                        'member_ip': '10.10.1.2',
                        'member_ipv6': 'fd44:acb:5df6:1083::22',
                        'member_type': const.MEMBER_TYPE_CP_MEMBER,
                        'member_status': 'ON'}]
        self._create_members(member_list, self.grid_id)

        db_members = infoblox_db.get_members(self.ctx.session,
                                             grid_id=self.grid_id)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)
        m2_member = utils.find_one_in_list('member_id', 'm2', db_members)

        # create 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 = utils.find_one_in_list('network_view',
                                                 'default',
                                                 db_network_views)

        # test addition
        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       gm_member.member_id,
                                       const.SERVICE_TYPE_DHCP)

        infoblox_db.add_service_member(self.ctx.session,
                                       netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DHCP)

        db_service_members = infoblox_db.get_service_members(
            self.ctx.session, netview_default.id)
        gm_dhcp_member = utils.find_one_in_list('member_id',
                                                gm_member.member_id,
                                                db_service_members)
        self.assertIsNotNone(gm_dhcp_member)
        m2_dhcp_member = utils.find_one_in_list('member_id',
                                                m2_member.member_id,
                                                db_service_members)
        self.assertIsNotNone(m2_dhcp_member)

        # test removal
        infoblox_db.remove_service_member(self.ctx.session, netview_default.id)
        db_service_members = infoblox_db.get_service_members(
            self.ctx.session, netview_default.id)
        gm_dhcp_member = utils.find_one_in_list('member_id',
                                                gm_member.member_id,
                                                db_service_members)
        self.assertIsNone(gm_dhcp_member)

        m2m_dhcp_member = utils.find_one_in_list('member_id',
                                                 m2_member.member_id,
                                                 db_service_members)
        self.assertIsNone(m2m_dhcp_member)
Beispiel #13
0
    def test_service_member(self):
        # prepare grid
        self._create_default_grid()

        # prepare grid members
        member_list = [{
            'member_id': 'm1',
            'member_name': 'm1.com',
            'member_ip': '10.10.1.1',
            'member_ipv6': None,
            'member_type': const.MEMBER_TYPE_GRID_MASTER,
            'member_status': 'ON'
        }, {
            'member_id': 'm2',
            'member_name': 'm2.com',
            'member_ip': '10.10.1.2',
            'member_ipv6': 'fd44:acb:5df6:1083::22',
            'member_type': const.MEMBER_TYPE_CP_MEMBER,
            'member_status': 'ON'
        }]
        self._create_members(member_list, self.grid_id)

        db_members = infoblox_db.get_members(self.ctx.session,
                                             grid_id=self.grid_id)
        gm_member = utils.find_one_in_list('member_type', 'GM', db_members)
        m2_member = utils.find_one_in_list('member_id', 'm2', db_members)

        # create 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 = utils.find_one_in_list('network_view', 'default',
                                                 db_network_views)

        # test addition
        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       gm_member.member_id,
                                       const.SERVICE_TYPE_DHCP)

        infoblox_db.add_service_member(self.ctx.session, netview_default.id,
                                       m2_member.member_id,
                                       const.SERVICE_TYPE_DHCP)

        db_service_members = infoblox_db.get_service_members(
            self.ctx.session, netview_default.id)
        gm_dhcp_member = utils.find_one_in_list('member_id',
                                                gm_member.member_id,
                                                db_service_members)
        self.assertIsNotNone(gm_dhcp_member)
        m2_dhcp_member = utils.find_one_in_list('member_id',
                                                m2_member.member_id,
                                                db_service_members)
        self.assertIsNotNone(m2_dhcp_member)

        # test removal
        infoblox_db.remove_service_member(self.ctx.session, netview_default.id)
        db_service_members = infoblox_db.get_service_members(
            self.ctx.session, netview_default.id)
        gm_dhcp_member = utils.find_one_in_list('member_id',
                                                gm_member.member_id,
                                                db_service_members)
        self.assertIsNone(gm_dhcp_member)

        m2m_dhcp_member = utils.find_one_in_list('member_id',
                                                 m2_member.member_id,
                                                 db_service_members)
        self.assertIsNone(m2m_dhcp_member)
    def _validate_member_mapping(self, network_view_json, network_json):
        db_members = dbi.get_members(self.ctx.session,
                                     grid_id=self.test_grid_config.grid_id)
        db_network_views = dbi.get_network_views(self.ctx.session)
        db_mapping_members = dbi.get_mapping_members(self.ctx.session)
        db_service_members = dbi.get_service_members(self.ctx.session)

        gm_row = utils.find_one_in_list('member_type',
                                        const.MEMBER_TYPE_GRID_MASTER,
                                        db_members)
        gm_member_id = gm_row.member_id

        dedicated_delegation_members = dict()
        for netview in network_view_json:
            netview_name = netview['name']
            if (netview.get('cloud_info') and
                    netview.get('cloud_info').get('delegated_member')):
                delegated_member = utils.find_one_in_list(
                    'member_name',
                    netview['cloud_info']['delegated_member']['name'],
                    db_members)
                dedicated_delegation_members[netview_name] = (
                    delegated_member.member_id)

        expected_mapping_members = []
        expected_service_members = []

        # get delegated authority members from network views
        for netview in dedicated_delegation_members:
            netview_row = utils.find_one_in_list('network_view', netview,
                                                 db_network_views)
            netview_id = netview_row.id
            authority_member = dedicated_delegation_members[netview]
            mapping_relation = const.MAPPING_RELATION_DELEGATED
            mapping_row_info = (netview_id + DELIMITER + authority_member +
                                DELIMITER + mapping_relation)
            expected_mapping_members.append(mapping_row_info)

        # get authority members from networks
        for network in network_json:
            netview = network['network_view']
            netview_row = utils.find_one_in_list('network_view', netview,
                                                 db_network_views)
            netview_id = netview_row.id

            mapping_relation = const.MAPPING_RELATION_GM_OWNED
            authority_member = gm_member_id
            if netview in dedicated_delegation_members:
                authority_member = dedicated_delegation_members[netview]
                mapping_relation = const.MAPPING_RELATION_DELEGATED
            elif (network.get('cloud_info') and
                    network['cloud_info'].get('delegated_member')):
                delegated_member = utils.find_one_in_list(
                    'member_name',
                    network['cloud_info']['delegated_member']['name'],
                    db_members)
                authority_member = delegated_member.member_id
                mapping_relation = const.MAPPING_RELATION_DELEGATED

            mapping_row_info = (netview_id + DELIMITER + authority_member +
                                DELIMITER + mapping_relation)
            if mapping_row_info not in expected_mapping_members:
                expected_mapping_members.append(mapping_row_info)

            if network.get('members'):
                for m in network['members']:
                    if m['_struct'] == 'dhcpmember':
                        dhcp_member = utils.find_one_in_list(
                            'member_name', m['name'], db_members)
                        mapping_row_info = (netview_id + DELIMITER +
                                            dhcp_member.member_id + DELIMITER +
                                            const.SERVICE_TYPE_DHCP)
                        if mapping_row_info not in expected_service_members:
                            expected_service_members.append(mapping_row_info)

            if network.get('options'):
                dns_membe_ips = []
                for option in network['options']:
                    if option.get('name') == 'domain-name-servers':
                        option_values = option.get('value')
                        if option_values:
                            dns_membe_ips = option_values.split(',')
                            break
                for membe_ip in dns_membe_ips:
                    dns_member = utils.find_one_in_list(
                        'member_ip', membe_ip, db_members)
                    mapping_row_info = (netview_id + DELIMITER +
                                        dns_member.member_id + DELIMITER +
                                        const.SERVICE_TYPE_DNS)
                    if mapping_row_info not in expected_service_members:
                        expected_service_members.append(mapping_row_info)

        actual_mapping_members = utils.get_composite_values_from_records(
            ['network_view_id', 'member_id', 'mapping_relation'],
            db_mapping_members)
        self.assertEqual(set(expected_mapping_members),
                         set(actual_mapping_members))

        actual_service_members = utils.get_composite_values_from_records(
            ['network_view_id', 'member_id', 'service'],
            db_service_members)
        self.assertEqual(set(expected_service_members),
                         set(actual_service_members))