Skip to content

Commit 8dd8cdc

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Check if service.name available before access"
2 parents 454c19e + 369ae3f commit 8dd8cdc

3 files changed

Lines changed: 109 additions & 14 deletions

File tree

‎openstackclient/identity/v3/endpoint.py‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@
2727
from openstackclient.identity import common
2828

2929

30+
def get_service_name(service):
31+
if hasattr(service, 'name'):
32+
return service.name
33+
else:
34+
return ''
35+
36+
3037
class CreateEndpoint(show.ShowOne):
3138
"""Create new endpoint"""
3239

@@ -87,7 +94,7 @@ def take_action(self, parsed_args):
8794
info = {}
8895
endpoint._info.pop('links')
8996
info.update(endpoint._info)
90-
info['service_name'] = service.name
97+
info['service_name'] = get_service_name(service)
9198
info['service_type'] = service.type
9299
return zip(*sorted(six.iteritems(info)))
93100

@@ -157,7 +164,7 @@ def take_action(self, parsed_args):
157164

158165
for ep in data:
159166
service = common.find_service(identity_client, ep.service_id)
160-
ep.service_name = service.name
167+
ep.service_name = get_service_name(service)
161168
ep.service_type = service.type
162169
return (columns,
163170
(utils.get_item_properties(
@@ -274,6 +281,6 @@ def take_action(self, parsed_args):
274281
info = {}
275282
endpoint._info.pop('links')
276283
info.update(endpoint._info)
277-
info['service_name'] = service.name
284+
info['service_name'] = get_service_name(service)
278285
info['service_type'] = service.type
279286
return zip(*sorted(six.iteritems(info)))

‎openstackclient/tests/identity/v3/fakes.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,14 @@
158158
'links': base_url + 'services/' + service_id,
159159
}
160160

161+
SERVICE_WITHOUT_NAME = {
162+
'id': service_id,
163+
'type': service_type,
164+
'description': service_description,
165+
'enabled': True,
166+
'links': base_url + 'services/' + service_id,
167+
}
168+
161169
endpoint_id = 'e-123'
162170
endpoint_url = 'http://127.0.0.1:35357'
163171
endpoint_region = 'RegionOne'

‎openstackclient/tests/identity/v3/test_endpoint.py‎

Lines changed: 91 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ def setUp(self):
3131
self.services_mock = self.app.client_manager.identity.services
3232
self.services_mock.reset_mock()
3333

34+
def get_fake_service_name(self):
35+
return identity_fakes.service_name
36+
3437

3538
class TestEndpointCreate(TestEndpoint):
3639

@@ -92,7 +95,7 @@ def test_endpoint_create_no_options(self):
9295
identity_fakes.endpoint_interface,
9396
identity_fakes.endpoint_region,
9497
identity_fakes.service_id,
95-
identity_fakes.service_name,
98+
self.get_fake_service_name(),
9699
identity_fakes.service_type,
97100
identity_fakes.endpoint_url,
98101
)
@@ -139,7 +142,7 @@ def test_endpoint_create_region(self):
139142
identity_fakes.endpoint_interface,
140143
identity_fakes.endpoint_region,
141144
identity_fakes.service_id,
142-
identity_fakes.service_name,
145+
self.get_fake_service_name(),
143146
identity_fakes.service_type,
144147
identity_fakes.endpoint_url,
145148
)
@@ -185,7 +188,7 @@ def test_endpoint_create_enable(self):
185188
identity_fakes.endpoint_interface,
186189
identity_fakes.endpoint_region,
187190
identity_fakes.service_id,
188-
identity_fakes.service_name,
191+
self.get_fake_service_name(),
189192
identity_fakes.service_type,
190193
identity_fakes.endpoint_url,
191194
)
@@ -231,7 +234,7 @@ def test_endpoint_create_disable(self):
231234
identity_fakes.endpoint_interface,
232235
identity_fakes.endpoint_region,
233236
identity_fakes.service_id,
234-
identity_fakes.service_name,
237+
self.get_fake_service_name(),
235238
identity_fakes.service_type,
236239
identity_fakes.endpoint_url,
237240
)
@@ -309,7 +312,7 @@ def test_endpoint_list_no_options(self):
309312
datalist = ((
310313
identity_fakes.endpoint_id,
311314
identity_fakes.endpoint_region,
312-
identity_fakes.service_name,
315+
self.get_fake_service_name(),
313316
identity_fakes.service_type,
314317
True,
315318
identity_fakes.endpoint_interface,
@@ -319,10 +322,10 @@ def test_endpoint_list_no_options(self):
319322

320323
def test_endpoint_list_service(self):
321324
arglist = [
322-
'--service', identity_fakes.service_name,
325+
'--service', identity_fakes.service_id,
323326
]
324327
verifylist = [
325-
('service', identity_fakes.service_name),
328+
('service', identity_fakes.service_id),
326329
]
327330
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
328331

@@ -341,7 +344,7 @@ def test_endpoint_list_service(self):
341344
datalist = ((
342345
identity_fakes.endpoint_id,
343346
identity_fakes.endpoint_region,
344-
identity_fakes.service_name,
347+
self.get_fake_service_name(),
345348
identity_fakes.service_type,
346349
True,
347350
identity_fakes.endpoint_interface,
@@ -373,7 +376,7 @@ def test_endpoint_list_interface(self):
373376
datalist = ((
374377
identity_fakes.endpoint_id,
375378
identity_fakes.endpoint_region,
376-
identity_fakes.service_name,
379+
self.get_fake_service_name(),
377380
identity_fakes.service_type,
378381
True,
379382
identity_fakes.endpoint_interface,
@@ -405,7 +408,7 @@ def test_endpoint_list_region(self):
405408
datalist = ((
406409
identity_fakes.endpoint_id,
407410
identity_fakes.endpoint_region,
408-
identity_fakes.service_name,
411+
self.get_fake_service_name(),
409412
identity_fakes.service_type,
410413
True,
411414
identity_fakes.endpoint_interface,
@@ -664,8 +667,85 @@ def test_endpoint_show(self):
664667
identity_fakes.endpoint_interface,
665668
identity_fakes.endpoint_region,
666669
identity_fakes.service_id,
667-
identity_fakes.service_name,
670+
self.get_fake_service_name(),
668671
identity_fakes.service_type,
669672
identity_fakes.endpoint_url,
670673
)
671674
self.assertEqual(datalist, data)
675+
676+
677+
class TestEndpointCreateServiceWithoutName(TestEndpointCreate):
678+
679+
def setUp(self):
680+
super(TestEndpointCreate, self).setUp()
681+
682+
self.endpoints_mock.create.return_value = fakes.FakeResource(
683+
None,
684+
copy.deepcopy(identity_fakes.ENDPOINT),
685+
loaded=True,
686+
)
687+
688+
# This is the return value for common.find_resource(service)
689+
self.services_mock.get.return_value = fakes.FakeResource(
690+
None,
691+
copy.deepcopy(identity_fakes.SERVICE_WITHOUT_NAME),
692+
loaded=True,
693+
)
694+
695+
# Get the command object to test
696+
self.cmd = endpoint.CreateEndpoint(self.app, None)
697+
698+
def get_fake_service_name(self):
699+
return ''
700+
701+
702+
class TestEndpointListServiceWithoutName(TestEndpointList):
703+
704+
def setUp(self):
705+
super(TestEndpointList, self).setUp()
706+
707+
self.endpoints_mock.list.return_value = [
708+
fakes.FakeResource(
709+
None,
710+
copy.deepcopy(identity_fakes.ENDPOINT),
711+
loaded=True,
712+
),
713+
]
714+
715+
# This is the return value for common.find_resource(service)
716+
self.services_mock.get.return_value = fakes.FakeResource(
717+
None,
718+
copy.deepcopy(identity_fakes.SERVICE_WITHOUT_NAME),
719+
loaded=True,
720+
)
721+
722+
# Get the command object to test
723+
self.cmd = endpoint.ListEndpoint(self.app, None)
724+
725+
def get_fake_service_name(self):
726+
return ''
727+
728+
729+
class TestEndpointShowServiceWithoutName(TestEndpointShow):
730+
731+
def setUp(self):
732+
super(TestEndpointShow, self).setUp()
733+
734+
self.endpoints_mock.get.return_value = fakes.FakeResource(
735+
None,
736+
copy.deepcopy(identity_fakes.ENDPOINT),
737+
loaded=True,
738+
)
739+
740+
# This is the return value for common.find_resource(service)
741+
self.services_mock.get.return_value = fakes.FakeResource(
742+
None,
743+
copy.deepcopy(identity_fakes.SERVICE_WITHOUT_NAME),
744+
loaded=True,
745+
)
746+
747+
# Get the command object to test
748+
self.cmd = endpoint.ShowEndpoint(self.app, None)
749+
750+
def get_fake_service_name(self):
751+
return ''

0 commit comments

Comments
 (0)