Fix the bug of "openstack console log show"
The behaviors are inconsistent while different negative line numbers specified. Change-Id: I2573f3e789f5603c896758971830ffc0b94c5e2b Closes-Bug: #1512263
This commit is contained in:
parent
6dfa304617
commit
ea63553925
@ -65,3 +65,18 @@ class RangeAction(argparse.Action):
|
|||||||
# Too many values
|
# Too many values
|
||||||
msg = "Invalid range, too many values"
|
msg = "Invalid range, too many values"
|
||||||
raise argparse.ArgumentError(self, msg)
|
raise argparse.ArgumentError(self, msg)
|
||||||
|
|
||||||
|
|
||||||
|
class NonNegativeAction(argparse.Action):
|
||||||
|
"""A custom action to check whether the value is non-negative or not
|
||||||
|
|
||||||
|
Ensures the value is >= 0.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
|
try:
|
||||||
|
assert(int(values) >= 0)
|
||||||
|
setattr(namespace, self.dest, values)
|
||||||
|
except Exception:
|
||||||
|
msg = "%s expected a non-negative integer" % (str(option_string))
|
||||||
|
raise argparse.ArgumentTypeError(self, msg)
|
||||||
|
@ -22,6 +22,7 @@ import sys
|
|||||||
from cliff import command
|
from cliff import command
|
||||||
from cliff import show
|
from cliff import show
|
||||||
|
|
||||||
|
from openstackclient.common import parseractions
|
||||||
from openstackclient.common import utils
|
from openstackclient.common import utils
|
||||||
|
|
||||||
|
|
||||||
@ -42,6 +43,7 @@ class ShowConsoleLog(command.Command):
|
|||||||
metavar='<num-lines>',
|
metavar='<num-lines>',
|
||||||
type=int,
|
type=int,
|
||||||
default=None,
|
default=None,
|
||||||
|
action=parseractions.NonNegativeAction,
|
||||||
help='Number of lines to display from the end of the log '
|
help='Number of lines to display from the end of the log '
|
||||||
'(default=all)',
|
'(default=all)',
|
||||||
)
|
)
|
||||||
|
@ -102,3 +102,58 @@ class TestKeyValueAction(utils.TestCase):
|
|||||||
expect = {'green': '100%'}
|
expect = {'green': '100%'}
|
||||||
self.assertDictEqual(expect, actual)
|
self.assertDictEqual(expect, actual)
|
||||||
self.assertEqual(None, failhere)
|
self.assertEqual(None, failhere)
|
||||||
|
|
||||||
|
|
||||||
|
class TestNonNegativeAction(utils.TestCase):
|
||||||
|
def test_negative_values(self):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
# Set up our typical usage
|
||||||
|
parser.add_argument(
|
||||||
|
'--foo',
|
||||||
|
metavar='<foo>',
|
||||||
|
type=int,
|
||||||
|
action=parseractions.NonNegativeAction,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertRaises(
|
||||||
|
argparse.ArgumentTypeError,
|
||||||
|
parser.parse_args,
|
||||||
|
"--foo -1".split()
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_zero_values(self):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
# Set up our typical usage
|
||||||
|
parser.add_argument(
|
||||||
|
'--foo',
|
||||||
|
metavar='<foo>',
|
||||||
|
type=int,
|
||||||
|
action=parseractions.NonNegativeAction,
|
||||||
|
)
|
||||||
|
|
||||||
|
results = parser.parse_args(
|
||||||
|
'--foo 0'.split()
|
||||||
|
)
|
||||||
|
|
||||||
|
actual = getattr(results, 'foo', None)
|
||||||
|
self.assertEqual(actual, 0)
|
||||||
|
|
||||||
|
def test_positive_values(self):
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
|
||||||
|
# Set up our typical usage
|
||||||
|
parser.add_argument(
|
||||||
|
'--foo',
|
||||||
|
metavar='<foo>',
|
||||||
|
type=int,
|
||||||
|
action=parseractions.NonNegativeAction,
|
||||||
|
)
|
||||||
|
|
||||||
|
results = parser.parse_args(
|
||||||
|
'--foo 1'.split()
|
||||||
|
)
|
||||||
|
|
||||||
|
actual = getattr(results, 'foo', None)
|
||||||
|
self.assertEqual(actual, 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user