Skip to content

Commit 266ecf5

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Mark arguments for 'credential' commands as required"
2 parents 332ec43 + b33cdec commit 266ecf5

3 files changed

Lines changed: 131 additions & 16 deletions

File tree

openstackclient/identity/v3/credential.py

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import logging
1919
import six
20-
import sys
2120

2221
from cliff import command
2322
from cliff import lister
@@ -130,17 +129,20 @@ def get_parser(self, prog_name):
130129
parser.add_argument(
131130
'--user',
132131
metavar='<user>',
132+
required=True,
133133
help='Name or ID of user that owns the credential',
134134
)
135135
parser.add_argument(
136136
'--type',
137137
metavar='<type>',
138138
choices=['ec2', 'cert'],
139+
required=True,
139140
help='New credential type',
140141
)
141142
parser.add_argument(
142143
'--data',
143144
metavar='<data>',
145+
required=True,
144146
help='New credential data',
145147
)
146148
parser.add_argument(
@@ -153,25 +155,22 @@ def get_parser(self, prog_name):
153155
@utils.log_method(log)
154156
def take_action(self, parsed_args):
155157
identity_client = self.app.client_manager.identity
156-
kwargs = {}
157-
if parsed_args.user:
158-
user_id = utils.find_resource(identity_client.users,
159-
parsed_args.user).id
160-
if user_id:
161-
kwargs['user'] = user_id
162-
if parsed_args.type:
163-
kwargs['type'] = parsed_args.type
164-
if parsed_args.data:
165-
kwargs['data'] = parsed_args.data
158+
159+
user_id = utils.find_resource(identity_client.users,
160+
parsed_args.user).id
161+
166162
if parsed_args.project:
167163
project = utils.find_resource(identity_client.projects,
168164
parsed_args.project).id
169-
kwargs['project'] = project
165+
else:
166+
project = None
167+
168+
identity_client.credentials.update(parsed_args.credential,
169+
user=user_id,
170+
type=parsed_args.type,
171+
blob=parsed_args.data,
172+
project=project)
170173

171-
if not kwargs:
172-
sys.stdout.write("Credential not updated, no arguments present")
173-
return
174-
identity_client.credentials.update(parsed_args.credential, **kwargs)
175174
return
176175

177176

openstackclient/tests/identity/v3/fakes.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@
193193
'links': base_url + 'services/' + service_id,
194194
}
195195

196+
credential_id = 'c-123'
197+
196198
endpoint_id = 'e-123'
197199
endpoint_url = 'http://127.0.0.1:35357'
198200
endpoint_region = 'RegionOne'
@@ -398,6 +400,8 @@ class FakeIdentityv3Client(object):
398400
def __init__(self, **kwargs):
399401
self.domains = mock.Mock()
400402
self.domains.resource_class = fakes.FakeResource(None, {})
403+
self.credentials = mock.Mock()
404+
self.credentials.resource_class = fakes.FakeResource(None, {})
401405
self.endpoints = mock.Mock()
402406
self.endpoints.resource_class = fakes.FakeResource(None, {})
403407
self.groups = mock.Mock()
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
2+
# not use this file except in compliance with the License. You may obtain
3+
# a copy of the License at
4+
#
5+
# http://www.apache.org/licenses/LICENSE-2.0
6+
#
7+
# Unless required by applicable law or agreed to in writing, software
8+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10+
# License for the specific language governing permissions and limitations
11+
# under the License.
12+
13+
import json
14+
15+
from openstackclient.identity.v3 import credential
16+
from openstackclient.tests.identity.v3 import fakes as identity_fakes
17+
from openstackclient.tests.utils import ParserException
18+
19+
20+
class TestCredential(identity_fakes.TestIdentityv3):
21+
data = {
22+
"access": "abc123",
23+
"secret": "hidden-message",
24+
"trust_id": None
25+
}
26+
27+
def __init__(self, *args):
28+
super(TestCredential, self).__init__(*args)
29+
30+
self.json_data = json.dumps(self.data)
31+
32+
def setUp(self):
33+
super(TestCredential, self).setUp()
34+
35+
# Get a shortcut to the CredentialManager Mock
36+
self.credentials_mock = self.app.client_manager.identity.credentials
37+
self.credentials_mock.reset_mock()
38+
39+
# Get a shortcut to the UserManager Mock
40+
self.users_mock = self.app.client_manager.identity.users
41+
self.users_mock.reset_mock()
42+
43+
# Get a shortcut to the ProjectManager Mock
44+
self.projects_mock = self.app.client_manager.identity.projects
45+
self.projects_mock.reset_mock()
46+
47+
48+
class TestCredentialSet(TestCredential):
49+
def setUp(self):
50+
super(TestCredentialSet, self).setUp()
51+
self.cmd = credential.SetCredential(self.app, None)
52+
53+
def test_credential_set_no_options(self):
54+
arglist = [
55+
identity_fakes.credential_id,
56+
]
57+
58+
self.assertRaises(ParserException,
59+
self.check_parser, self.cmd, arglist, [])
60+
61+
def test_credential_set_missing_user(self):
62+
arglist = [
63+
'--type', 'ec2',
64+
'--data', self.json_data,
65+
identity_fakes.credential_id,
66+
]
67+
68+
self.assertRaises(ParserException,
69+
self.check_parser, self.cmd, arglist, [])
70+
71+
def test_credential_set_missing_type(self):
72+
arglist = [
73+
'--user', identity_fakes.user_name,
74+
'--data', self.json_data,
75+
identity_fakes.credential_id,
76+
]
77+
78+
self.assertRaises(ParserException,
79+
self.check_parser, self.cmd, arglist, [])
80+
81+
def test_credential_set_missing_data(self):
82+
arglist = [
83+
'--user', identity_fakes.user_name,
84+
'--type', 'ec2',
85+
identity_fakes.credential_id,
86+
]
87+
88+
self.assertRaises(ParserException,
89+
self.check_parser, self.cmd, arglist, [])
90+
91+
def test_credential_set_valid(self):
92+
arglist = [
93+
'--user', identity_fakes.user_name,
94+
'--type', 'ec2',
95+
'--data', self.json_data,
96+
identity_fakes.credential_id,
97+
]
98+
99+
parsed_args = self.check_parser(self.cmd, arglist, [])
100+
self.cmd.take_action(parsed_args)
101+
102+
def test_credential_set_valid_with_project(self):
103+
arglist = [
104+
'--user', identity_fakes.user_name,
105+
'--type', 'ec2',
106+
'--data', self.json_data,
107+
'--project', identity_fakes.project_name,
108+
identity_fakes.credential_id,
109+
]
110+
111+
parsed_args = self.check_parser(self.cmd, arglist, [])
112+
self.cmd.take_action(parsed_args)

0 commit comments

Comments
 (0)