Skip to content

Commit 415f680

Browse files
agaetepstephenfin
authored andcommitted
identity: Migrate 'access rule' commands to SDK
Change-Id: Id5740cc61474650f22f9efe8d148c8c666c3b91e
1 parent bbe0423 commit 415f680

4 files changed

Lines changed: 103 additions & 82 deletions

File tree

openstackclient/identity/v3/access_rule.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ def get_parser(self, prog_name):
4242
return parser
4343

4444
def take_action(self, parsed_args):
45-
identity_client = self.app.client_manager.identity
45+
identity_client = self.app.client_manager.sdk_connection.identity
46+
conn = self.app.client_manager.sdk_connection
47+
user_id = conn.config.get_auth().get_user_id(conn.identity)
4648

4749
errors = 0
4850
for ac in parsed_args.access_rule:
4951
try:
50-
access_rule = common.get_resource_by_id(
51-
identity_client.access_rules, ac
52-
)
53-
identity_client.access_rules.delete(access_rule.id)
52+
access_rule = identity_client.get_access_rule(user_id, ac)
53+
identity_client.delete_access_rule(user_id, access_rule.id)
5454
except Exception as e:
5555
errors += 1
5656
LOG.error(
@@ -83,16 +83,17 @@ def get_parser(self, prog_name):
8383
return parser
8484

8585
def take_action(self, parsed_args):
86-
identity_client = self.app.client_manager.identity
86+
identity_client = self.app.client_manager.sdk_connection.identity
8787
if parsed_args.user:
8888
user_id = common.find_user(
8989
identity_client, parsed_args.user, parsed_args.user_domain
9090
).id
9191
else:
92-
user_id = None
92+
conn = self.app.client_manager.sdk_connection
93+
user_id = conn.config.get_auth().get_user_id(conn.identity)
9394

9495
columns = ('ID', 'Service', 'Method', 'Path')
95-
data = identity_client.access_rules.list(user=user_id)
96+
data = identity_client.access_rules(user=user_id)
9697
return (
9798
columns,
9899
(
@@ -119,11 +120,22 @@ def get_parser(self, prog_name):
119120
return parser
120121

121122
def take_action(self, parsed_args):
122-
identity_client = self.app.client_manager.identity
123-
access_rule = common.get_resource_by_id(
124-
identity_client.access_rules, parsed_args.access_rule
125-
)
123+
identity_client = self.app.client_manager.sdk_connection.identity
124+
conn = self.app.client_manager.sdk_connection
125+
user_id = conn.config.get_auth().get_user_id(conn.identity)
126126

127-
access_rule._info.pop('links', None)
127+
access_rule = identity_client.get_access_rule(
128+
user_id, parsed_args.access_rule
129+
)
128130

129-
return zip(*sorted(access_rule._info.items()))
131+
columns = ('ID', 'Method', 'Path', 'Service')
132+
return (
133+
columns,
134+
(
135+
utils.get_item_properties(
136+
access_rule,
137+
columns,
138+
formatters={},
139+
)
140+
),
141+
)

openstackclient/tests/functional/identity/v3/test_access_rule.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020

2121
class AccessRuleTests(common.IdentityTests):
2222
ACCESS_RULE_FIELDS = [
23-
'id',
24-
'service',
25-
'method',
26-
'path',
23+
'ID',
24+
'Service',
25+
'Method',
26+
'Path',
2727
]
2828
ACCESS_RULE_LIST_HEADERS = [
2929
'ID',

openstackclient/tests/unit/identity/v3/test_access_rule.py

Lines changed: 65 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -13,72 +13,66 @@
1313
# under the License.
1414
#
1515

16-
import copy
16+
from unittest.mock import call
1717

18-
from keystoneclient import exceptions as identity_exc
18+
from openstack import exceptions as sdk_exceptions
19+
from openstack.identity.v3 import access_rule as _access_rule
20+
from openstack.test import fakes as sdk_fakes
1921
from osc_lib import exceptions
2022

2123
from openstackclient.identity.v3 import access_rule
22-
from openstackclient.tests.unit import fakes
2324
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
2425

2526

26-
class TestAccessRule(identity_fakes.TestIdentityv3):
27-
def setUp(self):
28-
super().setUp()
29-
30-
identity_manager = self.identity_client
31-
self.access_rules_mock = identity_manager.access_rules
32-
self.access_rules_mock.reset_mock()
33-
self.roles_mock = identity_manager.roles
34-
self.roles_mock.reset_mock()
27+
class TestAccessRuleDelete(identity_fakes.TestIdentityv3):
28+
access_rule = sdk_fakes.generate_fake_resource(_access_rule.AccessRule)
3529

36-
37-
class TestAccessRuleDelete(TestAccessRule):
3830
def setUp(self):
3931
super().setUp()
4032

41-
# This is the return value for utils.find_resource()
42-
self.access_rules_mock.get.return_value = fakes.FakeResource(
43-
None,
44-
copy.deepcopy(identity_fakes.ACCESS_RULE),
45-
loaded=True,
33+
self.identity_sdk_client.get_access_rule.return_value = (
34+
self.access_rule
4635
)
47-
self.access_rules_mock.delete.return_value = None
36+
self.identity_sdk_client.delete_access_rule.return_value = None
4837

4938
# Get the command object to test
5039
self.cmd = access_rule.DeleteAccessRule(self.app, None)
5140

5241
def test_access_rule_delete(self):
53-
arglist = [
54-
identity_fakes.access_rule_id,
55-
]
56-
verifylist = [('access_rule', [identity_fakes.access_rule_id])]
42+
arglist = [self.access_rule.id]
43+
verifylist = [('access_rule', [self.access_rule.id])]
5744
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5845

46+
conn = self.app.client_manager.sdk_connection
47+
user_id = conn.config.get_auth().get_user_id(conn.identity)
48+
5949
result = self.cmd.take_action(parsed_args)
6050

61-
self.access_rules_mock.delete.assert_called_with(
62-
identity_fakes.access_rule_id,
51+
self.identity_sdk_client.delete_access_rule.assert_called_with(
52+
user_id,
53+
self.access_rule.id,
6354
)
6455
self.assertIsNone(result)
6556

6657
def test_delete_multi_access_rules_with_exception(self):
67-
# mock returns for common.get_resource_by_id
68-
mock_get = self.access_rules_mock.get
69-
mock_get.side_effect = [
70-
mock_get.return_value,
71-
identity_exc.NotFound,
58+
self.identity_sdk_client.get_access_rule.side_effect = [
59+
self.access_rule,
60+
sdk_exceptions.NotFoundException,
7261
]
62+
7363
arglist = [
74-
identity_fakes.access_rule_id,
64+
self.access_rule.id,
7565
'nonexistent_access_rule',
7666
]
7767
verifylist = [
7868
('access_rule', arglist),
7969
]
70+
8071
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
8172

73+
conn = self.app.client_manager.sdk_connection
74+
user_id = conn.config.get_auth().get_user_id(conn.identity)
75+
8276
try:
8377
self.cmd.take_action(parsed_args)
8478
self.fail('CommandError should be raised.')
@@ -87,26 +81,27 @@ def test_delete_multi_access_rules_with_exception(self):
8781
'1 of 2 access rules failed to' ' delete.', str(e)
8882
)
8983

90-
mock_get.assert_any_call(identity_fakes.access_rule_id)
91-
mock_get.assert_any_call('nonexistent_access_rule')
84+
calls = []
85+
for a in arglist:
86+
calls.append(call(user_id, a))
87+
88+
self.identity_sdk_client.get_access_rule.assert_has_calls(calls)
9289

93-
self.assertEqual(2, mock_get.call_count)
94-
self.access_rules_mock.delete.assert_called_once_with(
95-
identity_fakes.access_rule_id
90+
self.assertEqual(
91+
2, self.identity_sdk_client.get_access_rule.call_count
92+
)
93+
self.identity_sdk_client.delete_access_rule.assert_called_once_with(
94+
user_id, self.access_rule.id
9695
)
9796

9897

99-
class TestAccessRuleList(TestAccessRule):
98+
class TestAccessRuleList(identity_fakes.TestIdentityv3):
99+
access_rule = sdk_fakes.generate_fake_resource(_access_rule.AccessRule)
100+
100101
def setUp(self):
101102
super().setUp()
102103

103-
self.access_rules_mock.list.return_value = [
104-
fakes.FakeResource(
105-
None,
106-
copy.deepcopy(identity_fakes.ACCESS_RULE),
107-
loaded=True,
108-
),
109-
]
104+
self.identity_sdk_client.access_rules.return_value = [self.access_rule]
110105

111106
# Get the command object to test
112107
self.cmd = access_rule.ListAccessRule(self.app, None)
@@ -116,57 +111,63 @@ def test_access_rule_list(self):
116111
verifylist = []
117112
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
118113

114+
conn = self.app.client_manager.sdk_connection
115+
user_id = conn.config.get_auth().get_user_id(conn.identity)
116+
119117
columns, data = self.cmd.take_action(parsed_args)
120118

121-
self.access_rules_mock.list.assert_called_with(user=None)
119+
self.identity_sdk_client.access_rules.assert_called_with(user=user_id)
122120

123121
collist = ('ID', 'Service', 'Method', 'Path')
124122
self.assertEqual(collist, columns)
125123
datalist = (
126124
(
127-
identity_fakes.access_rule_id,
128-
identity_fakes.access_rule_service,
129-
identity_fakes.access_rule_method,
130-
identity_fakes.access_rule_path,
125+
self.access_rule.id,
126+
self.access_rule.service,
127+
self.access_rule.method,
128+
self.access_rule.path,
131129
),
132130
)
133131
self.assertEqual(datalist, tuple(data))
134132

135133

136-
class TestAccessRuleShow(TestAccessRule):
134+
class TestAccessRuleShow(identity_fakes.TestIdentityv3):
135+
access_rule = sdk_fakes.generate_fake_resource(_access_rule.AccessRule)
136+
137137
def setUp(self):
138138
super().setUp()
139139

140-
self.access_rules_mock.get.return_value = fakes.FakeResource(
141-
None,
142-
copy.deepcopy(identity_fakes.ACCESS_RULE),
143-
loaded=True,
140+
self.identity_sdk_client.get_access_rule.return_value = (
141+
self.access_rule
144142
)
145143

146144
# Get the command object to test
147145
self.cmd = access_rule.ShowAccessRule(self.app, None)
148146

149147
def test_access_rule_show(self):
150148
arglist = [
151-
identity_fakes.access_rule_id,
149+
self.access_rule.id,
152150
]
153151
verifylist = [
154-
('access_rule', identity_fakes.access_rule_id),
152+
('access_rule', self.access_rule.id),
155153
]
156154
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
157155

156+
conn = self.app.client_manager.sdk_connection
157+
user_id = conn.config.get_auth().get_user_id(conn.identity)
158+
158159
columns, data = self.cmd.take_action(parsed_args)
159160

160-
self.access_rules_mock.get.assert_called_with(
161-
identity_fakes.access_rule_id
161+
self.identity_sdk_client.get_access_rule.assert_called_with(
162+
user_id, self.access_rule.id
162163
)
163164

164-
collist = ('id', 'method', 'path', 'service')
165+
collist = ('ID', 'Method', 'Path', 'Service')
165166
self.assertEqual(collist, columns)
166167
datalist = (
167-
identity_fakes.access_rule_id,
168-
identity_fakes.access_rule_method,
169-
identity_fakes.access_rule_path,
170-
identity_fakes.access_rule_service,
168+
self.access_rule.id,
169+
self.access_rule.method,
170+
self.access_rule.path,
171+
self.access_rule.service,
171172
)
172173
self.assertEqual(datalist, data)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
upgrade:
3+
- |
4+
The following commands have been migrated to SDK:
5+
6+
- ``access rule list``
7+
- ``access rule delete``
8+
- ``access rule show``

0 commit comments

Comments
 (0)