Skip to content

Commit c0ac93b

Browse files
committed
Fix limit update with zero resource limit
The openstack limit set command ignored a resource_limit value of 0 because the value was checked using truthiness. Use an explicit None check so that zero is treated as a valid resource limit value. Add a regression test covering resource_limit=0. Change-Id: I4ae57cdbf6b13da370a4e77af569a729c8781ddd Signed-off-by: Udayendu Kar <udayendu.kar@gmail.com>
1 parent 9726a4d commit c0ac93b

2 files changed

Lines changed: 107 additions & 1 deletion

File tree

openstackclient/identity/v3/limit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ def take_action(
267267
kwargs = {}
268268
if parsed_args.description:
269269
kwargs["description"] = parsed_args.description
270-
if parsed_args.resource_limit:
270+
if parsed_args.resource_limit is not None:
271271
kwargs["resource_limit"] = parsed_args.resource_limit
272272
limit = identity_client.update_limit(parsed_args.limit_id, **kwargs)
273273

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

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,112 @@ def test_limit_set_resource_limit(self):
395395
)
396396
self.assertEqual(datalist, data)
397397

398+
def test_limit_set_resource_limit_zero(self):
399+
resource_limit = 0
400+
limit = sdk_fakes.generate_fake_resource(
401+
resource_type=_limit.Limit,
402+
project_id=self.project.id,
403+
service_id=self.service.id,
404+
resource_name='foobars',
405+
description=None,
406+
resource_limit=resource_limit,
407+
region_id=None,
408+
)
409+
self.identity_sdk_client.update_limit.return_value = limit
410+
411+
arglist = [
412+
'--resource-limit',
413+
str(resource_limit),
414+
limit.id,
415+
]
416+
verifylist = [
417+
('resource_limit', resource_limit),
418+
('limit_id', limit.id),
419+
]
420+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
421+
422+
columns, data = self.cmd.take_action(parsed_args)
423+
424+
self.identity_sdk_client.update_limit.assert_called_with(
425+
limit.id,
426+
resource_limit=resource_limit,
427+
)
428+
429+
collist = (
430+
'description',
431+
'id',
432+
'project_id',
433+
'region_id',
434+
'resource_limit',
435+
'resource_name',
436+
'service_id',
437+
)
438+
self.assertEqual(collist, columns)
439+
datalist = (
440+
None,
441+
limit.id,
442+
self.project.id,
443+
None,
444+
resource_limit,
445+
limit.resource_name,
446+
self.service.id,
447+
)
448+
self.assertEqual(datalist, data)
449+
450+
def test_limit_set_without_resource_limit(self):
451+
limit = sdk_fakes.generate_fake_resource(
452+
resource_type=_limit.Limit,
453+
project_id=self.project.id,
454+
service_id=self.service.id,
455+
resource_name='foobars',
456+
description=None,
457+
resource_limit=20,
458+
region_id=None,
459+
)
460+
461+
self.identity_sdk_client.update_limit.return_value = limit
462+
463+
arglist = [
464+
limit.id,
465+
]
466+
verifylist = [
467+
('limit_id', limit.id),
468+
]
469+
470+
parsed_args = self.check_parser(
471+
self.cmd,
472+
arglist,
473+
verifylist,
474+
)
475+
476+
columns, data = self.cmd.take_action(parsed_args)
477+
478+
self.identity_sdk_client.update_limit.assert_called_once_with(
479+
limit.id,
480+
)
481+
482+
collist = (
483+
'description',
484+
'id',
485+
'project_id',
486+
'region_id',
487+
'resource_limit',
488+
'resource_name',
489+
'service_id',
490+
)
491+
self.assertEqual(collist, columns)
492+
493+
datalist = (
494+
None,
495+
limit.id,
496+
self.project.id,
497+
None,
498+
20,
499+
limit.resource_name,
500+
self.service.id,
501+
)
502+
self.assertEqual(datalist, data)
503+
398504

399505
class TestLimitList(identity_fakes.TestIdentity):
400506
def setUp(self):

0 commit comments

Comments
 (0)