Revision 4e1133ab
b/snf-cyclades-app/synnefo/api/networks.py | ||
---|---|---|
164 | 164 |
req = util.get_request_dict(request) |
165 | 165 |
log.info('create_network %s', req) |
166 | 166 |
|
167 |
user_id = request.user_uniq |
|
167 | 168 |
try: |
168 | 169 |
d = req['network'] |
169 | 170 |
name = d['name'] |
170 |
# TODO: Fix this temp values: |
|
171 |
subnet = d.get('cidr', '192.168.1.0/24') |
|
172 |
subnet6 = d.get('cidr6', None) |
|
173 |
gateway = d.get('gateway', None) |
|
174 |
gateway6 = d.get('gateway6', None) |
|
175 |
flavor = d.get('type', 'MAC_FILTERED') |
|
176 |
public = d.get('public', False) |
|
177 |
dhcp = d.get('dhcp', True) |
|
178 |
except (KeyError, ValueError): |
|
179 |
raise BadRequest('Malformed request.') |
|
180 |
|
|
171 |
except KeyError: |
|
172 |
raise BadRequest("Malformed request") |
|
173 |
|
|
174 |
# Get and validate flavor. Flavors are still exposed as 'type' in the |
|
175 |
# API. |
|
176 |
flavor = d.get("type", None) |
|
177 |
if flavor is None: |
|
178 |
raise BadRequest("Missing request parameter 'type'") |
|
179 |
elif flavor not in Network.FLAVORS.keys(): |
|
180 |
raise BadRequest("Invalid network type '%s'" % flavor) |
|
181 |
elif flavor not in settings.API_ENABLED_NETWORK_FLAVORS: |
|
182 |
raise Forbidden("Can not create network of type '%s'" % flavor) |
|
183 |
|
|
184 |
public = d.get("public", False) |
|
181 | 185 |
if public: |
182 |
raise Forbidden('Can not create a public network.')
|
|
186 |
raise Forbidden("Can not create a public network.")
|
|
183 | 187 |
|
184 |
if flavor not in Network.FLAVORS.keys(): |
|
185 |
raise BadRequest("Invalid network flavors %s" % flavor) |
|
186 |
|
|
187 |
if flavor not in settings.API_ENABLED_NETWORK_FLAVORS: |
|
188 |
raise Forbidden("Can not create %s network" % flavor) |
|
188 |
dhcp = d.get('dhcp', True) |
|
189 | 189 |
|
190 |
# Get and validate network parameters |
|
191 |
subnet = d.get('cidr', '192.168.1.0/24') |
|
192 |
subnet6 = d.get('cidr6', None) |
|
193 |
gateway = d.get('gateway', None) |
|
194 |
gateway6 = d.get('gateway6', None) |
|
190 | 195 |
# Check that user provided a valid subnet |
191 | 196 |
util.validate_network_params(subnet, gateway, subnet6, gateway6) |
192 | 197 |
|
193 |
user_id = request.user_uniq
|
|
198 |
# Issue commission
|
|
194 | 199 |
serial = quotas.issue_network_commission(user_id) |
195 | 200 |
serials.append(serial) |
196 | 201 |
# Make the commission accepted, since in the end of this |
b/snf-cyclades-app/synnefo/api/test/networks.py | ||
---|---|---|
72 | 72 |
|
73 | 73 |
def test_create_network_1(self, mrapi): |
74 | 74 |
request = { |
75 |
'network': {'name': 'foo'} |
|
76 |
}
|
|
75 |
'network': {'name': 'foo', "type": "MAC_FILTERED"}
|
|
76 |
} |
|
77 | 77 |
response = self.post('/api/v1.1/networks/', 'user1', |
78 | 78 |
json.dumps(request), 'json') |
79 | 79 |
self.assertEqual(response.status_code, 202) |
... | ... | |
96 | 96 |
self.assertEqual(len(Network.objects.filter(userid='user1')), 0) |
97 | 97 |
|
98 | 98 |
def test_invalid_data_2(self, mrapi): |
99 |
"""Test invalid subnet""" |
|
99 |
"""Test invalid data/subnet"""
|
|
100 | 100 |
request = { |
101 |
'network': {'name': 'foo', 'cidr': '10.0.0.0/8'} |
|
102 |
} |
|
101 |
'network': {'name': 'foo', |
|
102 |
'cidr': '10.0.0.0/8', "type": |
|
103 |
"MAC_FILTERED"} |
|
104 |
} |
|
103 | 105 |
response = self.post('/api/v1.1/networks/', 'user1', |
104 | 106 |
json.dumps(request), 'json') |
105 | 107 |
self.assertFault(response, 413, "overLimit") |
... | ... | |
107 | 109 |
def test_invalid_data_3(self, mrapi): |
108 | 110 |
"""Test unauthorized to create public network""" |
109 | 111 |
request = { |
110 |
'network': {'name': 'foo', 'public': True} |
|
112 |
'network': {'name': 'foo', |
|
113 |
"public": "True", |
|
114 |
"type": "MAC_FILTERED"} |
|
111 | 115 |
} |
112 | 116 |
response = self.post('/api/v1.1/networks/', 'user1', |
113 | 117 |
json.dumps(request), 'json') |
... | ... | |
125 | 129 |
def test_invalid_subnet(self, mrapi): |
126 | 130 |
"""Test invalid subnet""" |
127 | 131 |
request = { |
128 |
'network': {'name': 'foo', 'cidr': '10.0.0.10/27'} |
|
129 |
} |
|
132 |
'network': {'name': 'foo', |
|
133 |
'cidr': '10.0.0.10/27', |
|
134 |
"type": "MAC_FILTERED"} |
|
135 |
} |
|
130 | 136 |
response = self.post('/api/v1.1/networks/', 'user1', |
131 | 137 |
json.dumps(request), 'json') |
132 | 138 |
self.assertBadRequest(response) |
Also available in: Unified diff