Ejemplo n.º 1
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):
    def setUp(self):
        super(BgpvpnDBTestCase, self).setUp()
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx, {
                    "tenant_id": self._tenant_id,
                    "type": "l3",
                    "name": "",
                    "route_targets": ["64512:1"],
                    "import_targets": ["64512:11", "64512:12"],
                    "export_targets": ["64512:13", "64512:14"],
                    "route_distinguishers": ["64512:15", "64512:16"]
                })

            net_assoc = {
                'network_id': net['network']['id'],
                'tenant_id': self._tenant_id
            }
            # associate network
            assoc1 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn['id'],
                                                     net_assoc)

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])

            # check
            self.assertEqual("l3", bgpvpn['type'])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn['route_targets'])
            self.assertEqual(["64512:11", "64512:12"],
                             bgpvpn['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn['export_targets'])
            self.assertEqual(["64512:15", "64512:16"],
                             bgpvpn['route_distinguishers'])
            self.assertEqual([net['network']['id']], bgpvpn['networks'])

            assoc1 = self.plugin_db.get_net_assoc(self.ctx, assoc1['id'],
                                                  bgpvpn['id'])
            self.assertEqual(net['network']['id'], assoc1['network_id'])
            self.assertEqual(bgpvpn['id'], assoc1['bgpvpn_id'])

            with self.network(name='net2') as net2:
                net_assoc2 = {
                    'network_id': net2['network']['id'],
                    'tenant_id': self._tenant_id
                }
                # associate network
                assoc2 = self.plugin_db.create_net_assoc(
                    self.ctx, bgpvpn['id'], net_assoc2)
                # retrieve
                assoc2 = self.plugin_db.get_net_assoc(self.ctx, assoc2['id'],
                                                      bgpvpn['id'])
                assoc_list = self.plugin_db.get_net_assocs(
                    self.ctx, bgpvpn['id'])
                self.assertIn(assoc2, assoc_list)
                self.assertIn(assoc1, assoc_list)

            self._test_router_assocs(bgpvpn['id'], 2)

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx, bgpvpn['id'], {
                    "type": "l2",
                    "name": "foo",
                    "tenant_id": "a-b-c-d",
                    "route_targets": [],
                    "import_targets": ["64512:22"],
                    "route_distinguishers": []
                })

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])
            # check
            self.assertEqual("l2", bgpvpn2['type'])
            self.assertEqual("a-b-c-d", bgpvpn2['tenant_id'])
            self.assertEqual("foo", bgpvpn2['name'])
            self.assertEqual([], bgpvpn2['route_targets'])
            self.assertEqual(["64512:22"], bgpvpn2['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn2['export_targets'])
            self.assertEqual([], bgpvpn2['route_distinguishers'])

            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.find_bgpvpns_for_network(
                self.ctx, net['network']['id'])
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2['id'], bgpvpn3[0]['id'])

            # asset that GETting the assoc, but for another BGPVPN, does fails
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], "bogus_bgpvpn_id")

            # assert that deleting a net remove the assoc
            self._delete('networks', net2['network']['id'])
            assoc_list = self.plugin_db.get_net_assocs(self.ctx, bgpvpn['id'])
            self.assertNotIn(assoc2, assoc_list)
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], bgpvpn['id'])
            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn['id'])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound, self.plugin_db.get_bgpvpn,
                              self.ctx, bgpvpn['id'])
            # check that the assoc has been deleted after deleting the bgpvpn
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc1['id'], bgpvpn['id'])

    def _test_router_assocs(self,
                            bgpvpn_id,
                            max_assocs,
                            assoc_count=0,
                            previous_assocs=None):
        with self.router(tenant_id=self._tenant_id) as router:
            router_assoc = {
                'router_id': router['router']['id'],
                'tenant_id': self._tenant_id
            }
            assoc = self.plugin_db.create_router_assoc(self.ctx, bgpvpn_id,
                                                       router_assoc)
            assoc_count += 1
            assoc = self.plugin_db.get_router_assoc(self.ctx, assoc['id'],
                                                    bgpvpn_id)
            assoc_list = self.plugin_db.get_router_assocs(self.ctx, bgpvpn_id)

            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn_id)
            self.assertIn(router['router']['id'], bgpvpn['routers'])

            if previous_assocs is None:
                previous_assocs = []
            previous_assocs.append(assoc)
            for assoc in previous_assocs:
                self.assertIn(assoc, assoc_list)

            if assoc_count == max_assocs:
                return
            else:
                self._test_router_assocs(bgpvpn_id,
                                         max_assocs,
                                         assoc_count=assoc_count)

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn['networks'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['networks'])

    def test_db_associate_twice(self):
        with self.network() as net, self.bgpvpn() as bgpvpn:
            net_id = net['network']['id']
            id = bgpvpn['bgpvpn']['id']
            with self.assoc_net(id, net_id=net_id):
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
                self.assertRaises(BGPVPNNetAssocAlreadyExists,
                                  self.plugin_db.create_net_assoc, self.ctx,
                                  id, {
                                      'tenant_id': self._tenant_id,
                                      'network_id': net_id
                                  })

    def test_db_find_bgpvpn_for_net(self):
        with self.network() as net, \
                self.bgpvpn(type=constants.BGPVPN_L2) as bgpvpn_l2, \
                self.bgpvpn() as bgpvpn_l3, \
                self.assoc_net(bgpvpn_l2['bgpvpn']['id'],
                               net['network']['id']), \
                self.assoc_net(bgpvpn_l3['bgpvpn']['id'],
                               net['network']['id']):
            net_id = net['network']['id']

            def _id_list(list):
                return [bgpvpn['id'] for bgpvpn in list]

            bgpvpn_id_list = _id_list(
                self.plugin_db.find_bgpvpns_for_network(self.ctx, net_id))
            self.assertIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_id_list)
            bgpvpn_l2_id_list = _id_list(
                self.plugin_db.find_bgpvpns_for_network(
                    self.ctx, net_id, bgpvpn_type=constants.BGPVPN_L2))

            self.assertIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_l2_id_list)
            self.assertNotIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_l2_id_list)

            bgpvpn_l3_id_list = _id_list(
                self.plugin_db.find_bgpvpns_for_network(
                    self.ctx, net_id, bgpvpn_type=constants.BGPVPN_L3))
            self.assertNotIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_l3_id_list[0])
            self.assertIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_l3_id_list[0])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.network() as net:
                net_id = net['network']['id']
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['networks'])

    def test_db_associate_disassociate_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router['router']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_router(id, router_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([router_id], bgpvpn['routers'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['routers'])

    def test_db_find_bgpvpn_for_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router['router']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_router(id, router_id=router_id):
                    bgpvpn_list = self.plugin_db.\
                        find_bgpvpns_for_router(self.ctx, router_id)
                    self.assertEqual(id, bgpvpn_list[0]['id'])

    def test_db_delete_router(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.router(tenant_id=self._tenant_id) as router:
                router_id = router['router']['id']
                self.assoc_router(id,
                                  router_id=router_id,
                                  do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['routers'])
Ejemplo n.º 2
0
 def setUp(self):
     super(BgpvpnDBTestCase, self).setUp()
     self.ctx = context.get_admin_context()
     self.plugin_db = BGPVPNPluginDb()
Ejemplo n.º 3
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):
    def setUp(self):
        super(BgpvpnDBTestCase, self).setUp()
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx,
                {
                    "tenant_id": self._tenant_id,
                    "type": "l3",
                    "name": "",
                    "route_targets": ["64512:1"],
                    "import_targets": ["64512:11", "64512:12"],
                    "export_targets": ["64512:13", "64512:14"],
                    "route_distinguishers": ["64512:15", "64512:16"],
                },
            )

            net_assoc = {"network_id": net["network"]["id"], "tenant_id": self._tenant_id}
            # associate network
            assoc1 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn["id"], net_assoc)

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn["id"])

            # check
            self.assertEqual("l3", bgpvpn["type"])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn["route_targets"])
            self.assertEqual(["64512:11", "64512:12"], bgpvpn["import_targets"])
            self.assertEqual(["64512:13", "64512:14"], bgpvpn["export_targets"])
            self.assertEqual(["64512:15", "64512:16"], bgpvpn["route_distinguishers"])
            self.assertEqual([net["network"]["id"]], bgpvpn["networks"])

            assoc1 = self.plugin_db.get_net_assoc(self.ctx, assoc1["id"], bgpvpn["id"])
            self.assertEqual(net["network"]["id"], assoc1["network_id"])
            self.assertEqual(bgpvpn["id"], assoc1["bgpvpn_id"])

            with self.network(name="net2") as net2:
                net_assoc2 = {"network_id": net2["network"]["id"], "tenant_id": self._tenant_id}
                # associate network
                assoc2 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn["id"], net_assoc2)
                # retrieve
                assoc2 = self.plugin_db.get_net_assoc(self.ctx, assoc2["id"], bgpvpn["id"])
                assoc_list = self.plugin_db.get_net_assocs(self.ctx, bgpvpn["id"])
                self.assertIn(assoc2, assoc_list)
                self.assertIn(assoc1, assoc_list)

            self._test_router_assocs(bgpvpn["id"], 2)

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx,
                bgpvpn["id"],
                {
                    "type": "l2",
                    "name": "foo",
                    "tenant_id": "a-b-c-d",
                    "route_targets": [],
                    "import_targets": ["64512:22"],
                    "route_distinguishers": [],
                },
            )

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn["id"])
            # check
            self.assertEqual("l2", bgpvpn2["type"])
            self.assertEqual("a-b-c-d", bgpvpn2["tenant_id"])
            self.assertEqual("foo", bgpvpn2["name"])
            self.assertEqual([], bgpvpn2["route_targets"])
            self.assertEqual(["64512:22"], bgpvpn2["import_targets"])
            self.assertEqual(["64512:13", "64512:14"], bgpvpn2["export_targets"])
            self.assertEqual([], bgpvpn2["route_distinguishers"])

            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.find_bgpvpns_for_network(self.ctx, net["network"]["id"])
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2["id"], bgpvpn3[0]["id"])

            # asset that GETting the assoc, but for another BGPVPN, does fails
            self.assertRaises(
                BGPVPNNetAssocNotFound, self.plugin_db.get_net_assoc, self.ctx, assoc2["id"], "bogus_bgpvpn_id"
            )

            # assert that deleting a net remove the assoc
            self._delete("networks", net2["network"]["id"])
            assoc_list = self.plugin_db.get_net_assocs(self.ctx, bgpvpn["id"])
            self.assertNotIn(assoc2, assoc_list)
            self.assertRaises(
                BGPVPNNetAssocNotFound, self.plugin_db.get_net_assoc, self.ctx, assoc2["id"], bgpvpn["id"]
            )
            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn["id"])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound, self.plugin_db.get_bgpvpn, self.ctx, bgpvpn["id"])
            # check that the assoc has been deleted after deleting the bgpvpn
            self.assertRaises(
                BGPVPNNetAssocNotFound, self.plugin_db.get_net_assoc, self.ctx, assoc1["id"], bgpvpn["id"]
            )

    def _test_router_assocs(self, bgpvpn_id, max_assocs, assoc_count=0, previous_assocs=None):
        with self.router(tenant_id=self._tenant_id) as router:
            router_assoc = {"router_id": router["router"]["id"], "tenant_id": self._tenant_id}
            assoc = self.plugin_db.create_router_assoc(self.ctx, bgpvpn_id, router_assoc)
            assoc_count += 1
            assoc = self.plugin_db.get_router_assoc(self.ctx, assoc["id"], bgpvpn_id)
            assoc_list = self.plugin_db.get_router_assocs(self.ctx, bgpvpn_id)

            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn_id)
            self.assertIn(router["router"]["id"], bgpvpn["routers"])

            if previous_assocs is None:
                previous_assocs = []
            previous_assocs.append(assoc)
            for assoc in previous_assocs:
                self.assertIn(assoc, assoc_list)

            if assoc_count == max_assocs:
                return
            else:
                self._test_router_assocs(bgpvpn_id, max_assocs, assoc_count=assoc_count)

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net["network"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn["networks"])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn["networks"])

    def test_db_associate_twice(self):
        with self.network() as net, self.bgpvpn() as bgpvpn:
            net_id = net["network"]["id"]
            id = bgpvpn["bgpvpn"]["id"]
            with self.assoc_net(id, net_id=net_id):
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
                self.assertRaises(
                    BGPVPNNetAssocAlreadyExists,
                    self.plugin_db.create_net_assoc,
                    self.ctx,
                    id,
                    {"tenant_id": self._tenant_id, "network_id": net_id},
                )

    def test_db_find_bgpvpn_for_net(self):
        with self.network() as net:
            net_id = net["network"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_net(id, net_id=net_id):
                    bgpvpn_list = self.plugin_db.find_bgpvpns_for_network(self.ctx, net_id)
                    self.assertEqual(id, bgpvpn_list[0]["id"])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn["bgpvpn"]["id"]
            with self.network() as net:
                net_id = net["network"]["id"]
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db["networks"])

    def test_db_associate_disassociate_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router["router"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_router(id, router_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([router_id], bgpvpn["routers"])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn["routers"])

    def test_db_find_bgpvpn_for_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router["router"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_router(id, router_id=router_id):
                    bgpvpn_list = self.plugin_db.find_bgpvpns_for_router(self.ctx, router_id)
                    self.assertEqual(id, bgpvpn_list[0]["id"])

    def test_db_delete_router(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn["bgpvpn"]["id"]
            with self.router(tenant_id=self._tenant_id) as router:
                router_id = router["router"]["id"]
                self.assoc_router(id, router_id=router_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db["routers"])
Ejemplo n.º 4
0
 def setUp(self):
     super(BgpvpnDBTestCase, self).setUp()
     self.ctx = context.get_admin_context()
     self.plugin_db = BGPVPNPluginDb()
Ejemplo n.º 5
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):

    def setUp(self):
        super(BgpvpnDBTestCase, self).setUp()
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx,
                {"tenant_id": self._tenant_id,
                 "type": "l3",
                 "name": "",
                 "route_targets": ["64512:1"],
                 "import_targets": ["64512:11", "64512:12"],
                 "export_targets": ["64512:13", "64512:14"],
                 "route_distinguishers": ["64512:15", "64512:16"],
                 "auto_aggregate": False
                 }
            )

            net_assoc = {'network_id': net['network']['id'],
                         'tenant_id': self._tenant_id}
            # associate network
            assoc1 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn['id'],
                                                     net_assoc)

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])

            # check
            self.assertEqual("l3", bgpvpn['type'])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn['route_targets'])
            self.assertEqual(["64512:11", "64512:12"],
                             bgpvpn['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn['export_targets'])
            self.assertEqual(False, bgpvpn['auto_aggregate'])
            self.assertEqual(["64512:15", "64512:16"],
                             bgpvpn['route_distinguishers'])
            self.assertEqual([net['network']['id']], bgpvpn['networks'])

            assoc1 = self.plugin_db.get_net_assoc(self.ctx, assoc1['id'],
                                                  bgpvpn['id'])
            self.assertEqual(net['network']['id'], assoc1['network_id'])
            self.assertEqual(bgpvpn['id'], assoc1['bgpvpn_id'])

            with self.network(name='net2') as net2:
                net_assoc2 = {'network_id': net2['network']['id'],
                              'tenant_id': self._tenant_id}
                # associate network
                assoc2 = self.plugin_db.create_net_assoc(self.ctx,
                                                         bgpvpn['id'],
                                                         net_assoc2)
                # retrieve
                assoc2 = self.plugin_db.get_net_assoc(self.ctx, assoc2['id'],
                                                      bgpvpn['id'])
                assoc_list = self.plugin_db.get_net_assocs(self.ctx,
                                                           bgpvpn['id'])
                self.assertIn(assoc2, assoc_list)
                self.assertIn(assoc1, assoc_list)

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx,
                bgpvpn['id'],
                {"type": "l2",
                 "name": "foo",
                 "tenant_id": "a-b-c-d",
                 "route_targets": [],
                 "import_targets": ["64512:22"],
                 "route_distinguishers": [],
                 "auto_aggregate": True
                 })

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])
            # check
            self.assertEqual("l2", bgpvpn2['type'])
            self.assertEqual("a-b-c-d", bgpvpn2['tenant_id'])
            self.assertEqual("foo", bgpvpn2['name'])
            self.assertEqual([], bgpvpn2['route_targets'])
            self.assertEqual(["64512:22"], bgpvpn2['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn2['export_targets'])
            self.assertEqual([], bgpvpn2['route_distinguishers'])
            self.assertEqual(True, bgpvpn2['auto_aggregate'])

            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.find_bgpvpns_for_network(
                self.ctx,
                net['network']['id']
                )
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2['id'], bgpvpn3[0]['id'])

            # asset that GETting the assoc, but for another BGPVPN, does fails
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc,
                              self.ctx,
                              assoc2['id'],
                              "bogus_bgpvpn_id")

            # assert that deleting a net remove the assoc
            self._delete('networks', net2['network']['id'])
            assoc_list = self.plugin_db.get_net_assocs(self.ctx,
                                                       bgpvpn['id'])
            self.assertNotIn(assoc2, assoc_list)
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc,
                              self.ctx,
                              assoc2['id'], bgpvpn['id'])
            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn['id'])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound,
                              self.plugin_db.get_bgpvpn,
                              self.ctx, bgpvpn['id'])
            # check that the assoc has been deleted after deleting the bgpvpn
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc,
                              self.ctx,
                              assoc1['id'], bgpvpn['id'])

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn['networks'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['networks'])

    def test_db_find_bgpvpn_for_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id=net_id):
                    bgpvpn_list = self.plugin_db.\
                        find_bgpvpns_for_network(self.ctx, net_id)
                    self.assertEqual(id, bgpvpn_list[0]['id'])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.network() as net:
                net_id = net['network']['id']
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['networks'])
Ejemplo n.º 6
0
 def setUp(self, service_provider=None):
     super(BgpvpnDBTestCase, self).setUp(service_provider)
     self.ctx = context.get_admin_context()
     self.plugin_db = BGPVPNPluginDb()
Ejemplo n.º 7
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):
    def setUp(self, service_provider=None):
        super(BgpvpnDBTestCase, self).setUp(service_provider)
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx, {
                    "tenant_id": self._tenant_id,
                    "type": "l3",
                    "name": "",
                    "route_targets": ["64512:1"],
                    "import_targets": ["64512:11", "64512:12"],
                    "export_targets": ["64512:13", "64512:14"],
                    "route_distinguishers": ["64512:15", "64512:16"],
                    "vni": "1000",
                    "local_pref": "777"
                })

            net_assoc = {
                'network_id': net['network']['id'],
                'tenant_id': self._tenant_id
            }
            # associate network
            assoc1 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn['id'],
                                                     net_assoc)

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])

            # check
            self.assertEqual("l3", bgpvpn['type'])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn['route_targets'])
            self.assertEqual(["64512:11", "64512:12"],
                             bgpvpn['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn['export_targets'])
            self.assertEqual(["64512:15", "64512:16"],
                             bgpvpn['route_distinguishers'])

            if utils.is_extension_supported(self.bgpvpn_plugin,
                                            bgpvpn_vni_def.ALIAS):
                self.assertEqual(1000, bgpvpn['vni'])
            else:
                #
                # Test should ensure vni attribute is not present as
                # bpvpn_vni extension is not loaded.
                #
                self.assertFalse('vni' in bgpvpn)

            if utils.is_extension_supported(self.bgpvpn_plugin,
                                            bgpvpn_rc_def.ALIAS):
                self.assertEqual(777, bgpvpn['local_pref'])
            else:
                #
                # Test should ensure local_pref attribute is not present as
                # bpvpn-routes-control extension is not loaded.
                #
                self.assertFalse('local_pref' in bgpvpn)

            self.assertEqual([net['network']['id']], bgpvpn['networks'])

            assoc1 = self.plugin_db.get_net_assoc(self.ctx, assoc1['id'],
                                                  bgpvpn['id'])
            self.assertEqual(net['network']['id'], assoc1['network_id'])
            self.assertEqual(bgpvpn['id'], assoc1['bgpvpn_id'])

            with self.network(name='net2') as net2:
                net_assoc2 = {
                    'network_id': net2['network']['id'],
                    'tenant_id': self._tenant_id
                }
                # associate network
                assoc2 = self.plugin_db.create_net_assoc(
                    self.ctx, bgpvpn['id'], net_assoc2)
                # retrieve
                assoc2 = self.plugin_db.get_net_assoc(self.ctx, assoc2['id'],
                                                      bgpvpn['id'])
                assoc_list = self.plugin_db.get_net_assocs(
                    self.ctx, bgpvpn['id'])
                self.assertIn(assoc2, assoc_list)
                self.assertIn(assoc1, assoc_list)

            self._test_router_assocs(bgpvpn['id'], 2)

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx, bgpvpn['id'], {
                    "type": "l2",
                    "name": "foo",
                    "tenant_id": "a-b-c-d",
                    "route_targets": [],
                    "import_targets": ["64512:22"],
                    "route_distinguishers": [],
                    "local_pref": "100"
                })

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])
            # check
            self.assertEqual("l2", bgpvpn2['type'])
            self.assertEqual("a-b-c-d", bgpvpn2['tenant_id'])
            self.assertEqual("foo", bgpvpn2['name'])
            self.assertEqual([], bgpvpn2['route_targets'])
            self.assertEqual(["64512:22"], bgpvpn2['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn2['export_targets'])
            self.assertEqual([], bgpvpn2['route_distinguishers'])
            self.assertEqual(100, bgpvpn2['local_pref'])
            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.get_bgpvpns(
                self.ctx,
                filters={
                    'networks': [net['network']['id']],
                },
            )
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2['id'], bgpvpn3[0]['id'])

            # asset that GETting the assoc, but for another BGPVPN, does fails
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], "bogus_bgpvpn_id")

            # assert that deleting a net remove the assoc
            self._delete('networks', net2['network']['id'])
            assoc_list = self.plugin_db.get_net_assocs(self.ctx, bgpvpn['id'])
            self.assertNotIn(assoc2, assoc_list)
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], bgpvpn['id'])
            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn['id'])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound, self.plugin_db.get_bgpvpn,
                              self.ctx, bgpvpn['id'])
            # check that the assoc has been deleted after deleting the bgpvpn
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc1['id'], bgpvpn['id'])

    def _test_router_assocs(self,
                            bgpvpn_id,
                            max_assocs,
                            assoc_count=0,
                            previous_assocs=None):
        with self.router(tenant_id=self._tenant_id) as router:
            router_assoc = {
                'router_id': router['router']['id'],
                'tenant_id': self._tenant_id
            }
            assoc = self.plugin_db.create_router_assoc(self.ctx, bgpvpn_id,
                                                       router_assoc)
            assoc_count += 1
            assoc = self.plugin_db.get_router_assoc(self.ctx, assoc['id'],
                                                    bgpvpn_id)
            assoc_list = self.plugin_db.get_router_assocs(self.ctx, bgpvpn_id)

            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn_id)
            self.assertIn(router['router']['id'], bgpvpn['routers'])

            if previous_assocs is None:
                previous_assocs = []
            previous_assocs.append(assoc)
            for assoc in previous_assocs:
                self.assertIn(assoc, assoc_list)

            if assoc_count == max_assocs:
                return
            else:
                self._test_router_assocs(bgpvpn_id,
                                         max_assocs,
                                         assoc_count=assoc_count)

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn['networks'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['networks'])

    def test_db_associate_twice(self):
        with self.network() as net, self.bgpvpn() as bgpvpn:
            net_id = net['network']['id']
            id = bgpvpn['bgpvpn']['id']
            with self.assoc_net(id, net_id=net_id):
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
                self.assertRaises(BGPVPNNetAssocAlreadyExists,
                                  self.plugin_db.create_net_assoc, self.ctx,
                                  id, {
                                      'tenant_id': self._tenant_id,
                                      'network_id': net_id
                                  })

    def test_db_find_bgpvpn_for_associated_network(self):
        with self.network() as net, \
                self.bgpvpn(type=constants.BGPVPN_L2) as bgpvpn_l2, \
                self.bgpvpn() as bgpvpn_l3, \
                self.assoc_net(bgpvpn_l2['bgpvpn']['id'],
                               net['network']['id']), \
                self.assoc_net(bgpvpn_l3['bgpvpn']['id'],
                               net['network']['id']):
            net_id = net['network']['id']

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={'networks': [net_id]},
                ))
            self.assertIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_l2_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [net_id],
                        'type': [constants.BGPVPN_L2],
                    },
                ))
            self.assertIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_l2_id_list)
            self.assertNotIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_l2_id_list)

            bgpvpn_l3_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [net_id],
                        'type': [constants.BGPVPN_L3],
                    },
                ))
            self.assertNotIn(bgpvpn_l2['bgpvpn']['id'], bgpvpn_l3_id_list[0])
            self.assertIn(bgpvpn_l3['bgpvpn']['id'], bgpvpn_l3_id_list[0])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.network() as net:
                net_id = net['network']['id']
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['networks'])

    def test_db_associate_disassociate_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router['router']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_router(id, router_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([router_id], bgpvpn['routers'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['routers'])

    def test_db_find_bgpvpn_for_associated_router(self):
        with self.router(tenant_id=self._tenant_id) as router:
            router_id = router['router']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_router(id, router_id=router_id):
                    bgpvpn_list = self.plugin_db.get_bgpvpns(
                        self.ctx,
                        filters={'routers': [router_id]},
                    )
                    self.assertEqual(id, bgpvpn_list[0]['id'])

    def test_db_delete_router(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.router(tenant_id=self._tenant_id) as router:
                router_id = router['router']['id']
                self.assoc_router(id,
                                  router_id=router_id,
                                  do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['routers'])

    def test_db_list_bgpvpn_filtering_associated_resources(self):
        with self.network() as network1, \
                self.network() as network2, \
                self.router(tenant_id=self._tenant_id) as router1, \
                self.router(tenant_id=self._tenant_id) as router2, \
                self.bgpvpn() as bgpvpn1, \
                self.bgpvpn() as bgpvpn2, \
                self.bgpvpn() as bgpvpn3, \
                self.assoc_net(bgpvpn1['bgpvpn']['id'],
                               network1['network']['id']), \
                self.assoc_router(bgpvpn3['bgpvpn']['id'],
                                  router1['router']['id']), \
                self.assoc_net(bgpvpn2['bgpvpn']['id'],
                               network2['network']['id']), \
                self.assoc_router(bgpvpn2['bgpvpn']['id'],
                                  router2['router']['id']):
            network1_id = network1['network']['id']
            network2_id = network2['network']['id']
            router1_id = router1['router']['id']
            router2_id = router2['router']['id']

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [network1_id],
                    },
                ))
            self.assertIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [network1_id, network2_id],
                    },
                ))
            self.assertIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'routers': [router1_id],
                    },
                ))
            self.assertNotIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'routers': [router1_id, router2_id],
                    },
                ))
            self.assertNotIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [network1_id],
                        'routers': [router1_id],
                    },
                ))
            self.assertNotIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

            bgpvpn_id_list = _id_list(
                self.plugin_db.get_bgpvpns(
                    self.ctx,
                    filters={
                        'networks': [network2_id],
                        'routers': [router2_id],
                    },
                ))
            self.assertNotIn(bgpvpn1['bgpvpn']['id'], bgpvpn_id_list)
            self.assertIn(bgpvpn2['bgpvpn']['id'], bgpvpn_id_list)
            self.assertNotIn(bgpvpn3['bgpvpn']['id'], bgpvpn_id_list)

    def test_db_associate_disassociate_port(self):
        with self.port(tenant_id=self._tenant_id) as port, \
                self.bgpvpn() as bgpvpn:
            port_id = port['port']['id']
            bgpvpn_id = bgpvpn['bgpvpn']['id']
            with self.assoc_port(bgpvpn_id, port_id):
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn_id)
                self.assertEqual([port_id], bgpvpn['ports'])
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn_id)
            self.assertEqual([], bgpvpn['ports'])

    def test_db_update_port_association(self):
        ROUTE_A = {'type': 'prefix', 'prefix': '12.1.0.0/16'}
        ROUTE_B = {'type': 'prefix', 'prefix': '14.0.0.0/8', 'local_pref': 200}
        ROUTE_Bbis = {
            'type': 'prefix',
            'prefix': '14.0.0.0/8',
            'local_pref': 100
        }
        ROUTE_C = {'type': 'prefix', 'prefix': '18.1.0.0/16'}

        def with_defaults(port_assoc_route):
            r = dict(local_pref=None)
            r.update(port_assoc_route)
            return r

        with self.network() as net, \
                self.subnet(network={'network': net['network']}) as subnet, \
                self.port(subnet={'subnet': subnet['subnet']}) as port, \
                self.bgpvpn() as bgpvpn, \
                self.assoc_port(bgpvpn['bgpvpn']['id'],
                                port['port']['id'],
                                advertise_fixed_ips=False,
                                routes=[ROUTE_A, ROUTE_B]) as port_assoc:
            bgpvpn_id = bgpvpn['bgpvpn']['id']

            self._update(
                'bgpvpn/bgpvpns/%s/port_associations' % bgpvpn_id,
                port_assoc['port_association']['id'], {
                    'port_association': {
                        'advertise_fixed_ips': True,
                        'routes': [ROUTE_Bbis, ROUTE_C]
                    }
                })

            assoc = self.show_port_assoc(bgpvpn['bgpvpn']['id'],
                                         port_assoc['port_association']['id'])
            assoc = assoc['port_association']

            self.assertTrue(assoc['advertise_fixed_ips'])
            self.assertNotIn(with_defaults(ROUTE_A), assoc['routes'])
            self.assertIn(with_defaults(ROUTE_Bbis), assoc['routes'])
            self.assertIn(with_defaults(ROUTE_C), assoc['routes'])

            res = self._update(
                'bgpvpn/bgpvpns/%s/port_associations' % bgpvpn_id,
                port_assoc['port_association']['id'],
                {'port_association': {
                    'routes': []
                }})
            self.assertEqual(0, len(res['port_association']['routes']))
Ejemplo n.º 8
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):
    def setUp(self):
        super(BgpvpnDBTestCase, self).setUp()
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx, {
                    "tenant_id": self._tenant_id,
                    "type": "l3",
                    "name": "",
                    "route_targets": ["64512:1"],
                    "import_targets": ["64512:11", "64512:12"],
                    "export_targets": ["64512:13", "64512:14"],
                    "route_distinguishers": ["64512:15", "64512:16"],
                    "auto_aggregate": False
                })

            net_assoc = {
                'network_id': net['network']['id'],
                'tenant_id': self._tenant_id
            }
            # associate network
            assoc1 = self.plugin_db.create_net_assoc(self.ctx, bgpvpn['id'],
                                                     net_assoc)

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])

            # check
            self.assertEqual("l3", bgpvpn['type'])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn['route_targets'])
            self.assertEqual(["64512:11", "64512:12"],
                             bgpvpn['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn['export_targets'])
            self.assertEqual(False, bgpvpn['auto_aggregate'])
            self.assertEqual(["64512:15", "64512:16"],
                             bgpvpn['route_distinguishers'])
            self.assertEqual([net['network']['id']], bgpvpn['networks'])

            assoc1 = self.plugin_db.get_net_assoc(self.ctx, assoc1['id'],
                                                  bgpvpn['id'])
            self.assertEqual(net['network']['id'], assoc1['network_id'])
            self.assertEqual(bgpvpn['id'], assoc1['bgpvpn_id'])

            with self.network(name='net2') as net2:
                net_assoc2 = {
                    'network_id': net2['network']['id'],
                    'tenant_id': self._tenant_id
                }
                # associate network
                assoc2 = self.plugin_db.create_net_assoc(
                    self.ctx, bgpvpn['id'], net_assoc2)
                # retrieve
                assoc2 = self.plugin_db.get_net_assoc(self.ctx, assoc2['id'],
                                                      bgpvpn['id'])
                assoc_list = self.plugin_db.get_net_assocs(
                    self.ctx, bgpvpn['id'])
                self.assertIn(assoc2, assoc_list)
                self.assertIn(assoc1, assoc_list)

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx, bgpvpn['id'], {
                    "type": "l2",
                    "name": "foo",
                    "tenant_id": "a-b-c-d",
                    "route_targets": [],
                    "import_targets": ["64512:22"],
                    "route_distinguishers": [],
                    "auto_aggregate": True
                })

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn['id'])
            # check
            self.assertEqual("l2", bgpvpn2['type'])
            self.assertEqual("a-b-c-d", bgpvpn2['tenant_id'])
            self.assertEqual("foo", bgpvpn2['name'])
            self.assertEqual([], bgpvpn2['route_targets'])
            self.assertEqual(["64512:22"], bgpvpn2['import_targets'])
            self.assertEqual(["64512:13", "64512:14"],
                             bgpvpn2['export_targets'])
            self.assertEqual([], bgpvpn2['route_distinguishers'])
            self.assertEqual(True, bgpvpn2['auto_aggregate'])

            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.find_bgpvpns_for_network(
                self.ctx, net['network']['id'])
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2['id'], bgpvpn3[0]['id'])

            # asset that GETting the assoc, but for another BGPVPN, does fails
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], "bogus_bgpvpn_id")

            # assert that deleting a net remove the assoc
            self._delete('networks', net2['network']['id'])
            assoc_list = self.plugin_db.get_net_assocs(self.ctx, bgpvpn['id'])
            self.assertNotIn(assoc2, assoc_list)
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc2['id'], bgpvpn['id'])
            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn['id'])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound, self.plugin_db.get_bgpvpn,
                              self.ctx, bgpvpn['id'])
            # check that the assoc has been deleted after deleting the bgpvpn
            self.assertRaises(BGPVPNNetAssocNotFound,
                              self.plugin_db.get_net_assoc, self.ctx,
                              assoc1['id'], bgpvpn['id'])

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn['networks'])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn['networks'])

    def test_db_find_bgpvpn_for_net(self):
        with self.network() as net:
            net_id = net['network']['id']
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn['bgpvpn']['id']
                with self.assoc_net(id, net_id=net_id):
                    bgpvpn_list = self.plugin_db.\
                        find_bgpvpns_for_network(self.ctx, net_id)
                    self.assertEqual(id, bgpvpn_list[0]['id'])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn['bgpvpn']['id']
            with self.network() as net:
                net_id = net['network']['id']
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db['networks'])
Ejemplo n.º 9
0
class BgpvpnDBTestCase(test_plugin.BgpvpnTestCaseMixin):
    def setUp(self):
        super(BgpvpnDBTestCase, self).setUp()
        self.ctx = context.get_admin_context()
        self.plugin_db = BGPVPNPluginDb()

    def test_bgpvpn_create_update_delete(self):
        with self.network() as net:
            # create
            bgpvpn = self.plugin_db.create_bgpvpn(
                self.ctx,
                {
                    "bgpvpn": {
                        "type": "l3",
                        "name": "",
                        "route_targets": ["64512:1"],
                        "import_targets": ["64512:11", "64512:12"],
                        "export_targets": ["64512:13", "64512:14"],
                        "route_distinguishers": ["64512:15", "64512:16"],
                        "auto_aggregate": False,
                    }
                },
            )

            # associate network
            self.plugin_db.associate_network(self.ctx, bgpvpn["id"], net["network"]["id"])

            # retrieve
            bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn["id"])

            # check
            self.assertEqual("l3", bgpvpn["type"])
            # we could check tenant_id
            self.assertEqual(["64512:1"], bgpvpn["route_targets"])
            self.assertEqual(["64512:11", "64512:12"], bgpvpn["import_targets"])
            self.assertEqual(["64512:13", "64512:14"], bgpvpn["export_targets"])
            self.assertEqual(False, bgpvpn["auto_aggregate"])
            self.assertEqual(["64512:15", "64512:16"], bgpvpn["route_distinguishers"])

            # update
            self.plugin_db.update_bgpvpn(
                self.ctx,
                bgpvpn["id"],
                {
                    "bgpvpn": {
                        "type": "l2",
                        "name": "foo",
                        "tenant_id": "a-b-c-d",
                        "route_targets": [],
                        "import_targets": ["64512:22"],
                        "route_distinguishers": [],
                        "auto_aggregate": True,
                    }
                },
            )

            # retrieve
            bgpvpn2 = self.plugin_db.get_bgpvpn(self.ctx, bgpvpn["id"])
            # check
            self.assertEqual("l2", bgpvpn2["type"])
            self.assertEqual("a-b-c-d", bgpvpn2["tenant_id"])
            self.assertEqual("foo", bgpvpn2["name"])
            self.assertEqual([], bgpvpn2["route_targets"])
            self.assertEqual(["64512:22"], bgpvpn2["import_targets"])
            self.assertEqual(["64512:13", "64512:14"], bgpvpn2["export_targets"])
            self.assertEqual([], bgpvpn2["route_distinguishers"])
            self.assertEqual(True, bgpvpn2["auto_aggregate"])

            # find bgpvpn by network_id
            bgpvpn3 = self.plugin_db.find_bgpvpns_for_network(self.ctx, net["network"]["id"])
            self.assertEqual(1, len(bgpvpn3))
            self.assertEqual(bgpvpn2["id"], bgpvpn3[0]["id"])

            # delete
            self.plugin_db.delete_bgpvpn(self.ctx, bgpvpn["id"])
            # check that delete was effective
            self.assertRaises(BGPVPNNotFound, self.plugin_db.get_bgpvpn, self.ctx, bgpvpn["id"])

    def test_db_associate_disassociate_net(self):
        with self.network() as net:
            net_id = net["network"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_net(id, net_id):
                    bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                    self.assertEqual([net_id], bgpvpn["networks"])
                bgpvpn = self.plugin_db.get_bgpvpn(self.ctx, id)
                self.assertEqual([], bgpvpn["networks"])

    def test_db_find_conn_for_net(self):
        with self.network() as net:
            net_id = net["network"]["id"]
            with self.bgpvpn() as bgpvpn:
                id = bgpvpn["bgpvpn"]["id"]
                with self.assoc_net(id, net_id=net_id):
                    bgpvpn_list = self.plugin_db.find_bgpvpns_for_network(self.ctx, net_id)
                    self.assertEqual([net_id], bgpvpn_list[0]["networks"])

    def test_db_delete_net(self):
        with self.bgpvpn() as bgpvpn:
            id = bgpvpn["bgpvpn"]["id"]
            with self.network() as net:
                net_id = net["network"]["id"]
                self.assoc_net(id, net_id=net_id, do_disassociate=False)
            bgpvpn_db = self.plugin_db.get_bgpvpn(self.ctx, id)
            self.assertEqual([], bgpvpn_db["networks"])