Require region_id and cloud_id for POST /networks

This patch corrects the schema to include requirements
for region_id and cloud_id when creating a network.

Change-Id: I0edbf5efa51a55c425051cbe8d7a60c6ed0a2232
Closes-Bug: 1661761
This commit is contained in:
Thomas Maddox 2017-02-26 15:03:03 +00:00
parent b4cd6d35b3
commit ddc1807338
2 changed files with 110 additions and 0 deletions

View File

@ -484,6 +484,8 @@ DefinitionNetwork = {
"cidr",
"gateway",
"netmask",
"cloud_id",
"region_id",
],
"type": "object",
"additionalProperties": False,
@ -502,6 +504,8 @@ DefinitionNetworkCreate = {
"cidr",
"gateway",
"netmask",
"cloud_id",
"region_id",
],
"type": "object",
"additionalProperties": False,

View File

@ -0,0 +1,106 @@
from craton.tests.functional import TestCase
class APIV1NetworkSchemaTest(TestCase):
def setUp(self):
super(APIV1NetworkSchemaTest, self).setUp()
self.cloud = self.create_cloud(name='cloud-1')
self.region = self.create_region(name='region-1', cloud=self.cloud)
self.networks_url = self.url + '/v1/networks'
self.cidr = '192.168.0.0/24'
self.netmask = '255.255.255.0'
self.gateway = '192.168.0.1'
def test_network_create_with_required_works(self):
payload = {
'cloud_id': self.cloud['id'],
'region_id': self.region['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
}
resp = self.post(self.networks_url, data=payload)
self.assertEqual(201, resp.status_code)
network = resp.json()
self.assertEqual('a', network['name'])
self.assertEqual(self.cloud['id'], network['cloud_id'])
self.assertEqual(self.region['id'], network['region_id'])
self.assertEqual(self.cidr, network['cidr'])
self.assertEqual(self.gateway, network['gateway'])
self.assertEqual(self.netmask, network['netmask'])
def test_network_create_without_region_id_fails(self):
payload = {
'cloud_id': self.cloud['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
}
network = self.post(self.networks_url, data=payload)
self.assertEqual(400, network.status_code)
msg = ["'region_id' is a required property"]
self.assertEqual(network.json()['errors'], msg)
def test_network_create_without_cloud_id_fails(self):
payload = {
'region_id': self.region['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
}
network = self.post(self.networks_url, data=payload)
self.assertEqual(400, network.status_code)
msg = ["'cloud_id' is a required property"]
self.assertEqual(network.json()['errors'], msg)
def test_network_create_with_extra_id_property_fails(self):
payload = {
'region_id': self.region['id'],
'cloud_id': self.cloud['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
'id': 3
}
network = self.post(self.networks_url, data=payload)
self.assertEqual(400, network.status_code)
msg = ["Additional properties are not allowed ('id' was unexpected)"]
self.assertEqual(network.json()['errors'], msg)
def test_network_create_with_extra_created_at_property_fails(self):
payload = {
'region_id': self.region['id'],
'cloud_id': self.cloud['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
'created_at': 'This should not work'
}
network = self.post(self.networks_url, data=payload)
self.assertEqual(400, network.status_code)
msg = ["Additional properties are not allowed ('created_at' was "
"unexpected)"]
self.assertEqual(network.json()['errors'], msg)
def test_network_create_with_extra_updated_at_property_fails(self):
payload = {
'region_id': self.region['id'],
'cloud_id': self.cloud['id'],
'name': 'a',
'cidr': self.cidr,
'netmask': self.netmask,
'gateway': self.gateway,
'updated_at': 'This should not work'
}
network = self.post(self.networks_url, data=payload)
self.assertEqual(400, network.status_code)
msg = ["Additional properties are not allowed ('updated_at' was "
"unexpected)"]
self.assertEqual(network.json()['errors'], msg)