14
14
# License for the specific language governing permissions and limitations
15
15
# under the License.
17
from django.core.urlresolvers import reverse
17
from django.core.urlresolvers import reverse # noqa
18
18
from django import http
19
from django.utils.html import escape
21
from horizon.workflows.views import WorkflowView
19
from django.utils.html import escape # noqa
21
from horizon.workflows import views
23
from mox import IsA # noqa
25
25
from openstack_dashboard import api
26
26
from openstack_dashboard.test import helpers as test
28
from openstack_dashboard.dashboards.project.networks.workflows \
28
from openstack_dashboard.dashboards.project.networks import workflows
32
31
INDEX_URL = reverse('horizon:project:networks:index')
220
219
self.assertItemsEqual(subnets, [self.subnets.first()])
221
220
self.assertEqual(len(ports), 0)
222
@test.create_stubs({api.neutron: ('profile_list',)})
223
223
def test_network_create_get(self):
224
# no api methods are called.
224
# TODO(absubram): Remove if clause and create separate
225
# test stubs for when profile_support is being used.
226
# Additionally ensure those are always run even in default setting
227
if api.neutron.is_port_profiles_supported():
228
net_profiles = self.net_profiles.list()
229
api.neutron.profile_list(IsA(http.HttpRequest),
230
'network').AndReturn(net_profiles)
225
231
self.mox.ReplayAll()
227
233
url = reverse('horizon:project:networks:create')
228
234
res = self.client.get(url)
230
236
workflow = res.context['workflow']
231
self.assertTemplateUsed(res, WorkflowView.template_name)
232
self.assertEqual(workflow.name, CreateNetwork.name)
237
self.assertTemplateUsed(res, views.WorkflowView.template_name)
238
self.assertEqual(workflow.name, workflows.CreateNetwork.name)
233
239
expected_objs = ['<CreateNetworkInfo: createnetworkinfoaction>',
234
240
'<CreateSubnetInfo: createsubnetinfoaction>',
235
241
'<CreateSubnetDetail: createsubnetdetailaction>']
236
242
self.assertQuerysetEqual(workflow.steps, expected_objs)
238
@test.create_stubs({api.neutron: ('network_create',)})
244
@test.create_stubs({api.neutron: ('network_create',
239
246
def test_network_create_post(self):
240
247
network = self.networks.first()
241
api.neutron.network_create(IsA(http.HttpRequest), name=network.name,
242
admin_state_up=network.admin_state_up)\
248
params = {'name': network.name,
249
'admin_state_up': network.admin_state_up}
250
# TODO(absubram): Remove if clause and create separate
251
# test stubs for when profile_support is being used.
252
# Additionally ensure those are always run even in default setting
253
if api.neutron.is_port_profiles_supported():
254
net_profiles = self.net_profiles.list()
255
net_profile_id = self.net_profiles.first().id
256
api.neutron.profile_list(IsA(http.HttpRequest),
257
'network').AndReturn(net_profiles)
258
params['net_profile_id'] = net_profile_id
259
api.neutron.network_create(IsA(http.HttpRequest),
260
**params).AndReturn(network)
244
261
self.mox.ReplayAll()
246
263
form_data = {'net_name': network.name,
247
264
'admin_state': network.admin_state_up,
249
266
'with_subnet': False}
267
if api.neutron.is_port_profiles_supported():
268
form_data['net_profile_id'] = net_profile_id
250
269
form_data.update(form_data_no_subnet())
251
270
url = reverse('horizon:project:networks:create')
252
271
res = self.client.post(url, form_data)
255
274
self.assertRedirectsNoFollow(res, INDEX_URL)
257
276
@test.create_stubs({api.neutron: ('network_create',
259
279
def test_network_create_post_with_subnet(self):
260
280
network = self.networks.first()
261
281
subnet = self.subnets.first()
262
api.neutron.network_create(IsA(http.HttpRequest), name=network.name,
263
admin_state_up=network.admin_state_up)\
282
params = {'name': network.name,
283
'admin_state_up': network.admin_state_up}
284
# TODO(absubram): Remove if clause and create separate
285
# test stubs for when profile_support is being used.
286
# Additionally ensure those are always run even in default setting
287
if api.neutron.is_port_profiles_supported():
288
net_profiles = self.net_profiles.list()
289
net_profile_id = self.net_profiles.first().id
290
api.neutron.profile_list(IsA(http.HttpRequest),
291
'network').AndReturn(net_profiles)
292
params['net_profile_id'] = net_profile_id
293
api.neutron.network_create(IsA(http.HttpRequest),
294
**params).AndReturn(network)
265
295
api.neutron.subnet_create(IsA(http.HttpRequest),
266
296
network_id=network.id,
267
297
name=subnet.name,
275
305
form_data = {'net_name': network.name,
276
306
'admin_state': network.admin_state_up,
277
307
'with_subnet': True}
308
if api.neutron.is_port_profiles_supported():
309
form_data['net_profile_id'] = net_profile_id
278
310
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
279
311
url = reverse('horizon:project:networks:create')
280
312
res = self.client.post(url, form_data)
282
314
self.assertNoFormErrors(res)
283
315
self.assertRedirectsNoFollow(res, INDEX_URL)
285
@test.create_stubs({api.neutron: ('network_create',)})
317
@test.create_stubs({api.neutron: ('network_create',
286
319
def test_network_create_post_network_exception(self):
287
320
network = self.networks.first()
288
api.neutron.network_create(IsA(http.HttpRequest), name=network.name,
289
admin_state_up=network.admin_state_up)\
290
.AndRaise(self.exceptions.neutron)
321
params = {'name': network.name,
322
'admin_state_up': network.admin_state_up}
323
# TODO(absubram): Remove if clause and create separate
324
# test stubs for when profile_support is being used.
325
# Additionally ensure those are always run even in default setting
326
if api.neutron.is_port_profiles_supported():
327
net_profiles = self.net_profiles.list()
328
net_profile_id = self.net_profiles.first().id
329
api.neutron.profile_list(IsA(http.HttpRequest),
330
'network').AndReturn(net_profiles)
331
params['net_profile_id'] = net_profile_id
332
api.neutron.network_create(IsA(http.HttpRequest),
333
**params).AndRaise(self.exceptions.neutron)
291
334
self.mox.ReplayAll()
293
336
form_data = {'net_name': network.name,
294
337
'admin_state': network.admin_state_up,
296
339
'with_subnet': False}
340
if api.neutron.is_port_profiles_supported():
341
form_data['net_profile_id'] = net_profile_id
297
342
form_data.update(form_data_no_subnet())
298
343
url = reverse('horizon:project:networks:create')
299
344
res = self.client.post(url, form_data)
301
346
self.assertNoFormErrors(res)
302
347
self.assertRedirectsNoFollow(res, INDEX_URL)
304
@test.create_stubs({api.neutron: ('network_create',)})
349
@test.create_stubs({api.neutron: ('network_create',
305
351
def test_network_create_post_with_subnet_network_exception(self):
306
352
network = self.networks.first()
307
353
subnet = self.subnets.first()
308
api.neutron.network_create(IsA(http.HttpRequest), name=network.name,
309
admin_state_up=network.admin_state_up)\
310
.AndRaise(self.exceptions.neutron)
354
params = {'name': network.name,
355
'admin_state_up': network.admin_state_up}
356
# TODO(absubram): Remove if clause and create separate
357
# test stubs for when profile_support is being used.
358
# Additionally ensure those are always run even in default setting
359
if api.neutron.is_port_profiles_supported():
360
net_profiles = self.net_profiles.list()
361
net_profile_id = self.net_profiles.first().id
362
api.neutron.profile_list(IsA(http.HttpRequest),
363
'network').AndReturn(net_profiles)
364
params['net_profile_id'] = net_profile_id
365
api.neutron.network_create(IsA(http.HttpRequest),
366
**params).AndRaise(self.exceptions.neutron)
311
367
self.mox.ReplayAll()
313
369
form_data = {'net_name': network.name,
314
370
'admin_state': network.admin_state_up,
315
371
'with_subnet': True}
372
if api.neutron.is_port_profiles_supported():
373
form_data['net_profile_id'] = net_profile_id
316
374
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
317
375
url = reverse('horizon:project:networks:create')
318
376
res = self.client.post(url, form_data)
323
381
@test.create_stubs({api.neutron: ('network_create',
324
382
'network_delete',
326
385
def test_network_create_post_with_subnet_subnet_exception(self):
327
386
network = self.networks.first()
328
387
subnet = self.subnets.first()
329
api.neutron.network_create(IsA(http.HttpRequest), name=network.name,
330
admin_state_up=network.admin_state_up)\
388
params = {'name': network.name,
389
'admin_state_up': network.admin_state_up}
390
# TODO(absubram): Remove if clause and create separate
391
# test stubs for when profile_support is being used.
392
# Additionally ensure those are always run even in default setting
393
if api.neutron.is_port_profiles_supported():
394
net_profiles = self.net_profiles.list()
395
net_profile_id = self.net_profiles.first().id
396
api.neutron.profile_list(IsA(http.HttpRequest),
397
'network').AndReturn(net_profiles)
398
params['net_profile_id'] = net_profile_id
399
api.neutron.network_create(IsA(http.HttpRequest),
400
**params).AndReturn(network)
332
401
api.neutron.subnet_create(IsA(http.HttpRequest),
333
402
network_id=network.id,
334
403
name=subnet.name,
344
413
form_data = {'net_name': network.name,
345
414
'admin_state': network.admin_state_up,
346
415
'with_subnet': True}
416
if api.neutron.is_port_profiles_supported():
417
form_data['net_profile_id'] = net_profile_id
347
418
form_data.update(form_data_subnet(subnet, allocation_pools=[]))
348
419
url = reverse('horizon:project:networks:create')
349
420
res = self.client.post(url, form_data)
351
422
self.assertNoFormErrors(res)
352
423
self.assertRedirectsNoFollow(res, INDEX_URL)
425
@test.create_stubs({api.neutron: ('profile_list',)})
354
426
def test_network_create_post_with_subnet_nocidr(self):
355
427
network = self.networks.first()
356
428
subnet = self.subnets.first()
429
# TODO(absubram): Remove if clause and create separate
430
# test stubs for when profile_support is being used.
431
# Additionally ensure those are always run even in default setting
432
if api.neutron.is_port_profiles_supported():
433
net_profiles = self.net_profiles.list()
434
net_profile_id = self.net_profiles.first().id
435
api.neutron.profile_list(IsA(http.HttpRequest),
436
'network').AndReturn(net_profiles)
357
437
self.mox.ReplayAll()
359
439
form_data = {'net_name': network.name,
360
440
'admin_state': network.admin_state_up,
361
441
'with_subnet': True}
442
if api.neutron.is_port_profiles_supported():
443
form_data['net_profile_id'] = net_profile_id
362
444
form_data.update(form_data_subnet(subnet, cidr='',
363
445
allocation_pools=[]))
364
446
url = reverse('horizon:project:networks:create')
367
449
self.assertContains(res, escape('Specify "Network Address" or '
368
450
'clear "Create Subnet" checkbox.'))
452
@test.create_stubs({api.neutron: ('profile_list',)})
370
453
def test_network_create_post_with_subnet_cidr_without_mask(self):
371
454
network = self.networks.first()
372
455
subnet = self.subnets.first()
456
# TODO(absubram): Remove if clause and create separate
457
# test stubs for when profile_support is being used.
458
# Additionally ensure those are always run even in default setting
459
if api.neutron.is_port_profiles_supported():
460
net_profiles = self.net_profiles.list()
461
net_profile_id = self.net_profiles.first().id
462
api.neutron.profile_list(IsA(http.HttpRequest),
463
'network').AndReturn(net_profiles)
374
466
form_data = {'net_name': network.name,
375
467
'admin_state': network.admin_state_up,
376
468
'with_subnet': True}
469
if api.neutron.is_port_profiles_supported():
470
form_data['net_profile_id'] = net_profile_id
377
471
form_data.update(form_data_subnet(subnet, cidr='10.0.0.0',
378
472
allocation_pools=[]))
379
473
url = reverse('horizon:project:networks:create')
382
476
expected_msg = "The subnet in the Network Address is too small (/32)."
383
477
self.assertContains(res, expected_msg)
479
@test.create_stubs({api.neutron: ('profile_list',)})
385
480
def test_network_create_post_with_subnet_cidr_inconsistent(self):
386
481
network = self.networks.first()
387
482
subnet = self.subnets.first()
483
# TODO(absubram): Remove if clause and create separate
484
# test stubs for when profile_support is being used.
485
# Additionally ensure those are always run even in default setting
486
if api.neutron.is_port_profiles_supported():
487
net_profiles = self.net_profiles.list()
488
net_profile_id = self.net_profiles.first().id
489
api.neutron.profile_list(IsA(http.HttpRequest),
490
'network').AndReturn(net_profiles)
388
491
self.mox.ReplayAll()
390
493
# dummy IPv6 address
400
505
expected_msg = 'Network Address and IP version are inconsistent.'
401
506
self.assertContains(res, expected_msg)
508
@test.create_stubs({api.neutron: ('profile_list',)})
403
509
def test_network_create_post_with_subnet_gw_inconsistent(self):
404
510
network = self.networks.first()
405
511
subnet = self.subnets.first()
512
# TODO(absubram): Remove if clause and create separate
513
# test stubs for when profile_support is being used.
514
# Additionally ensure those are always run even in default setting
515
if api.neutron.is_port_profiles_supported():
516
net_profiles = self.net_profiles.list()
517
net_profile_id = self.net_profiles.first().id
518
api.neutron.profile_list(IsA(http.HttpRequest),
519
'network').AndReturn(net_profiles)
406
520
self.mox.ReplayAll()
408
522
# dummy IPv6 address
763
879
expected_msg = 'Network Address and IP version are inconsistent.'
764
880
self.assertFormErrors(res, 1, expected_msg)
765
self.assertTemplateUsed(res, WorkflowView.template_name)
881
self.assertTemplateUsed(res, views.WorkflowView.template_name)
767
883
@test.create_stubs({api.neutron: ('network_get',)})
768
884
def test_subnet_create_post_gw_inconsistent(self):