impuls/lib/python3.11/site-packages/openstack/tests/unit/cloud/test_endpoints.py

383 lines
13 KiB
Python
Raw Normal View History

# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
test_cloud_endpoints
----------------------------------
Tests Keystone endpoints commands.
"""
import uuid
from testtools import matchers
from openstack.tests.unit import base
class TestCloudEndpoints(base.TestCase):
def get_mock_url(
self,
service_type='identity',
interface='public',
resource='endpoints',
append=None,
base_url_append='v3',
):
return super(TestCloudEndpoints, self).get_mock_url(
service_type, interface, resource, append, base_url_append
)
def _dummy_url(self):
return 'https://%s.example.com/' % uuid.uuid4().hex
def test_create_endpoint_v3(self):
service_data = self._get_service_data()
public_endpoint_data = self._get_endpoint_v3_data(
service_id=service_data.service_id,
interface='public',
url=self._dummy_url(),
)
public_endpoint_data_disabled = self._get_endpoint_v3_data(
service_id=service_data.service_id,
interface='public',
url=self._dummy_url(),
enabled=False,
)
admin_endpoint_data = self._get_endpoint_v3_data(
service_id=service_data.service_id,
interface='admin',
url=self._dummy_url(),
region=public_endpoint_data.region_id,
)
internal_endpoint_data = self._get_endpoint_v3_data(
service_id=service_data.service_id,
interface='internal',
url=self._dummy_url(),
region=public_endpoint_data.region_id,
)
self.register_uris(
[
dict(
method='GET',
uri=self.get_mock_url(resource='services'),
status_code=200,
json={
'services': [service_data.json_response_v3['service']]
},
),
dict(
method='POST',
uri=self.get_mock_url(),
status_code=200,
json=public_endpoint_data_disabled.json_response,
validate=dict(
json=public_endpoint_data_disabled.json_request
),
),
dict(
method='GET',
uri=self.get_mock_url(resource='services'),
status_code=200,
json={
'services': [service_data.json_response_v3['service']]
},
),
dict(
method='POST',
uri=self.get_mock_url(),
status_code=200,
json=public_endpoint_data.json_response,
validate=dict(json=public_endpoint_data.json_request),
),
dict(
method='POST',
uri=self.get_mock_url(),
status_code=200,
json=internal_endpoint_data.json_response,
validate=dict(json=internal_endpoint_data.json_request),
),
dict(
method='POST',
uri=self.get_mock_url(),
status_code=200,
json=admin_endpoint_data.json_response,
validate=dict(json=admin_endpoint_data.json_request),
),
]
)
endpoints = self.cloud.create_endpoint(
service_name_or_id=service_data.service_id,
region=public_endpoint_data_disabled.region_id,
url=public_endpoint_data_disabled.url,
interface=public_endpoint_data_disabled.interface,
enabled=False,
)
# Test endpoint values
self.assertThat(
endpoints[0].id,
matchers.Equals(public_endpoint_data_disabled.endpoint_id),
)
self.assertThat(
endpoints[0].url,
matchers.Equals(public_endpoint_data_disabled.url),
)
self.assertThat(
endpoints[0].interface,
matchers.Equals(public_endpoint_data_disabled.interface),
)
self.assertThat(
endpoints[0].region_id,
matchers.Equals(public_endpoint_data_disabled.region_id),
)
self.assertThat(
endpoints[0].region_id,
matchers.Equals(public_endpoint_data_disabled.region_id),
)
self.assertThat(
endpoints[0].is_enabled,
matchers.Equals(public_endpoint_data_disabled.enabled),
)
endpoints_2on3 = self.cloud.create_endpoint(
service_name_or_id=service_data.service_id,
region=public_endpoint_data.region_id,
public_url=public_endpoint_data.url,
internal_url=internal_endpoint_data.url,
admin_url=admin_endpoint_data.url,
)
# Three endpoints should be returned, public, internal, and admin
self.assertThat(len(endpoints_2on3), matchers.Equals(3))
# test keys and values are correct for each endpoint created
for result, reference in zip(
endpoints_2on3,
[
public_endpoint_data,
internal_endpoint_data,
admin_endpoint_data,
],
):
self.assertThat(result.id, matchers.Equals(reference.endpoint_id))
self.assertThat(result.url, matchers.Equals(reference.url))
self.assertThat(
result.interface, matchers.Equals(reference.interface)
)
self.assertThat(
result.region_id, matchers.Equals(reference.region_id)
)
self.assertThat(
result.is_enabled, matchers.Equals(reference.enabled)
)
self.assert_calls()
def test_update_endpoint_v3(self):
service_data = self._get_service_data()
dummy_url = self._dummy_url()
endpoint_data = self._get_endpoint_v3_data(
service_id=service_data.service_id,
interface='admin',
enabled=False,
)
reference_request = endpoint_data.json_request.copy()
reference_request['endpoint']['url'] = dummy_url
self.register_uris(
[
dict(
method='PATCH',
uri=self.get_mock_url(append=[endpoint_data.endpoint_id]),
status_code=200,
json=endpoint_data.json_response,
validate=dict(json=reference_request),
)
]
)
endpoint = self.cloud.update_endpoint(
endpoint_data.endpoint_id,
service_name_or_id=service_data.service_id,
region=endpoint_data.region_id,
url=dummy_url,
interface=endpoint_data.interface,
enabled=False,
)
# test keys and values are correct
self.assertThat(
endpoint.id, matchers.Equals(endpoint_data.endpoint_id)
)
self.assertThat(
endpoint.service_id, matchers.Equals(service_data.service_id)
)
self.assertThat(endpoint.url, matchers.Equals(endpoint_data.url))
self.assertThat(
endpoint.interface, matchers.Equals(endpoint_data.interface)
)
self.assert_calls()
def test_list_endpoints(self):
endpoints_data = [self._get_endpoint_v3_data() for e in range(1, 10)]
self.register_uris(
[
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [
e.json_response['endpoint'] for e in endpoints_data
]
},
)
]
)
endpoints = self.cloud.list_endpoints()
# test we are getting exactly len(self.mock_endpoints) elements
self.assertThat(len(endpoints), matchers.Equals(len(endpoints_data)))
# test keys and values are correct
for i, ep in enumerate(endpoints_data):
self.assertThat(endpoints[i].id, matchers.Equals(ep.endpoint_id))
self.assertThat(
endpoints[i].service_id, matchers.Equals(ep.service_id)
)
self.assertThat(endpoints[i].url, matchers.Equals(ep.url))
self.assertThat(
endpoints[i].interface, matchers.Equals(ep.interface)
)
self.assert_calls()
def test_search_endpoints(self):
endpoints_data = [
self._get_endpoint_v3_data(region='region1') for e in range(0, 2)
]
endpoints_data.extend(
[self._get_endpoint_v3_data() for e in range(1, 8)]
)
self.register_uris(
[
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [
e.json_response['endpoint'] for e in endpoints_data
]
},
),
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [
e.json_response['endpoint'] for e in endpoints_data
]
},
),
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [
e.json_response['endpoint'] for e in endpoints_data
]
},
),
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [
e.json_response['endpoint'] for e in endpoints_data
]
},
),
]
)
# Search by id
endpoints = self.cloud.search_endpoints(
id=endpoints_data[-1].endpoint_id
)
# # test we are getting exactly 1 element
self.assertEqual(1, len(endpoints))
self.assertThat(
endpoints[0].id, matchers.Equals(endpoints_data[-1].endpoint_id)
)
self.assertThat(
endpoints[0].service_id,
matchers.Equals(endpoints_data[-1].service_id),
)
self.assertThat(
endpoints[0].url, matchers.Equals(endpoints_data[-1].url)
)
self.assertThat(
endpoints[0].interface,
matchers.Equals(endpoints_data[-1].interface),
)
# Not found
endpoints = self.cloud.search_endpoints(id='!invalid!')
self.assertEqual(0, len(endpoints))
# Multiple matches
endpoints = self.cloud.search_endpoints(
filters={'region_id': 'region1'}
)
# # test we are getting exactly 2 elements
self.assertEqual(2, len(endpoints))
# test we are getting the correct response for region/region_id compat
endpoints = self.cloud.search_endpoints(
filters={'region_id': 'region1'}
)
# # test we are getting exactly 2 elements, this is v3
self.assertEqual(2, len(endpoints))
self.assert_calls()
def test_delete_endpoint(self):
endpoint_data = self._get_endpoint_v3_data()
self.register_uris(
[
dict(
method='GET',
uri=self.get_mock_url(),
status_code=200,
json={
'endpoints': [endpoint_data.json_response['endpoint']]
},
),
dict(
method='DELETE',
uri=self.get_mock_url(append=[endpoint_data.endpoint_id]),
status_code=204,
),
]
)
# Delete by id
self.cloud.delete_endpoint(id=endpoint_data.endpoint_id)
self.assert_calls()