From b7429460d0950cf58c3ebbf158659c17bdcfd10d Mon Sep 17 00:00:00 2001 From: Eugene Nikanorov Date: Wed, 19 Nov 2014 14:05:05 +0400 Subject: [PATCH] Validate loadbalancing method when updating a pool Validate the input for the lb_method and avoid DBIntegrityError. Change-Id: Iea3d464abdeb1ed377db2453581124742f9fb0ac Closes-Bug: #1390078 --- neutron/extensions/loadbalancer.py | 4 +++- .../tests/unit/db/loadbalancer/test_db_loadbalancer.py | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/neutron/extensions/loadbalancer.py b/neutron/extensions/loadbalancer.py index ae91b6515..fdc23d826 100644 --- a/neutron/extensions/loadbalancer.py +++ b/neutron/extensions/loadbalancer.py @@ -184,7 +184,9 @@ RESOURCE_ATTRIBUTE_MAP = { 'validate': {'type:string': None}, 'is_visible': True, 'default': attr.ATTR_NOT_SPECIFIED}, 'lb_method': {'allow_post': True, 'allow_put': True, - 'validate': {'type:string': None}, + 'validate': {'type:values': ['ROUND_ROBIN', + 'LEAST_CONNECTIONS', + 'SOURCE_IP']}, 'is_visible': True}, 'members': {'allow_post': False, 'allow_put': False, 'is_visible': True}, diff --git a/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py b/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py index e3f3a3d8c..69a15a4d0 100644 --- a/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py +++ b/neutron/tests/unit/db/loadbalancer/test_db_loadbalancer.py @@ -1121,6 +1121,14 @@ class TestLoadBalancer(LoadBalancerPluginDbTestCase): (m1, m2, m3), ('delay', 'asc'), 2, 2) + def test_update_pool_invalid_lb_method(self): + with self.pool() as pool: + update_data = {'pool': {'lb_method': 'dummy'}} + req = self.new_update_request('pools', update_data, + pool['pool']['id'], fmt=self.fmt) + res = req.get_response(self.ext_api) + self.assertEqual(webob.exc.HTTPBadRequest.code, res.status_int) + def test_update_pool_stats_with_no_stats(self): keys = ["bytes_in", "bytes_out", "active_connections", -- 2.45.2