Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 1 | # Copyright 2016 Red Hat, Inc. |
| 2 | # |
| 3 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | # you may not use this file except in compliance with the License. |
| 5 | # You may obtain a copy of the License at |
| 6 | # |
| 7 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | # |
| 9 | # Unless required by applicable law or agreed to in writing, software |
| 10 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | # See the License for the specific language governing permissions and |
| 13 | # limitations under the License. |
| 14 | |
| 15 | from oslo_serialization import jsonutils as json |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 16 | from six.moves.urllib import parse as urllib |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 17 | |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 18 | from tempest.lib.common import rest_client |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 19 | |
| 20 | |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 21 | class RolesClient(rest_client.RestClient): |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 22 | api_version = "v3" |
| 23 | |
| 24 | def create_role(self, **kwargs): |
| 25 | """Create a Role. |
| 26 | |
OTSUKA, Yuanying | faac571 | 2016-09-15 13:53:55 +0900 | [diff] [blame] | 27 | For a full list of available parameters, please refer to the official |
| 28 | API reference: |
| 29 | http://developer.openstack.org/api-ref/identity/v3/index.html#create-role |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 30 | """ |
| 31 | post_body = json.dumps({'role': kwargs}) |
| 32 | resp, body = self.post('roles', post_body) |
| 33 | self.expected_success(201, resp.status) |
| 34 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 35 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 36 | |
| 37 | def show_role(self, role_id): |
| 38 | """GET a Role.""" |
guo yunxian | 6cdf056 | 2016-08-17 16:21:52 +0800 | [diff] [blame] | 39 | resp, body = self.get('roles/%s' % role_id) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 40 | self.expected_success(200, resp.status) |
| 41 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 42 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 43 | |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 44 | def list_roles(self, **params): |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 45 | """Get the list of Roles.""" |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 46 | |
| 47 | url = 'roles' |
| 48 | if params: |
| 49 | url += '?%s' % urllib.urlencode(params) |
| 50 | resp, body = self.get(url) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 51 | self.expected_success(200, resp.status) |
| 52 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 53 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 54 | |
| 55 | def update_role(self, role_id, **kwargs): |
| 56 | """Update a Role. |
| 57 | |
OTSUKA, Yuanying | faac571 | 2016-09-15 13:53:55 +0900 | [diff] [blame] | 58 | For a full list of available parameters, please refer to the official |
| 59 | API reference: |
| 60 | http://developer.openstack.org/api-ref/identity/v3/index.html#update-role |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 61 | """ |
| 62 | post_body = json.dumps({'role': kwargs}) |
guo yunxian | 6cdf056 | 2016-08-17 16:21:52 +0800 | [diff] [blame] | 63 | resp, body = self.patch('roles/%s' % role_id, post_body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 64 | self.expected_success(200, resp.status) |
| 65 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 66 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 67 | |
| 68 | def delete_role(self, role_id): |
| 69 | """Delete a role.""" |
guo yunxian | 6cdf056 | 2016-08-17 16:21:52 +0800 | [diff] [blame] | 70 | resp, body = self.delete('roles/%s' % role_id) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 71 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 72 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 73 | |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 74 | def create_user_role_on_project(self, project_id, user_id, role_id): |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 75 | """Add roles to a user on a project.""" |
| 76 | resp, body = self.put('projects/%s/users/%s/roles/%s' % |
| 77 | (project_id, user_id, role_id), None) |
| 78 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 79 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 80 | |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 81 | def create_user_role_on_domain(self, domain_id, user_id, role_id): |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 82 | """Add roles to a user on a domain.""" |
| 83 | resp, body = self.put('domains/%s/users/%s/roles/%s' % |
| 84 | (domain_id, user_id, role_id), None) |
| 85 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 86 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 87 | |
| 88 | def list_user_roles_on_project(self, project_id, user_id): |
| 89 | """list roles of a user on a project.""" |
| 90 | resp, body = self.get('projects/%s/users/%s/roles' % |
| 91 | (project_id, user_id)) |
| 92 | self.expected_success(200, resp.status) |
| 93 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 94 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 95 | |
| 96 | def list_user_roles_on_domain(self, domain_id, user_id): |
| 97 | """list roles of a user on a domain.""" |
| 98 | resp, body = self.get('domains/%s/users/%s/roles' % |
| 99 | (domain_id, user_id)) |
| 100 | self.expected_success(200, resp.status) |
| 101 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 102 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 103 | |
| 104 | def delete_role_from_user_on_project(self, project_id, user_id, role_id): |
| 105 | """Delete role of a user on a project.""" |
| 106 | resp, body = self.delete('projects/%s/users/%s/roles/%s' % |
| 107 | (project_id, user_id, role_id)) |
| 108 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 109 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 110 | |
| 111 | def delete_role_from_user_on_domain(self, domain_id, user_id, role_id): |
| 112 | """Delete role of a user on a domain.""" |
| 113 | resp, body = self.delete('domains/%s/users/%s/roles/%s' % |
| 114 | (domain_id, user_id, role_id)) |
| 115 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 116 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 117 | |
| 118 | def check_user_role_existence_on_project(self, project_id, |
| 119 | user_id, role_id): |
| 120 | """Check role of a user on a project.""" |
| 121 | resp, body = self.head('projects/%s/users/%s/roles/%s' % |
| 122 | (project_id, user_id, role_id)) |
| 123 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 124 | return rest_client.ResponseBody(resp) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 125 | |
| 126 | def check_user_role_existence_on_domain(self, domain_id, |
| 127 | user_id, role_id): |
| 128 | """Check role of a user on a domain.""" |
| 129 | resp, body = self.head('domains/%s/users/%s/roles/%s' % |
| 130 | (domain_id, user_id, role_id)) |
| 131 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 132 | return rest_client.ResponseBody(resp) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 133 | |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 134 | def create_group_role_on_project(self, project_id, group_id, role_id): |
| 135 | """Add roles to a group on a project.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 136 | resp, body = self.put('projects/%s/groups/%s/roles/%s' % |
| 137 | (project_id, group_id, role_id), None) |
| 138 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 139 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 140 | |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 141 | def create_group_role_on_domain(self, domain_id, group_id, role_id): |
| 142 | """Add roles to a group on a domain.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 143 | resp, body = self.put('domains/%s/groups/%s/roles/%s' % |
| 144 | (domain_id, group_id, role_id), None) |
| 145 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 146 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 147 | |
| 148 | def list_group_roles_on_project(self, project_id, group_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 149 | """list roles of a group on a project.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 150 | resp, body = self.get('projects/%s/groups/%s/roles' % |
| 151 | (project_id, group_id)) |
| 152 | self.expected_success(200, resp.status) |
| 153 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 154 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 155 | |
| 156 | def list_group_roles_on_domain(self, domain_id, group_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 157 | """list roles of a group on a domain.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 158 | resp, body = self.get('domains/%s/groups/%s/roles' % |
| 159 | (domain_id, group_id)) |
| 160 | self.expected_success(200, resp.status) |
| 161 | body = json.loads(body) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 162 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 163 | |
| 164 | def delete_role_from_group_on_project(self, project_id, group_id, role_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 165 | """Delete role of a group on a project.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 166 | resp, body = self.delete('projects/%s/groups/%s/roles/%s' % |
| 167 | (project_id, group_id, role_id)) |
| 168 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 169 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 170 | |
| 171 | def delete_role_from_group_on_domain(self, domain_id, group_id, role_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 172 | """Delete role of a group on a domain.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 173 | resp, body = self.delete('domains/%s/groups/%s/roles/%s' % |
| 174 | (domain_id, group_id, role_id)) |
| 175 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 176 | return rest_client.ResponseBody(resp, body) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 177 | |
| 178 | def check_role_from_group_on_project_existence(self, project_id, |
| 179 | group_id, role_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 180 | """Check role of a group on a project.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 181 | resp, body = self.head('projects/%s/groups/%s/roles/%s' % |
| 182 | (project_id, group_id, role_id)) |
| 183 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 184 | return rest_client.ResponseBody(resp) |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 185 | |
| 186 | def check_role_from_group_on_domain_existence(self, domain_id, |
| 187 | group_id, role_id): |
ghanshyam | 2e6fb56 | 2016-09-06 11:14:31 +0900 | [diff] [blame] | 188 | """Check role of a group on a domain.""" |
Arx Cruz | 24bcb88 | 2016-02-10 15:20:16 +0100 | [diff] [blame] | 189 | resp, body = self.head('domains/%s/groups/%s/roles/%s' % |
| 190 | (domain_id, group_id, role_id)) |
| 191 | self.expected_success(204, resp.status) |
Ken'ichi Ohmichi | d35a133 | 2016-03-02 10:38:07 -0800 | [diff] [blame] | 192 | return rest_client.ResponseBody(resp) |