Merge "[2183 fix]"

This commit is contained in:
Jenkins 2013-10-17 10:45:07 +00:00 committed by Gerrit Code Review
commit afe704e3ba
4 changed files with 44 additions and 5 deletions

View File

@ -94,12 +94,12 @@ class JSONHandler(object):
fields=fields or cls.fields
)
def checked_data(self, validate_method=None):
def checked_data(self, validate_method=None, **kwargs):
try:
if validate_method:
data = validate_method(web.data())
data = validate_method(web.data(), **kwargs)
else:
data = self.validator.validate(web.data())
data = self.validator.validate(web.data(), **kwargs)
except (
errors.InvalidInterfacesInfo,
errors.InvalidMetadata

View File

@ -95,7 +95,7 @@ class ClusterHandler(JSONHandler):
* 404 (cluster not found in db)
"""
cluster = self.get_object_or_404(Cluster, cluster_id)
data = self.checked_data()
data = self.checked_data(cluster_id=cluster_id)
network_manager = NetworkManager()
for key, value in data.iteritems():

View File

@ -22,8 +22,9 @@ from nailgun.errors import errors
class ClusterValidator(BasicValidator):
@classmethod
def validate(cls, data):
def validate(cls, data, **kwargs):
d = cls.validate_json(data)
cluster_id = kwargs.get("cluster_id") or d.get("id")
if d.get("name"):
if db().query(Cluster).filter_by(
name=d["name"]
@ -39,6 +40,15 @@ class ClusterValidator(BasicValidator):
"Invalid release id",
log_message=True
)
if cluster_id:
cluster = db().query(Cluster).get(cluster_id)
if cluster:
for k in ("net_provider", "net_segment_type"):
if k in d and getattr(cluster, k) != d[k]:
raise errors.InvalidData(
"Change of '%s' is prohibited" % k,
log_message=True
)
return d

View File

@ -97,6 +97,35 @@ class TestHandlers(BaseIntegrationTest):
self.db.refresh(cluster)
self.assertEquals(cluster.net_manager, "VlanManager")
def test_cluster_update_fails_on_net_provider_change(self):
cluster = self.env.create_cluster(api=False)
self.assertEquals(cluster.net_provider, "nova_network")
resp = self.app.put(
reverse('ClusterHandler', kwargs={'cluster_id': cluster.id}),
json.dumps({'net_provider': 'neutron'}),
headers=self.default_headers,
expect_errors=True
)
self.assertEquals(resp.status, 400)
self.assertEquals(resp.body, "Change of 'net_provider' is prohibited")
def test_cluster_update_fails_on_net_segment_type_change(self):
cluster = self.env.create_cluster(
api=False,
net_provider='neutron',
net_segment_type='gre'
)
self.assertEquals(cluster.net_provider, "neutron")
resp = self.app.put(
reverse('ClusterHandler', kwargs={'cluster_id': cluster.id}),
json.dumps({'net_segment_type': 'vlan'}),
headers=self.default_headers,
expect_errors=True
)
self.assertEquals(resp.status, 400)
self.assertEquals(resp.body,
"Change of 'net_segment_type' is prohibited")
def test_cluster_node_list_update(self):
node1 = self.env.create_node(api=False)
node2 = self.env.create_node(api=False)