364
376
'volume_type': 'vol_type_name',
365
377
'snapshot_id': None,
378
'source_volid': None,
368
381
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1),
385
'href': 'http://localhost/v1/fake/volumes/1',
389
'href': 'http://localhost/fake/volumes/1',
373
396
self.assertEqual(res_dict, expected)
398
def test_volume_index_with_marker(self):
399
def stub_volume_get_all_by_project(context, project_id, marker, limit,
402
stubs.stub_volume(1, display_name='vol1'),
403
stubs.stub_volume(2, display_name='vol2'),
405
self.stubs.Set(db, 'volume_get_all_by_project',
406
stub_volume_get_all_by_project)
407
req = fakes.HTTPRequest.blank('/v2/volumes?marker=1')
408
res_dict = self.controller.index(req)
409
volumes = res_dict['volumes']
410
self.assertEquals(len(volumes), 2)
411
self.assertEquals(volumes[0]['id'], 1)
412
self.assertEquals(volumes[1]['id'], 2)
414
def test_volume_index_limit(self):
415
req = fakes.HTTPRequest.blank('/v2/volumes?limit=1')
416
res_dict = self.controller.index(req)
417
volumes = res_dict['volumes']
418
self.assertEquals(len(volumes), 1)
420
def test_volume_index_limit_negative(self):
421
req = fakes.HTTPRequest.blank('/v2/volumes?limit=-1')
422
self.assertRaises(webob.exc.HTTPBadRequest,
423
self.controller.index,
426
def test_volume_index_limit_non_int(self):
427
req = fakes.HTTPRequest.blank('/v2/volumes?limit=a')
428
self.assertRaises(webob.exc.HTTPBadRequest,
429
self.controller.index,
432
def test_volume_index_limit_marker(self):
433
req = fakes.HTTPRequest.blank('/v2/volumes?marker=1&limit=1')
434
res_dict = self.controller.index(req)
435
volumes = res_dict['volumes']
436
self.assertEquals(len(volumes), 1)
437
self.assertEquals(volumes[0]['id'], '1')
439
def test_volume_detail_with_marker(self):
440
def stub_volume_get_all_by_project(context, project_id, marker, limit,
443
stubs.stub_volume(1, display_name='vol1'),
444
stubs.stub_volume(2, display_name='vol2'),
446
self.stubs.Set(db, 'volume_get_all_by_project',
447
stub_volume_get_all_by_project)
448
req = fakes.HTTPRequest.blank('/v2/volumes/detail?marker=1')
449
res_dict = self.controller.index(req)
450
volumes = res_dict['volumes']
451
self.assertEquals(len(volumes), 2)
452
self.assertEquals(volumes[0]['id'], 1)
453
self.assertEquals(volumes[1]['id'], 2)
455
def test_volume_detail_limit(self):
456
req = fakes.HTTPRequest.blank('/v2/volumes/detail?limit=1')
457
res_dict = self.controller.index(req)
458
volumes = res_dict['volumes']
459
self.assertEquals(len(volumes), 1)
461
def test_volume_detail_limit_negative(self):
462
req = fakes.HTTPRequest.blank('/v2/volumes/detail?limit=-1')
463
self.assertRaises(webob.exc.HTTPBadRequest,
464
self.controller.index,
467
def test_volume_detail_limit_non_int(self):
468
req = fakes.HTTPRequest.blank('/v2/volumes/detail?limit=a')
469
self.assertRaises(webob.exc.HTTPBadRequest,
470
self.controller.index,
473
def test_volume_detail_limit_marker(self):
474
req = fakes.HTTPRequest.blank('/v2/volumes/detail?marker=1&limit=1')
475
res_dict = self.controller.index(req)
476
volumes = res_dict['volumes']
477
self.assertEquals(len(volumes), 1)
478
self.assertEquals(volumes[0]['id'], '1')
375
480
def test_volume_list_by_name(self):
376
def stub_volume_get_all_by_project(context, project_id):
481
def stub_volume_get_all_by_project(context, project_id, marker, limit,
378
fakes.stub_volume(1, display_name='vol1'),
379
fakes.stub_volume(2, display_name='vol2'),
380
fakes.stub_volume(3, display_name='vol3'),
484
stubs.stub_volume(1, display_name='vol1'),
485
stubs.stub_volume(2, display_name='vol2'),
486
stubs.stub_volume(3, display_name='vol3'),
382
488
self.stubs.Set(db, 'volume_get_all_by_project',
383
489
stub_volume_get_all_by_project)
385
# no display_name filter
386
492
req = fakes.HTTPRequest.blank('/v2/volumes')
387
493
resp = self.controller.index(req)
388
494
self.assertEqual(len(resp['volumes']), 3)
389
# filter on display_name
390
req = fakes.HTTPRequest.blank('/v2/volumes?display_name=vol2')
496
req = fakes.HTTPRequest.blank('/v2/volumes?name=vol2')
391
497
resp = self.controller.index(req)
392
498
self.assertEqual(len(resp['volumes']), 1)
393
self.assertEqual(resp['volumes'][0]['display_name'], 'vol2')
499
self.assertEqual(resp['volumes'][0]['name'], 'vol2')
394
500
# filter no match
395
req = fakes.HTTPRequest.blank('/v2/volumes?display_name=vol4')
501
req = fakes.HTTPRequest.blank('/v2/volumes?name=vol4')
396
502
resp = self.controller.index(req)
397
503
self.assertEqual(len(resp['volumes']), 0)
399
505
def test_volume_list_by_status(self):
400
def stub_volume_get_all_by_project(context, project_id):
506
def stub_volume_get_all_by_project(context, project_id, marker, limit,
402
fakes.stub_volume(1, display_name='vol1', status='available'),
403
fakes.stub_volume(2, display_name='vol2', status='available'),
404
fakes.stub_volume(3, display_name='vol3', status='in-use'),
509
stubs.stub_volume(1, display_name='vol1', status='available'),
510
stubs.stub_volume(2, display_name='vol2', status='available'),
511
stubs.stub_volume(3, display_name='vol3', status='in-use'),
406
513
self.stubs.Set(db, 'volume_get_all_by_project',
407
514
stub_volume_get_all_by_project)
408
515
# no status filter
409
req = fakes.HTTPRequest.blank('/v2/volumes')
410
resp = self.controller.index(req)
516
req = fakes.HTTPRequest.blank('/v2/volumes/details')
517
resp = self.controller.detail(req)
411
518
self.assertEqual(len(resp['volumes']), 3)
413
req = fakes.HTTPRequest.blank('/v2/volumes?status=in-use')
414
resp = self.controller.index(req)
520
req = fakes.HTTPRequest.blank('/v2/volumes/details?status=in-use')
521
resp = self.controller.detail(req)
415
522
self.assertEqual(len(resp['volumes']), 1)
416
523
self.assertEqual(resp['volumes'][0]['status'], 'in-use')
418
req = fakes.HTTPRequest.blank('/v2/volumes?status=available')
419
resp = self.controller.index(req)
525
req = fakes.HTTPRequest.blank('/v2/volumes/details/?status=available')
526
resp = self.controller.detail(req)
420
527
self.assertEqual(len(resp['volumes']), 2)
421
528
for volume in resp['volumes']:
422
529
self.assertEqual(volume['status'], 'available')
423
530
# multiple filters
424
req = fakes.HTTPRequest.blank('/v2/volumes?status=available&'
426
resp = self.controller.index(req)
531
req = fakes.HTTPRequest.blank('/v2/volumes/details/?status=available&'
533
resp = self.controller.detail(req)
427
534
self.assertEqual(len(resp['volumes']), 1)
428
self.assertEqual(resp['volumes'][0]['display_name'], 'vol1')
535
self.assertEqual(resp['volumes'][0]['name'], 'vol1')
429
536
self.assertEqual(resp['volumes'][0]['status'], 'available')
431
req = fakes.HTTPRequest.blank('/v2/volumes?status=in-use&'
433
resp = self.controller.index(req)
538
req = fakes.HTTPRequest.blank('/v2/volumes/details?status=in-use&'
540
resp = self.controller.detail(req)
434
541
self.assertEqual(len(resp['volumes']), 0)
436
543
def test_volume_show(self):