From f5ba8e6f2fd3a29c00a86ffd4f4bad07599c864b Mon Sep 17 00:00:00 2001 From: Ana Krivokapic Date: Fri, 6 Oct 2017 14:03:04 +0200 Subject: [PATCH] ctlplane-ip-range: Verify lower IP bound is smaller than upper Change-Id: I9c76c3a90fed305b77b80ed39a7b2451f16de21c --- releasenotes/notes/ip-range-input-23493c5850ddbf49.yaml | 6 ++++++ tripleo_validations/tests/test_ip_range.py | 7 +++++++ validations/library/ip_range.py | 9 +++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/ip-range-input-23493c5850ddbf49.yaml diff --git a/releasenotes/notes/ip-range-input-23493c5850ddbf49.yaml b/releasenotes/notes/ip-range-input-23493c5850ddbf49.yaml new file mode 100644 index 000000000..9c4d26e80 --- /dev/null +++ b/releasenotes/notes/ip-range-input-23493c5850ddbf49.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Added additional input validation to the ctlplane-ip-range validation. + The validation now ensures the lower IP bound is smaller than the upper + bound. diff --git a/tripleo_validations/tests/test_ip_range.py b/tripleo_validations/tests/test_ip_range.py index c492b874b..082cbedb9 100644 --- a/tripleo_validations/tests/test_ip_range.py +++ b/tripleo_validations/tests/test_ip_range.py @@ -63,3 +63,10 @@ class TestIPRange(base.TestCase): 'contains 5 addresses.', errors[0]) self.assertEqual('This might not be enough for the deployment ' + 'or later scaling.', errors[1]) + + def test_check_lower_bound_greater_than_upper(self): + """Test ip_range when lower IP bound is greater than upper""" + errors = validation.check_arguments('192.168.0.10', '192.168.0.1', 5) + self.assertEqual(len(errors), 1) + self.assertEqual("Lower IP bound (192.168.0.10) must be smaller than " + "upper bound (192.168.0.1)", errors[0]) diff --git a/validations/library/ip_range.py b/validations/library/ip_range.py index c76b0f689..7b21ebeec 100644 --- a/validations/library/ip_range.py +++ b/validations/library/ip_range.py @@ -70,8 +70,13 @@ def check_arguments(start, end, min_size): except netaddr.core.AddrFormatError: errors.append('Argument end ({}) must be an IP'.format(end)) - if (not errors) and (startIP.version != endIP.version): - errors.append('Arguments start, end must share the same IP version') + if not errors: + if startIP.version != endIP.version: + errors.append("Arguments start, end must share the same IP " + "version") + if startIP > endIP: + errors.append("Lower IP bound ({}) must be smaller than upper " + "bound ({})".format(startIP, endIP)) if min_size < 0: errors.append('Argument min_size({}) must be greater than 0'