Skip to content

Commit e04e389

Browse files
committed
router list if availability_zone ext not enabled
when calling router list with --long OSC expects the availability_zone field in the response, even if this extension is not loaded: As per the document, http://developer.openstack.org/api-ref/networking/ v2/?expanded=list-routers-detail, The availability zone(s) for the router is available when router_availability_zone extension is enabled. Added testcase to test router list without availability zone Change-Id: Ic9abb06140eb310b797ade8b0463a876d8bea1b8 Closes-bug: #1622565
1 parent fb66a5b commit e04e389

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

openstackclient/network/v2/router.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,20 @@ def take_action(self, parsed_args):
281281
columns = columns + (
282282
'routes',
283283
'external_gateway_info',
284-
'availability_zones'
285284
)
286285
column_headers = column_headers + (
287286
'Routes',
288287
'External gateway info',
289-
'Availability zones'
290288
)
289+
# availability zone will be available only when
290+
# router_availability_zone extension is enabled
291+
if client.find_extension("router_availability_zone"):
292+
columns = columns + (
293+
'availability_zones',
294+
)
295+
column_headers = column_headers + (
296+
'Availability zones',
297+
)
291298

292299
data = client.routers()
293300
return (column_headers,

openstackclient/tests/unit/network/v2/test_router.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ class TestListRouter(TestRouter):
285285

286286
# The routers going to be listed up.
287287
routers = network_fakes.FakeRouter.create_routers(count=3)
288+
_extensions = network_fakes.FakeExtension.create_one_extension()
288289

289290
columns = (
290291
'ID',
@@ -300,6 +301,10 @@ class TestListRouter(TestRouter):
300301
'External gateway info',
301302
'Availability zones'
302303
)
304+
columns_long_no_az = columns + (
305+
'Routes',
306+
'External gateway info',
307+
)
303308

304309
data = []
305310
for r in routers:
@@ -322,6 +327,15 @@ class TestListRouter(TestRouter):
322327
osc_utils.format_list(r.availability_zones),
323328
)
324329
)
330+
data_long_no_az = []
331+
for i in range(0, len(routers)):
332+
r = routers[i]
333+
data_long_no_az.append(
334+
data[i] + (
335+
router._format_routes(r.routes),
336+
router._format_external_gateway_info(r.external_gateway_info),
337+
)
338+
)
325339

326340
def setUp(self):
327341
super(TestListRouter, self).setUp()
@@ -330,6 +344,7 @@ def setUp(self):
330344
self.cmd = router.ListRouter(self.app, self.namespace)
331345

332346
self.network.routers = mock.Mock(return_value=self.routers)
347+
self.network.find_extension = mock.Mock(return_value=self._extensions)
333348

334349
def test_router_list_no_options(self):
335350
arglist = []
@@ -365,6 +380,27 @@ def test_router_list_long(self):
365380
self.assertEqual(self.columns_long, columns)
366381
self.assertEqual(self.data_long, list(data))
367382

383+
def test_router_list_long_no_az(self):
384+
arglist = [
385+
'--long',
386+
]
387+
verifylist = [
388+
('long', True),
389+
]
390+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
391+
392+
# to mock, that no availability zone
393+
self.network.find_extension = mock.Mock(return_value=None)
394+
395+
# In base command class Lister in cliff, abstract method take_action()
396+
# returns a tuple containing the column names and an iterable
397+
# containing the data to be listed.
398+
columns, data = self.cmd.take_action(parsed_args)
399+
400+
self.network.routers.assert_called_once_with()
401+
self.assertEqual(self.columns_long_no_az, columns)
402+
self.assertEqual(self.data_long_no_az, list(data))
403+
368404

369405
class TestRemovePortFromRouter(TestRouter):
370406
'''Remove port from a Router '''

0 commit comments

Comments
 (0)