def test_delete_region_with_endpoint(self):
        # create a region
        region = unit.new_region_ref()
        self.catalog_api.create_region(region)

        # create a child region
        child_region = unit.new_region_ref(parent_region_id=region['id'])
        self.catalog_api.create_region(child_region)
        # create a service
        service = unit.new_service_ref()
        self.catalog_api.create_service(service['id'], service)

        # create an endpoint attached to the service and child region
        child_endpoint = unit.new_endpoint_ref(region_id=child_region['id'],
                                               service_id=service['id'])

        self.catalog_api.create_endpoint(child_endpoint['id'], child_endpoint)
        self.assertRaises(exception.RegionDeletionError,
                          self.catalog_api.delete_region,
                          child_region['id'])

        # create an endpoint attached to the service and parent region
        endpoint = unit.new_endpoint_ref(region_id=region['id'],
                                         service_id=service['id'])

        self.catalog_api.create_endpoint(endpoint['id'], endpoint)
        self.assertRaises(exception.RegionDeletionError,
                          self.catalog_api.delete_region,
                          region['id'])
Exemple #2
0
    def test_region_crud(self):
        # create
        region_id = 'default'
        new_region = unit.new_region_ref(id=region_id)
        res = PROVIDERS.catalog_api.create_region(new_region)

        # Ensure that we don't need to have a
        # parent_region_id in the original supplied
        # ref dict, but that it will be returned from
        # the endpoint, with None value.
        expected_region = new_region.copy()
        expected_region['parent_region_id'] = None
        self.assertDictEqual(expected_region, res)

        # Test adding another region with the one above
        # as its parent. We will check below whether deleting
        # the parent successfully deletes any child regions.
        parent_region_id = region_id
        new_region = unit.new_region_ref(parent_region_id=parent_region_id)
        region_id = new_region['id']
        res = PROVIDERS.catalog_api.create_region(new_region)
        self.assertDictEqual(new_region, res)

        # list
        regions = PROVIDERS.catalog_api.list_regions()
        self.assertThat(regions, matchers.HasLength(2))
        region_ids = [x['id'] for x in regions]
        self.assertIn(parent_region_id, region_ids)
        self.assertIn(region_id, region_ids)

        # update
        region_desc_update = {'description': uuid.uuid4().hex}
        res = PROVIDERS.catalog_api.update_region(
            region_id, region_desc_update
        )
        expected_region = new_region.copy()
        expected_region['description'] = region_desc_update['description']
        self.assertDictEqual(expected_region, res)

        # delete
        PROVIDERS.catalog_api.delete_region(parent_region_id)
        self.assertRaises(exception.RegionNotFound,
                          PROVIDERS.catalog_api.delete_region,
                          parent_region_id)
        self.assertRaises(exception.RegionNotFound,
                          PROVIDERS.catalog_api.get_region,
                          parent_region_id)
        # Ensure the child is also gone...
        self.assertRaises(exception.RegionNotFound,
                          PROVIDERS.catalog_api.get_region,
                          region_id)
    def test_create_regions_with_same_description_string(self):
        """Call ``POST /regions`` with duplicate descriptions."""
        # NOTE(lbragstad): Make sure we can create two regions that have the
        # same description.
        region_desc = 'Some Region Description'

        ref1 = unit.new_region_ref(description=region_desc)
        ref2 = unit.new_region_ref(description=region_desc)

        resp1 = self.post('/regions', body={'region': ref1})
        self.assertValidRegionResponse(resp1, ref1)

        resp2 = self.post('/regions', body={'region': ref2})
        self.assertValidRegionResponse(resp2, ref2)
    def test_create_region_with_empty_id(self):
        """Call ``POST /regions`` with an empty ID in the request body."""
        ref = unit.new_region_ref(id='')

        r = self.post('/regions', body={'region': ref})
        self.assertValidRegionResponse(r, ref)
        self.assertNotEmpty(r.result['region'].get('id'))
Exemple #5
0
    def test_create_region_with_empty_id(self):
        """Call ``POST /regions`` with an empty ID in the request body."""
        ref = unit.new_region_ref(id="")

        r = self.post("/regions", body={"region": ref})
        self.assertValidRegionResponse(r, ref)
        self.assertNotEmpty(r.result["region"].get("id"))
Exemple #6
0
 def test_cache_layer_region_crud(self):
     new_region = unit.new_region_ref()
     region_id = new_region['id']
     PROVIDERS.catalog_api.create_region(new_region.copy())
     updated_region = copy.deepcopy(new_region)
     updated_region['description'] = uuid.uuid4().hex
     # cache the result
     PROVIDERS.catalog_api.get_region(region_id)
     # update the region bypassing catalog_api
     PROVIDERS.catalog_api.driver.update_region(region_id, updated_region)
     self.assertDictContainsSubset(
         new_region, PROVIDERS.catalog_api.get_region(region_id)
     )
     PROVIDERS.catalog_api.get_region.invalidate(
         PROVIDERS.catalog_api, region_id
     )
     self.assertDictContainsSubset(
         updated_region, PROVIDERS.catalog_api.get_region(region_id)
     )
     # delete the region
     PROVIDERS.catalog_api.driver.delete_region(region_id)
     # still get the old region
     self.assertDictContainsSubset(
         updated_region, PROVIDERS.catalog_api.get_region(region_id)
     )
     PROVIDERS.catalog_api.get_region.invalidate(
         PROVIDERS.catalog_api, region_id
     )
     self.assertRaises(exception.RegionNotFound,
                       PROVIDERS.catalog_api.get_region, region_id)
Exemple #7
0
    def test_create_region_with_conflicting_ids(self):
        """Call ``PUT /regions/{region_id}`` with conflicting region IDs."""
        # the region ref is created with an ID
        ref = unit.new_region_ref()

        # but instead of using that ID, make up a new, conflicting one
        self.put("/regions/%s" % uuid.uuid4().hex, body={"region": ref}, expected_status=http_client.BAD_REQUEST)
Exemple #8
0
    def test_delete_region(self):
        """Call ``DELETE /regions/{region_id}``."""
        ref = unit.new_region_ref()
        r = self.post("/regions", body={"region": ref})
        self.assertValidRegionResponse(r, ref)

        self.delete("/regions/%(region_id)s" % {"region_id": ref["id"]})
 def test_create_region_with_duplicate_id(self):
     new_region = unit.new_region_ref()
     self.catalog_api.create_region(new_region)
     # Create region again with duplicate id
     self.assertRaises(exception.Conflict,
                       self.catalog_api.create_region,
                       new_region)
    def _create_endpoints(self):
        # Creates a service and 2 endpoints for the service in the same region.
        # The 'public' interface is enabled and the 'internal' interface is
        # disabled.

        def create_endpoint(service_id, region, **kwargs):
            ref = unit.new_endpoint_ref(
                service_id=service_id,
                region_id=region,
                url='http://localhost/%s' % uuid.uuid4().hex,
                **kwargs)

            self.catalog_api.create_endpoint(ref['id'], ref)
            return ref

        # Create a service for use with the endpoints.
        service_ref = unit.new_service_ref()
        service_id = service_ref['id']
        self.catalog_api.create_service(service_id, service_ref)

        region = unit.new_region_ref()
        self.catalog_api.create_region(region)

        # Create endpoints
        enabled_endpoint_ref = create_endpoint(service_id, region['id'])
        disabled_endpoint_ref = create_endpoint(
            service_id, region['id'], enabled=False, interface='internal')

        return service_ref, enabled_endpoint_ref, disabled_endpoint_ref
    def test_create_region_invalid_id(self):
        region = unit.new_region_ref(id='0' * 256,
                                     description='',
                                     extra={})

        self.assertRaises(exception.StringLengthExceeded,
                          self.catalog_api.create_region,
                          region.copy())
 def test_update_region(self):
     """Call ``PATCH /regions/{region_id}``."""
     region = unit.new_region_ref()
     del region['id']
     r = self.patch('/regions/%(region_id)s' % {
         'region_id': self.region_id},
         body={'region': region})
     self.assertValidRegionResponse(r, region)
Exemple #13
0
 def test_assignment_created_with_region_exists(self):
     # test assignment can be created if role already exists.
     bootstrap = cli.BootStrap()
     bootstrap.resource_manager.create_domain(self.default_domain['id'],
                                              self.default_domain)
     region = unit.new_region_ref(id=self.region_id)
     bootstrap.catalog_manager.create_region(region)
     self._do_test_bootstrap(bootstrap)
Exemple #14
0
    def test_user_can_update_regions(self):
        region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())

        with self.test_client() as c:
            update = {'region': {'description': uuid.uuid4().hex}}
            c.patch(
                '/v3/regions/%s' % region['id'], json=update,
                headers=self.headers
            )
Exemple #15
0
    def test_user_cannot_delete_regions(self):
        region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())

        with self.test_client() as c:
            c.delete(
                '/v3/regions/%s' % region['id'],
                headers=self.headers,
                expected_status_code=http_client.FORBIDDEN
            )
 def test_region_duplicate_conflict_gives_name(self):
     region_ref = unit.new_region_ref()
     self.catalog_api.create_region(region_ref)
     try:
         self.catalog_api.create_region(region_ref)
     except exception.Conflict as e:
         self.assertIn("Duplicate ID, %s" % region_ref['id'], repr(e))
     else:
         self.fail("Create duplicate region did not raise a conflict")
Exemple #17
0
 def test_create_region_with_matching_ids(self):
     """Call ``PUT /regions/{region_id}`` with an ID in the request body."""
     ref = unit.new_region_ref()
     region_id = ref["id"]
     r = self.put("/regions/%s" % region_id, body={"region": ref}, expected_status=http_client.CREATED)
     self.assertValidRegionResponse(r, ref)
     # Double-check that the region ID was kept as-is and not
     # populated with a UUID, as is the case with POST /v3/regions
     self.assertEqual(region_id, r.json["region"]["id"])
Exemple #18
0
    def test_update_region_with_null_description(self):
        """Call ``PATCH /regions/{region_id}``."""
        region = unit.new_region_ref(description=None)
        del region["id"]
        r = self.patch("/regions/%(region_id)s" % {"region_id": self.region_id}, body={"region": region})

        # NOTE(dstanek): Keystone should turn the provided None value into
        # an empty string before storing in the backend.
        region["description"] = ""
        self.assertValidRegionResponse(r, region)
    def test_delete_region(self):
        """Call ``DELETE /regions/{region_id}``."""
        ref = unit.new_region_ref()
        r = self.post(
            '/regions',
            body={'region': ref})
        self.assertValidRegionResponse(r, ref)

        self.delete('/regions/%(region_id)s' % {
            'region_id': ref['id']})
Exemple #20
0
    def test_create_region(self):
        """Call ``POST /regions`` with an ID in the request body."""
        # the ref will have an ID defined on it
        ref = unit.new_region_ref()
        r = self.post("/regions", body={"region": ref})
        self.assertValidRegionResponse(r, ref)

        # we should be able to get the region, having defined the ID ourselves
        r = self.get("/regions/%(region_id)s" % {"region_id": ref["id"]})
        self.assertValidRegionResponse(r, ref)
    def test_create_region_without_id(self):
        """Call ``POST /regions`` without an ID in the request body."""
        ref = unit.new_region_ref()

        # instead of defining the ID ourselves...
        del ref['id']

        # let the service define the ID
        r = self.post('/regions', body={'region': ref})
        self.assertValidRegionResponse(r, ref)
Exemple #22
0
    def test_user_can_list_regions(self):
        expected_regions = []
        for _ in range(2):
            region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())
            expected_regions.append(region['id'])

        with self.test_client() as c:
            r = c.get('/v3/regions', headers=self.headers)
            for region in r.json['regions']:
                self.assertIn(region['id'], expected_regions)
    def load_sample_data(self):
        self._populate_default_domain()
        self.domain = unit.new_domain_ref()
        self.domain_id = self.domain['id']
        self.resource_api.create_domain(self.domain_id, self.domain)

        self.project = unit.new_project_ref(domain_id=self.domain_id)
        self.project_id = self.project['id']
        self.resource_api.create_project(self.project_id, self.project)

        self.user = unit.create_user(self.identity_api,
                                     domain_id=self.domain_id)
        self.user_id = self.user['id']

        self.default_domain_project_id = uuid.uuid4().hex
        self.default_domain_project = unit.new_project_ref(
            domain_id=DEFAULT_DOMAIN_ID)
        self.default_domain_project['id'] = self.default_domain_project_id
        self.resource_api.create_project(self.default_domain_project_id,
                                         self.default_domain_project)

        self.default_domain_user = unit.create_user(
            self.identity_api,
            domain_id=DEFAULT_DOMAIN_ID)
        self.default_domain_user_id = self.default_domain_user['id']

        # create & grant policy.json's default role for admin_required
        self.role = unit.new_role_ref(name='admin')
        self.role_id = self.role['id']
        self.role_api.create_role(self.role_id, self.role)
        self.assignment_api.add_role_to_user_and_project(
            self.user_id, self.project_id, self.role_id)
        self.assignment_api.add_role_to_user_and_project(
            self.default_domain_user_id, self.default_domain_project_id,
            self.role_id)
        self.assignment_api.add_role_to_user_and_project(
            self.default_domain_user_id, self.project_id,
            self.role_id)

        self.region = unit.new_region_ref()
        self.region_id = self.region['id']
        self.catalog_api.create_region(self.region)

        self.service = unit.new_service_ref()
        self.service_id = self.service['id']
        self.catalog_api.create_service(self.service_id, self.service.copy())

        self.endpoint = unit.new_endpoint_ref(service_id=self.service_id,
                                              interface='public',
                                              region_id=self.region_id)
        self.endpoint_id = self.endpoint['id']
        self.catalog_api.create_endpoint(self.endpoint_id,
                                         self.endpoint.copy())
        # The server adds 'enabled' and defaults to True.
        self.endpoint['enabled'] = True
 def test_create_region_with_duplicate_id(self):
     """Call ``PUT /regions/{region_id}``."""
     ref = unit.new_region_ref()
     region_id = ref['id']
     self.put(
         '/regions/%s' % region_id,
         body={'region': ref}, expected_status=http_client.CREATED)
     # Create region again with duplicate id
     self.put(
         '/regions/%s' % region_id,
         body={'region': ref}, expected_status=http_client.CONFLICT)
    def test_create_region_without_description(self):
        """Call ``POST /regions`` without description in the request body."""
        ref = unit.new_region_ref(description=None)

        del ref['description']

        r = self.post('/regions', body={'region': ref})
        # Create the description in the reference to compare to since the
        # response should now have a description, even though we didn't send
        # it with the original reference.
        ref['description'] = ''
        self.assertValidRegionResponse(r, ref)
 def setUp(self):
     super(EndpointPolicyTestCase, self).setUp()
     self.policy = unit.new_policy_ref()
     self.policy_api.create_policy(self.policy['id'], self.policy)
     self.service = unit.new_service_ref()
     self.catalog_api.create_service(self.service['id'], self.service)
     self.endpoint = unit.new_endpoint_ref(self.service['id'], enabled=True,
                                           interface='public',
                                           region_id=self.region_id)
     self.catalog_api.create_endpoint(self.endpoint['id'], self.endpoint)
     self.region = unit.new_region_ref()
     self.catalog_api.create_region(self.region)
    def test_create_regions_without_descriptions(self):
        """Call ``POST /regions`` with no description."""
        # NOTE(lbragstad): Make sure we can create two regions that have
        # no description in the request body. The description should be
        # populated by Catalog Manager.
        ref1 = unit.new_region_ref()
        ref2 = unit.new_region_ref()

        del ref1['description']
        ref2['description'] = None

        resp1 = self.post('/regions', body={'region': ref1})

        resp2 = self.post('/regions', body={'region': ref2})
        # Create the descriptions in the references to compare to since the
        # responses should now have descriptions, even though we didn't send
        # a description with the original references.
        ref1['description'] = ''
        ref2['description'] = ''
        self.assertValidRegionResponse(resp1, ref1)
        self.assertValidRegionResponse(resp2, ref2)
 def test_create_region_with_id(self):
     """Call ``PUT /regions/{region_id}`` w/o an ID in the request body."""
     ref = unit.new_region_ref()
     region_id = ref.pop('id')
     r = self.put(
         '/regions/%s' % region_id,
         body={'region': ref},
         expected_status=http_client.CREATED)
     self.assertValidRegionResponse(r, ref)
     # Double-check that the region ID was kept as-is and not
     # populated with a UUID, as is the case with POST /v3/regions
     self.assertEqual(region_id, r.json['region']['id'])
Exemple #29
0
    def test_user_can_delete_policy_association_for_region_and_service(self):
        policy = unit.new_policy_ref()
        policy = PROVIDERS.policy_api.create_policy(policy['id'], policy)
        service = PROVIDERS.catalog_api.create_service(uuid.uuid4().hex,
                                                       unit.new_service_ref())
        region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())

        with self.test_client() as c:
            c.delete(
                '/v3/policies/%s/OS-ENDPOINT-POLICY/services/%s/regions/%s' %
                (policy['id'], service['id'], region['id']),
                headers=self.headers,
                expected_status_code=http_client.NO_CONTENT)
Exemple #30
0
    def test_update_region_extras(self):
        new_region = unit.new_region_ref()
        region_id = new_region['id']
        PROVIDERS.catalog_api.create_region(new_region)

        email = '*****@*****.**'
        new_ref = {'description': uuid.uuid4().hex,
                   'email': email}
        PROVIDERS.catalog_api.update_region(region_id, new_ref)

        current_region = PROVIDERS.catalog_api.get_region(region_id)
        self.assertEqual(email,
                         current_region['email'])
Exemple #31
0
 def setUp(self):
     super(EndpointPolicyTestCase, self).setUp()
     self.policy = unit.new_policy_ref()
     self.policy_api.create_policy(self.policy['id'], self.policy)
     self.service = unit.new_service_ref()
     self.catalog_api.create_service(self.service['id'], self.service)
     self.endpoint = unit.new_endpoint_ref(self.service['id'],
                                           enabled=True,
                                           interface='public',
                                           region_id=self.region_id)
     self.catalog_api.create_endpoint(self.endpoint['id'], self.endpoint)
     self.region = unit.new_region_ref()
     self.catalog_api.create_region(self.region)
    def load_sample_data(self):
        """Create sample data to test policy associations.

        The following data is created:

        - 3 regions, in a hierarchy, 0 -> 1 -> 2 (where 0 is top)
        - 3 services
        - 6 endpoints, 2 in each region, with a mixture of services:
          0 - region 0, Service 0
          1 - region 0, Service 1
          2 - region 1, Service 1
          3 - region 1, Service 2
          4 - region 2, Service 2
          5 - region 2, Service 0

        """
        def new_endpoint(region_id, service_id):
            endpoint = unit.new_endpoint_ref(interface='test',
                                             region_id=region_id,
                                             service_id=service_id,
                                             url='/url')
            self.endpoint.append(PROVIDERS.catalog_api.create_endpoint(
                endpoint['id'], endpoint))

        self.policy = []
        self.endpoint = []
        self.service = []
        self.region = []

        parent_region_id = None
        for i in range(3):
            policy = unit.new_policy_ref()
            self.policy.append(
                PROVIDERS.policy_api.create_policy(policy['id'], policy)
            )

            service = unit.new_service_ref()
            self.service.append(
                PROVIDERS.catalog_api.create_service(service['id'], service)
            )
            region = unit.new_region_ref(parent_region_id=parent_region_id)
            # Link the regions together as a hierarchy, [0] at the top
            parent_region_id = region['id']
            self.region.append(PROVIDERS.catalog_api.create_region(region))

        new_endpoint(self.region[0]['id'], self.service[0]['id'])
        new_endpoint(self.region[0]['id'], self.service[1]['id'])
        new_endpoint(self.region[1]['id'], self.service[1]['id'])
        new_endpoint(self.region[1]['id'], self.service[2]['id'])
        new_endpoint(self.region[2]['id'], self.service[2]['id'])
        new_endpoint(self.region[2]['id'], self.service[0]['id'])
Exemple #33
0
    def load_sample_data(self):
        """Create sample data to test policy associations.

        The following data is created:

        - 3 regions, in a hierarchy, 0 -> 1 -> 2 (where 0 is top)
        - 3 services
        - 6 endpoints, 2 in each region, with a mixture of services:
          0 - region 0, Service 0
          1 - region 0, Service 1
          2 - region 1, Service 1
          3 - region 1, Service 2
          4 - region 2, Service 2
          5 - region 2, Service 0

        """
        def new_endpoint(region_id, service_id):
            endpoint = unit.new_endpoint_ref(interface='test',
                                             region_id=region_id,
                                             service_id=service_id,
                                             url='/url')
            self.endpoint.append(
                PROVIDERS.catalog_api.create_endpoint(endpoint['id'],
                                                      endpoint))

        self.policy = []
        self.endpoint = []
        self.service = []
        self.region = []

        parent_region_id = None
        for i in range(3):
            policy = unit.new_policy_ref()
            self.policy.append(
                PROVIDERS.policy_api.create_policy(policy['id'], policy))

            service = unit.new_service_ref()
            self.service.append(
                PROVIDERS.catalog_api.create_service(service['id'], service))
            region = unit.new_region_ref(parent_region_id=parent_region_id)
            # Link the regions together as a hierarchy, [0] at the top
            parent_region_id = region['id']
            self.region.append(PROVIDERS.catalog_api.create_region(region))

        new_endpoint(self.region[0]['id'], self.service[0]['id'])
        new_endpoint(self.region[0]['id'], self.service[1]['id'])
        new_endpoint(self.region[1]['id'], self.service[1]['id'])
        new_endpoint(self.region[1]['id'], self.service[2]['id'])
        new_endpoint(self.region[2]['id'], self.service[2]['id'])
        new_endpoint(self.region[2]['id'], self.service[0]['id'])
    def test_create_region(self):
        """Call ``POST /regions`` with an ID in the request body."""
        # the ref will have an ID defined on it
        ref = unit.new_region_ref()
        r = self.post(
            '/regions',
            body={'region': ref})
        self.assertValidRegionResponse(r, ref)

        # we should be able to get the region, having defined the ID ourselves
        r = self.get(
            '/regions/%(region_id)s' % {
                'region_id': ref['id']})
        self.assertValidRegionResponse(r, ref)
    def test_invalidate_cache_when_updating_region(self):
        new_region = unit.new_region_ref()
        region_id = new_region['id']
        self.catalog_api.create_region(new_region)

        # cache the region
        self.catalog_api.get_region(region_id)

        # update the region via catalog_api
        new_description = {'description': uuid.uuid4().hex}
        self.catalog_api.update_region(region_id, new_description)

        # assert that we can get the new region
        current_region = self.catalog_api.get_region(region_id)
        self.assertEqual(new_description['description'],
                         current_region['description'])
Exemple #36
0
    def test_update_region_without_description_keeps_original(self):
        """Call ``PATCH /regions/{region_id}``."""
        region_ref = unit.new_region_ref()

        resp = self.post('/regions', body={'region': region_ref})

        region_updates = {
            # update with something that's not the description
            'parent_region_id': self.region_id,
        }
        resp = self.patch('/regions/%s' % region_ref['id'],
                          body={'region': region_updates})

        # NOTE(dstanek): Keystone should keep the original description.
        self.assertEqual(region_ref['description'],
                         resp.result['region']['description'])
Exemple #37
0
    def test_get_catalog_returns_proper_endpoints_with_region(self):
        service = unit.new_service_ref()
        service_id = service['id']
        self.catalog_api.create_service(service_id, service)

        endpoint = unit.new_endpoint_ref(service_id=service_id)
        region = unit.new_region_ref(id=endpoint['region_id'])
        self.catalog_api.create_region(region)
        self.catalog_api.create_endpoint(endpoint['id'], endpoint)

        endpoint = self.catalog_api.get_endpoint(endpoint['id'])
        user_id = uuid.uuid4().hex
        tenant_id = uuid.uuid4().hex

        catalog = self.catalog_api.get_v3_catalog(user_id, tenant_id)
        self.assertValidCatalogEndpoint(catalog[0]['endpoints'][0],
                                        ref=endpoint)
Exemple #38
0
    def test_user_cannot_check_policy_association_for_region_and_service(self):
        policy = unit.new_policy_ref()
        policy = PROVIDERS.policy_api.create_policy(policy['id'], policy)

        service = PROVIDERS.catalog_api.create_service(uuid.uuid4().hex,
                                                       unit.new_service_ref())

        region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())

        PROVIDERS.endpoint_policy_api.create_policy_association(
            policy['id'], service_id=service['id'], region_id=region['id'])

        with self.test_client() as c:
            c.get('/v3/policies/%s/OS-ENDPOINT-POLICY/services/%s/regions/%s' %
                  (policy['id'], service['id'], region['id']),
                  headers=self.headers,
                  expected_status_code=http_client.FORBIDDEN)
Exemple #39
0
    def test_endpoints_created_with_endpoint_exists(self):
        # test assignment can be created if role already exists.
        bootstrap = cli.BootStrap()
        bootstrap.resource_manager.create_domain(self.default_domain['id'],
                                                 self.default_domain)
        service = unit.new_service_ref(name=self.service_name)
        bootstrap.catalog_manager.create_service(service['id'], service)

        region = unit.new_region_ref(id=self.region_id)
        bootstrap.catalog_manager.create_region(region)

        endpoint = unit.new_endpoint_ref(interface='public',
                                         service_id=service['id'],
                                         url=self.public_url,
                                         region_id=self.region_id)
        bootstrap.catalog_manager.create_endpoint(endpoint['id'], endpoint)

        self._do_test_bootstrap(bootstrap)
 def test_cache_layer_region_crud(self):
     new_region = unit.new_region_ref()
     region_id = new_region['id']
     self.catalog_api.create_region(new_region.copy())
     updated_region = copy.deepcopy(new_region)
     updated_region['description'] = uuid.uuid4().hex
     # cache the result
     self.catalog_api.get_region(region_id)
     # update the region bypassing catalog_api
     self.catalog_api.driver.update_region(region_id, updated_region)
     self.assertDictContainsSubset(new_region,
                                   self.catalog_api.get_region(region_id))
     self.catalog_api.get_region.invalidate(self.catalog_api, region_id)
     self.assertDictContainsSubset(updated_region,
                                   self.catalog_api.get_region(region_id))
     # delete the region
     self.catalog_api.driver.delete_region(region_id)
     # still get the old region
     self.assertDictContainsSubset(updated_region,
                                   self.catalog_api.get_region(region_id))
     self.catalog_api.get_region.invalidate(self.catalog_api, region_id)
     self.assertRaises(exception.RegionNotFound,
                       self.catalog_api.get_region, region_id)
    def test_get_catalog_returns_proper_endpoints_with_region(self):
        service = unit.new_service_ref()
        service_id = service['id']
        PROVIDERS.catalog_api.create_service(service_id, service)

        endpoint = unit.new_endpoint_ref(service_id=service_id)
        region = unit.new_region_ref(id=endpoint['region_id'])
        PROVIDERS.catalog_api.create_region(region)
        PROVIDERS.catalog_api.create_endpoint(endpoint['id'], endpoint)

        endpoint = PROVIDERS.catalog_api.get_endpoint(endpoint['id'])
        user_id = uuid.uuid4().hex
        # create a project since the project should exist if we want to
        # filter the catalog by the project or replace the url with a
        # valid project id.
        domain = unit.new_domain_ref()
        PROVIDERS.resource_api.create_domain(domain['id'], domain)
        project = unit.new_project_ref(domain_id=domain['id'])
        PROVIDERS.resource_api.create_project(project['id'], project)

        catalog = PROVIDERS.catalog_api.get_v3_catalog(user_id, project['id'])
        self.assertValidCatalogEndpoint(
            catalog[0]['endpoints'][0], ref=endpoint)
Exemple #42
0
    def test_user_can_get_a_region(self):
        region = PROVIDERS.catalog_api.create_region(unit.new_region_ref())

        with self.test_client() as c:
            c.get('/v3/regions/%s' % region['id'], headers=self.headers)
Exemple #43
0
    def test_create_region_invalid_parent_id(self):
        region = unit.new_region_ref(parent_region_id='0' * 256)

        self.assertRaises(exception.RegionNotFound,
                          self.catalog_api.create_region,
                          region)
Exemple #44
0
    def test_create_region_invalid_id(self):
        region = unit.new_region_ref(id='0' * 256)

        self.assertRaises(exception.StringLengthExceeded,
                          self.catalog_api.create_region,
                          region)
 def _create_region_with_parent_id(self, parent_id=None):
     new_region = unit.new_region_ref(parent_region_id=parent_id)
     self.catalog_api.create_region(new_region)
     return new_region
    def test_catalog_with_multi_region_reports_all_endpoints(self):

        # Create two separate regions
        first_region = self.post(
            '/regions',
            body={'region': unit.new_region_ref()}
        ).json_body['region']

        second_region = self.post(
            '/regions',
            body={'region': unit.new_region_ref()}
        ).json_body['region']

        # Create two services with the same type but separate name.
        first_service = self.post(
            '/services',
            body={'service': unit.new_service_ref(type='foobar')}
        ).json_body['service']

        second_service = self.post(
            '/services',
            body={'service': unit.new_service_ref(type='foobar')}
        ).json_body['service']

        # Create an endpoint for each service
        first_endpoint = self.post(
            '/endpoints',
            body={
                'endpoint': unit.new_endpoint_ref(
                    first_service['id'],
                    interface='public',
                    region_id=first_region['id']
                )
            }
        ).json_body['endpoint']

        second_endpoint = self.post(
            '/endpoints',
            body={
                'endpoint': unit.new_endpoint_ref(
                    second_service['id'],
                    interface='public',
                    region_id=second_region['id']
                )
            }
        ).json_body['endpoint']

        # Assert the endpoints and services from each region are in the
        # catalog.
        found_first_endpoint = False
        found_second_endpoint = False
        catalog = self.get('/auth/catalog/').json_body['catalog']
        for service in catalog:
            if service['id'] == first_service['id']:
                endpoint = service['endpoints'][0]
                self.assertEqual(endpoint['id'], first_endpoint['id'])
                self.assertEqual(endpoint['region_id'], first_region['id'])
                found_first_endpoint = True
            elif service['id'] == second_service['id']:
                endpoint = service['endpoints'][0]
                self.assertEqual(endpoint['id'], second_endpoint['id'])
                self.assertEqual(endpoint['region_id'], second_region['id'])
                found_second_endpoint = True

        self.assertTrue(found_first_endpoint)
        self.assertTrue(found_second_endpoint)
 def test_create_region_invalid_parent_region_returns_not_found(self):
     new_region = unit.new_region_ref(parent_region_id='nonexisting')
     self.assertRaises(exception.RegionNotFound,
                       self.catalog_api.create_region,
                       new_region)
Exemple #48
0
 def test_create_region_invalid_parent_region_returns_not_found(self):
     new_region = unit.new_region_ref(parent_region_id=uuid.uuid4().hex)
     self.assertRaises(exception.RegionNotFound,
                       PROVIDERS.catalog_api.create_region, new_region)
    def test_create_region_invalid_id(self):
        region = unit.new_region_ref(id='0' * 256, description='', extra={})

        self.assertRaises(exception.StringLengthExceeded,
                          self.catalog_api.create_region, region.copy())
Exemple #50
0
 def test_create_region_with_duplicate_id(self):
     new_region = unit.new_region_ref()
     self.catalog_api.create_region(new_region)
     # Create region again with duplicate id
     self.assertRaises(exception.Conflict, self.catalog_api.create_region,
                       new_region)
Exemple #51
0
 def _region_create(self):
     region = unit.new_region_ref()
     region_id = region['id']
     self.catalog_api.create_region(region)
     return region_id
Exemple #52
0
 def _create_region_with_parent_id(self, parent_id=None):
     ref = unit.new_region_ref(parent_region_id=parent_id)
     return self.post('/regions', body={'region': ref})