Add missing keystone clients
For completeness, add tempest clients for keystone's OS-ENDPOINT-POLICY and OS-EP-FILTER APIs. These are rarely-used APIs, so not adding API tests at this time. Change-Id: Ia592d8d3b629af68a963f5050b29de5478bface1 Needed-by: https://review.opendev.org/686305
This commit is contained in:
parent
00041e686f
commit
4599b91fe2
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added missing client methods for keystone's OS-ENDPOINT-POLICY and
|
||||||
|
OS-EP-FILTER APIs.
|
@ -66,3 +66,57 @@ class EndPointsFilterClient(rest_client.RestClient):
|
|||||||
% (project_id, endpoint_id))
|
% (project_id, endpoint_id))
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def list_endpoint_groups_for_project(self, project_id):
|
||||||
|
"""List Endpoint Groups Associated with Project."""
|
||||||
|
resp, body = self.get(
|
||||||
|
self.ep_filter + '/projects/%s/endpoint_groups'
|
||||||
|
% project_id)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def list_projects_for_endpoint_group(self, endpoint_group_id):
|
||||||
|
"""List Projects Associated with Endpoint Group."""
|
||||||
|
resp, body = self.get(
|
||||||
|
self.ep_filter + '/endpoint_groups/%s/projects'
|
||||||
|
% endpoint_group_id)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def list_endpoints_for_endpoint_group(self, endpoint_group_id):
|
||||||
|
"""List Endpoints Associated with Endpoint Group."""
|
||||||
|
resp, body = self.get(
|
||||||
|
self.ep_filter + '/endpoint_groups/%s/endpoints'
|
||||||
|
% endpoint_group_id)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def add_endpoint_group_to_project(self, endpoint_group_id, project_id):
|
||||||
|
"""Create Endpoint Group to Project Association."""
|
||||||
|
body = None
|
||||||
|
resp, body = self.put(
|
||||||
|
self.ep_filter + '/endpoint_groups/%s/projects/%s'
|
||||||
|
% (endpoint_group_id, project_id), body)
|
||||||
|
self.expected_success(204, resp.status)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def show_endpoint_group_for_project(self, endpoint_group_id, project_id):
|
||||||
|
"""Get Endpoint Group to Project Association."""
|
||||||
|
resp, body = self.get(
|
||||||
|
self.ep_filter + '/endpoint_groups/%s/projects/%s'
|
||||||
|
% (endpoint_group_id, project_id))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def delete_endpoint_group_from_project(
|
||||||
|
self, endpoint_group_id, project_id):
|
||||||
|
"""Delete Endpoint Group to Project Association."""
|
||||||
|
resp, body = self.delete(
|
||||||
|
self.ep_filter + '/endpoint_groups/%s/projects/%s'
|
||||||
|
% (endpoint_group_id, project_id))
|
||||||
|
self.expected_success(204, resp.status)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
@ -185,3 +185,27 @@ class PoliciesClient(rest_client.RestClient):
|
|||||||
resp, body = self.delete(url)
|
resp, body = self.delete(url)
|
||||||
self.expected_success(204, resp.status)
|
self.expected_success(204, resp.status)
|
||||||
return rest_client.ResponseBody(resp, body)
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def list_endpoints_for_policy(self, policy_id):
|
||||||
|
"""List policy and service endpoint associations.
|
||||||
|
|
||||||
|
API reference:
|
||||||
|
https://docs.openstack.org/api-ref/identity/v3-ext/#list-policy-and-service-endpoint-associations
|
||||||
|
"""
|
||||||
|
url = "policies/{0}/OS-ENDPOINT-POLICY/endpoints".format(policy_id)
|
||||||
|
resp, body = self.get(url)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
|
||||||
|
def show_policy_for_endpoint(self, endpoint_id):
|
||||||
|
"""Show the effective policy associated with an endpoint
|
||||||
|
|
||||||
|
API reference:
|
||||||
|
https://docs.openstack.org/api-ref/identity/v3-ext/#show-the-effective-policy-associated-with-an-endpoint
|
||||||
|
"""
|
||||||
|
url = "endpoints/{0}/OS-ENDPOINT-POLICY/policy".format(endpoint_id)
|
||||||
|
resp, body = self.get(url)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
body = json.loads(body)
|
||||||
|
return rest_client.ResponseBody(resp, body)
|
||||||
|
@ -83,6 +83,36 @@ class TestEndPointsFilterClient(base.BaseServiceTest):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FAKE_LIST_ENDPOINT_GROUPS_FOR_PROJECT = {
|
||||||
|
"endpoint_groups": [
|
||||||
|
{
|
||||||
|
"endpoint_group": {
|
||||||
|
"description": "endpoint group description #2",
|
||||||
|
"filters": {
|
||||||
|
"interface": "admin"
|
||||||
|
},
|
||||||
|
"id": "3de68c",
|
||||||
|
"name": "endpoint group name #2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": {
|
||||||
|
"self": "https://url/identity/v3/OS-EP-FILTER/endpoint_groups",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FAKE_PROJECT_INFO = {
|
||||||
|
"project": {
|
||||||
|
"domain_id": "1789d1",
|
||||||
|
"id": "263fd9",
|
||||||
|
"links": {
|
||||||
|
"self": "http://example.com/identity/v3/projects/263fd9"
|
||||||
|
},
|
||||||
|
"name": "project name #1",
|
||||||
|
"description": "project description #1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestEndPointsFilterClient, self).setUp()
|
super(TestEndPointsFilterClient, self).setUp()
|
||||||
fake_auth = fake_auth_provider.FakeAuthProvider()
|
fake_auth = fake_auth_provider.FakeAuthProvider()
|
||||||
@ -137,6 +167,52 @@ class TestEndPointsFilterClient(base.BaseServiceTest):
|
|||||||
project_id=3,
|
project_id=3,
|
||||||
endpoint_id=4)
|
endpoint_id=4)
|
||||||
|
|
||||||
|
def _test_list_endpoint_groups_for_project(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.list_endpoint_groups_for_project,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_LIST_ENDPOINT_GROUPS_FOR_PROJECT,
|
||||||
|
bytes_body,
|
||||||
|
status=200,
|
||||||
|
project_id=3)
|
||||||
|
|
||||||
|
def _test_list_projects_for_endpoint_group(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.list_projects_for_endpoint_group,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_LIST_PROJECTS_FOR_ENDPOINTS,
|
||||||
|
bytes_body,
|
||||||
|
status=200,
|
||||||
|
endpoint_group_id=5)
|
||||||
|
|
||||||
|
def _test_list_endpoints_for_endpoint_group(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.list_endpoints_for_endpoint_group,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_LIST_ENDPOINTS_FOR_PROJECTS,
|
||||||
|
bytes_body,
|
||||||
|
status=200,
|
||||||
|
endpoint_group_id=5)
|
||||||
|
|
||||||
|
def _test_add_endpoint_group_to_project(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.add_endpoint_group_to_project,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.put',
|
||||||
|
{},
|
||||||
|
bytes_body,
|
||||||
|
status=204,
|
||||||
|
endpoint_group_id=5,
|
||||||
|
project_id=6)
|
||||||
|
|
||||||
|
def _test_show_endpoint_group_for_project(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.show_endpoint_group_for_project,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_PROJECT_INFO,
|
||||||
|
bytes_body,
|
||||||
|
endpoint_group_id=5,
|
||||||
|
project_id=6)
|
||||||
|
|
||||||
def test_add_endpoint_to_project_with_str_body(self):
|
def test_add_endpoint_to_project_with_str_body(self):
|
||||||
self._test_add_endpoint_to_project()
|
self._test_add_endpoint_to_project()
|
||||||
|
|
||||||
@ -163,3 +239,43 @@ class TestEndPointsFilterClient(base.BaseServiceTest):
|
|||||||
|
|
||||||
def test_delete_endpoint_from_project(self):
|
def test_delete_endpoint_from_project(self):
|
||||||
self._test_delete_endpoint_from_project()
|
self._test_delete_endpoint_from_project()
|
||||||
|
|
||||||
|
def test_list_endpoint_groups_for_project_with_str_body(self):
|
||||||
|
self._test_list_endpoint_groups_for_project()
|
||||||
|
|
||||||
|
def test_list_endpoint_groups_for_project_with_bytes_body(self):
|
||||||
|
self._test_list_endpoint_groups_for_project(bytes_body=True)
|
||||||
|
|
||||||
|
def test_list_projects_for_endpoint_group_with_str_body(self):
|
||||||
|
self._test_list_projects_for_endpoint_group()
|
||||||
|
|
||||||
|
def test_list_projects_for_endpoint_group_with_bytes_body(self):
|
||||||
|
self._test_list_projects_for_endpoint_group(bytes_body=True)
|
||||||
|
|
||||||
|
def test_list_endpoints_for_endpoint_group_with_str_body(self):
|
||||||
|
self._test_list_endpoints_for_endpoint_group()
|
||||||
|
|
||||||
|
def test_list_endpoints_for_endpoint_group_with_bytes_body(self):
|
||||||
|
self._test_list_endpoints_for_endpoint_group(bytes_body=True)
|
||||||
|
|
||||||
|
def test_add_endpoint_group_to_project_with_str_body(self):
|
||||||
|
self._test_add_endpoint_group_to_project()
|
||||||
|
|
||||||
|
def test_add_endpoint_group_to_project_with_bytes_body(self):
|
||||||
|
self._test_add_endpoint_group_to_project(bytes_body=True)
|
||||||
|
|
||||||
|
def test_show_endpoint_group_for_project_with_str_body(self):
|
||||||
|
self._test_show_endpoint_group_for_project()
|
||||||
|
|
||||||
|
def test_show_endpoint_group_for_project_with_bytes_body(self):
|
||||||
|
self._test_show_endpoint_group_for_project(bytes_body=True)
|
||||||
|
|
||||||
|
def test_delete_endpoint_group_from_project(self):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.delete_endpoint_group_from_project,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.delete',
|
||||||
|
{},
|
||||||
|
False,
|
||||||
|
status=204,
|
||||||
|
endpoint_group_id=5,
|
||||||
|
project_id=5)
|
||||||
|
@ -44,6 +44,34 @@ class TestPoliciesClient(base.BaseServiceTest):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FAKE_ENDPOINT_INFO = {
|
||||||
|
"endpoints": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"interface": "public",
|
||||||
|
"links": {
|
||||||
|
"self": "http://example.com/identity/v3/endpoints/1"
|
||||||
|
},
|
||||||
|
"region": "north",
|
||||||
|
"service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
|
||||||
|
"url": "http://example.com/identity/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"interface": "internal",
|
||||||
|
"links": {
|
||||||
|
"self": "http://example.com/identity/v3/endpoints/1"
|
||||||
|
},
|
||||||
|
"region": "south",
|
||||||
|
"service_id": "9242e05f0c23467bbd1cf1f7a6e5e596",
|
||||||
|
"url": "http://example.com/identity/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": {
|
||||||
|
"self": "http://exmp.com/identity/v3/OS-ENDPOINT-POLICY/policies/1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FAKE_LIST_POLICIES = {
|
FAKE_LIST_POLICIES = {
|
||||||
"links": {
|
"links": {
|
||||||
"next": None,
|
"next": None,
|
||||||
@ -238,3 +266,33 @@ class TestPoliciesClient(base.BaseServiceTest):
|
|||||||
service_id=self.FAKE_SERVICE_ID,
|
service_id=self.FAKE_SERVICE_ID,
|
||||||
region_id=self.FAKE_REGION_ID,
|
region_id=self.FAKE_REGION_ID,
|
||||||
status=204)
|
status=204)
|
||||||
|
|
||||||
|
def _test_list_endpoints_for_policy(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.list_endpoints_for_policy,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_ENDPOINT_INFO,
|
||||||
|
bytes_body,
|
||||||
|
policy_id=self.FAKE_POLICY_ID,
|
||||||
|
status=200)
|
||||||
|
|
||||||
|
def test_list_endpoints_for_policy_with_str_body(self):
|
||||||
|
self._test_list_endpoints_for_policy()
|
||||||
|
|
||||||
|
def test_list_endpoints_for_policy_with_bytes_body(self):
|
||||||
|
self._test_list_endpoints_for_policy(bytes_body=True)
|
||||||
|
|
||||||
|
def _test_list_policy_for_endpoint(self, bytes_body=False):
|
||||||
|
self.check_service_client_function(
|
||||||
|
self.client.show_policy_for_endpoint,
|
||||||
|
'tempest.lib.common.rest_client.RestClient.get',
|
||||||
|
self.FAKE_POLICY_INFO,
|
||||||
|
bytes_body,
|
||||||
|
endpoint_id=self.FAKE_ENDPOINT_ID,
|
||||||
|
status=200)
|
||||||
|
|
||||||
|
def test_list_policy_for_endpoint_with_str_body(self):
|
||||||
|
self._test_list_policy_for_endpoint()
|
||||||
|
|
||||||
|
def test_list_policy_for_endpoint_with_bytes_body(self):
|
||||||
|
self._test_list_policy_for_endpoint(bytes_body=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user