Example #1
0
    def __init__(self):

        self.sub_controllers = {
            "regions":
            region.RegionsController(),
            "dcs":
            dc.DCsController(),
            "fabrics":
            fabric.FabricsController(),
            "tricircle_resources":
            tricircle_resource.TricircleResourcesController(),
            "core_routers":
            core_router.CoreRoutersController(),
            "dcis":
            dci.DCIsController(),
            "dynamic_peering_connections":
            dynamic_peering_connection.DynamicPeeringConnectionsController(),
            "firewall_gateways":
            firewall_gateway.FirewallGatewaysController(),
            "firewall_bypasss":
            firewall_bypass.FirewallBypasssController(),
            "route_entries":
            route_entry.RouteEntrysController(),
            "pods":
            pod.PodsController(),
            "routings":
            routing.RoutingController(),
            "jobs":
            job.AsyncJobController()
        }

        for name, ctrl in self.sub_controllers.items():
            setattr(self, name, ctrl)
Example #2
0
    def __init__(self):

        self.sub_controllers = {
            "pods": pod.PodsController(),
            "bindings": pod.BindingsController()
        }

        for name, ctrl in self.sub_controllers.items():
            setattr(self, name, ctrl)
Example #3
0
    def __init__(self):

        self.sub_controllers = {
            "pods": pod.PodsController(),
            "routings": routing.RoutingController(),
            "jobs": job.AsyncJobController()
        }

        for name, ctrl in self.sub_controllers.items():
            setattr(self, name, ctrl)
Example #4
0
    def test_delete(self, mock_context):
        mock_context.return_value = self.context

        # prepare the foreign key: pod_id
        kw_pod = {'pod': {'region_name': 'pod1', 'az_name': 'az1'}}
        pod_id = pod.PodsController().post(**kw_pod)['pod']['pod_id']

        # a variable used for later test
        project_id = uuidutils.generate_uuid()

        kw_routing = {
            'routing': {
                'top_id': '09fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }

        routing = self.controller.post(**kw_routing)
        id = routing['routing']['id']
        res = self.controller.delete(id)
        self.assertEqual(200, res.status)

        routings = db_api.list_resource_routings(
            self.context, [{
                'key': 'top_id',
                'comparator': 'eq',
                'value': '09fd7cc9-d'
                '169-4b5a-88e8-436ecf4d0bfe'
            }, {
                'key': 'pod_id',
                'comparator': 'eq',
                'value': pod_id
            }], [])
        self.assertEqual(0, len(routings))

        # failure case, only admin can delete resource routing
        self.context.is_admin = False
        res = self.controller.delete(id)
        self._validate_error_code(res, 403)

        self.context.is_admin = True

        # failure case, resource routing not found
        res = self.controller.delete(-123)
        self._validate_error_code(res, 404)
Example #5
0
    def test_get_one(self, mock_context):
        mock_context.return_value = self.context

        # prepare the foreign key: pod_id
        kw_pod = {'pod': {'region_name': 'pod1', 'az_name': 'az1'}}
        pod_id = pod.PodsController().post(**kw_pod)['pod']['pod_id']

        # a variable used for later test
        project_id = uuidutils.generate_uuid()

        kw_routing = {
            'routing': {
                'top_id': '09fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'port'
            }
        }

        id = self.controller.post(**kw_routing)['routing']['id']

        routing = self.controller.get_one(id)
        self.assertEqual('09fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                         routing['routing']['top_id'])
        self.assertEqual('dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                         routing['routing']['bottom_id'])
        self.assertEqual(pod_id, routing['routing']['pod_id'])
        self.assertEqual(project_id, routing['routing']['project_id'])
        self.assertEqual('port', routing['routing']['resource_type'])

        # failure case, only admin can get resource routing
        self.context.is_admin = False
        res = self.controller.get_one(id)
        self._validate_error_code(res, 403)

        self.context.is_admin = True

        # failure case, resource routing not found
        res = self.controller.get_one(-123)
        self._validate_error_code(res, 404)
Example #6
0
    def test_post(self, mock_context):
        mock_context.return_value = self.context

        # prepare the foreign key: pod_id
        kw_pod = {'pod': {'region_name': 'pod1', 'az_name': 'az1'}}
        pod_id = pod.PodsController().post(**kw_pod)['pod']['pod_id']

        # a variable used for later test
        project_id = uuidutils.generate_uuid()

        kw_routing = {
            'routing': {
                'top_id': '09fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }
        id = self.controller.post(**kw_routing)['routing']['id']
        routing = db_api.get_resource_routing(self.context, id)
        self.assertEqual('09fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                         routing['top_id'])
        self.assertEqual('dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                         routing['bottom_id'])
        self.assertEqual(pod_id, routing['pod_id'])
        self.assertEqual(project_id, routing['project_id'])
        self.assertEqual('subnet', routing['resource_type'])

        routings = db_api.list_resource_routings(
            self.context, [{
                'key': 'top_id',
                'comparator': 'eq',
                'value': '09fd7cc9-d169-4b5a-'
                '88e8-436ecf4d0bfe'
            }, {
                'key': 'pod_id',
                'comparator': 'eq',
                'value': pod_id
            }], [])
        self.assertEqual(1, len(routings))

        # failure case, only admin can create resource routing
        self.context.is_admin = False
        res = self.controller.post(**kw_routing)
        self._validate_error_code(res, 403)

        self.context.is_admin = True

        # failure case, request body not found
        kw_routing1 = {
            'route': {
                'top_id': '109fd7cc9-d169-4b5a-88e8-436ecf4d0bfe',
                'bottom_id': '2dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }
        res = self.controller.post(**kw_routing1)
        self._validate_error_code(res, 400)

        # failure case, top_id is not given
        kw_routing2 = {
            'routing': {
                'bottom_id': '2dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }
        res = self.controller.post(**kw_routing2)
        self._validate_error_code(res, 400)

        # failure case, top_id is empty
        kw_routing3 = {
            'routing': {
                'top_id': '',
                'bottom_id': '2dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }
        res = self.controller.post(**kw_routing3)
        self._validate_error_code(res, 400)

        # failure case, top_id is given value 'None'
        kw_routing4 = {
            'routing': {
                'top_id': None,
                'bottom_id': '2dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }
        res = self.controller.post(**kw_routing4)
        self._validate_error_code(res, 400)

        # failure case, wrong resource type
        kw_routing6 = {
            'routing': {
                'top_id': '09fd7cc9-d169-4b5a-88e8-436ecf4d0b09',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e2031f',
                'pod_id': pod_id,
                'project_id': project_id,
                'resource_type': 'server'
            }
        }
        res = self.controller.post(**kw_routing6)
        self._validate_error_code(res, 400)

        # failure case, the resource routing already exists
        res = self.controller.post(**kw_routing)
        self._validate_error_code(res, 409)
Example #7
0
    def test_put(self, mock_context):
        mock_context.return_value = self.context

        # prepare the foreign key: pod_id
        kw_pod1 = {'pod': {'region_name': 'pod1', 'az_name': 'az1'}}
        pod_id1 = pod.PodsController().post(**kw_pod1)['pod']['pod_id']

        # a variable used for later test
        project_id = uuidutils.generate_uuid()

        body = {
            'routing': {
                'top_id': 'c7f641c9-8462-4007-84b2-3035d8cfb7a3',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id1,
                'project_id': project_id,
                'resource_type': 'router'
            }
        }

        # both bottom_id and resource type have been changed
        body_update1 = {
            'routing': {
                'bottom_id': 'fd72c010-6e62-4866-b999-6dcb718dd7b4',
                'resource_type': 'port'
            }
        }

        id = self.controller.post(**body)['routing']['id']
        routing = self.controller.put(id, **body_update1)

        self.assertEqual('port', routing['routing']['resource_type'])
        self.assertEqual('fd72c010-6e62-4866-b999-6dcb718dd7b4',
                         routing['routing']['bottom_id'])
        self.assertEqual(pod_id1, routing['routing']['pod_id'])

        # failure case, only admin can update resource routing
        self.context.is_admin = False
        res = self.controller.put(id, **body_update1)
        self._validate_error_code(res, 403)

        self.context.is_admin = True

        # failure case, request body not found
        body_update2 = {
            'route': {
                'bottom_id': 'fd72c010-6e62-4866-b999-6dcb718dd7b4',
                'resource_type': 'port'
            }
        }
        res = self.controller.put(id, **body_update2)
        self._validate_error_code(res, 400)

        # failure case, wrong resource type
        body_update3 = {'routing': {'resource_type': 'volume'}}
        res = self.controller.put(id, **body_update3)
        self._validate_error_code(res, 400)

        # failure case, the value to be updated is empty
        body_update4 = {'routing': {'top_id': ''}}
        res = self.controller.put(id, **body_update4)
        self._validate_error_code(res, 400)

        # failure case, the value to be updated is None
        body_update5 = {'routing': {'top_id': None}}
        res = self.controller.put(id, **body_update5)
        self._validate_error_code(res, 400)

        # failure case, the value to be updated is not appropriate
        res = self.controller.put(-123, **body_update1)
        self._validate_error_code(res, 404)
Example #8
0
    def test_get_all(self, mock_context):
        mock_context.return_value = self.context

        # prepare the foreign key: pod_id
        kw_pod1 = {'pod': {'region_name': 'pod1', 'az_name': 'az1'}}
        pod_id1 = pod.PodsController().post(**kw_pod1)['pod']['pod_id']

        # a variable used for later test
        project_id = uuidutils.generate_uuid()

        kw_routing1 = {
            'routing': {
                'top_id': 'c7f641c9-8462-4007-84b2-3035d8cfb7a3',
                'bottom_id': 'dc80f9de-abb7-4ec6-ab7a-94f8fd1e20ef',
                'pod_id': pod_id1,
                'project_id': project_id,
                'resource_type': 'subnet'
            }
        }

        # prepare the foreign key: pod_id
        kw_pod2 = {'pod': {'region_name': 'pod2', 'az_name': 'az1'}}
        pod_id2 = pod.PodsController().post(**kw_pod2)['pod']['pod_id']

        kw_routing2 = {
            'routing': {
                'top_id': 'b669a2da-ca95-47db-a2a9-ba9e546d82ee',
                'bottom_id': 'fd72c010-6e62-4866-b999-6dcb718dd7b4',
                'pod_id': pod_id2,
                'project_id': project_id,
                'resource_type': 'port'
            }
        }

        self.controller.post(**kw_routing1)
        self.controller.post(**kw_routing2)

        # no filters are applied to the routings, so all of the routings will
        # be retrieved.
        routings = self.controller.get_all()
        actual = [(routing['top_id'], routing['pod_id'])
                  for routing in routings['routings']]
        expect = [('c7f641c9-8462-4007-84b2-3035d8cfb7a3', pod_id1),
                  ('b669a2da-ca95-47db-a2a9-ba9e546d82ee', pod_id2)]
        six.assertCountEqual(self, expect, actual)

        # apply a resource type filter to the retrieved routings.
        kw_filter1 = {'resource_type': 'port'}
        routings = self.controller.get_all(**kw_filter1)
        actual = [(routing['top_id'], routing['pod_id'],
                   routing['resource_type'])
                  for routing in routings['routings']]
        expect = [('b669a2da-ca95-47db-a2a9-ba9e546d82ee', pod_id2, 'port')]
        six.assertCountEqual(self, expect, actual)

        # apply a filter and if it doesn't match with any of the retrieved
        # routings, then all of them will be discarded and the method returns
        # with []
        kw_filter2 = {'resource_type': 'port2'}
        routings = self.controller.get_all(**kw_filter2)
        self.assertEqual([], routings['routings'])

        # apply an illegal filter and it won't take effect
        kw_filter3 = {'resource': 'port'}
        routings = self.controller.get_all(**kw_filter3)
        actual = [(routing['top_id'], routing['pod_id'])
                  for routing in routings['routings']]
        expect = [('c7f641c9-8462-4007-84b2-3035d8cfb7a3', pod_id1),
                  ('b669a2da-ca95-47db-a2a9-ba9e546d82ee', pod_id2)]
        six.assertCountEqual(self, expect, actual)

        # failure case, only admin can show all resource routings
        self.context.is_admin = False
        res = self.controller.get_all()
        self._validate_error_code(res, 403)

        self.context.is_admin = True
Example #9
0
 def setUp(self):
     core.initialize()
     core.ModelBase.metadata.create_all(core.get_engine())
     self.controller = pod.PodsController()
     self.context = context.get_admin_context()