From 70f300ef40514f3e49c9c391e37e647382ac36e7 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Fri, 13 Jan 2012 11:22:50 -0800 Subject: [PATCH] Convert nova.volume.api.API to use volume objects Change-Id: If6b78f7de814116bc93b273ec300dba02e63593d --- nova/tests/test_compute.py | 40 ++--------------- nova/tests/test_volume.py | 81 ++++++++++++++++++---------------- nova/tests/test_vsa.py | 2 - nova/tests/test_vsa_volumes.py | 13 +++--- nova/vsa/api.py | 4 +- nova/vsa/manager.py | 2 +- 6 files changed, 58 insertions(+), 84 deletions(-) diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index bf36e743..06eaf8ef 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -2828,42 +2828,6 @@ class ComputeAPITestCase(BaseTestCase): None, '/dev/invalid') - def test_attach_volume(self): - instance_id = 1 - instance_uuid = utils.gen_uuid() - volume_id = 1 - - for device in ('/dev/sda', '/dev/xvda'): - # creating mocks - self.mox.StubOutWithMock(self.compute_api.volume_api, - 'check_attach') - self.mox.StubOutWithMock(self.compute_api, 'get') - self.mox.StubOutWithMock(rpc, 'cast') - - rpc.cast( - mox.IgnoreArg(), - mox.IgnoreArg(), {"method": "attach_volume", - "args": {'volume_id': volume_id, - 'instance_uuid': instance_uuid, - 'mountpoint': device}}) - - self.compute_api.volume_api.check_attach( - mox.IgnoreArg(), - volume_id=volume_id).AndReturn( - {'id': volume_id, 'status': 'available', - 'attach_status': 'detached'}) - - self.compute_api.get( - mox.IgnoreArg(), - mox.IgnoreArg()).AndReturn({ - 'id': instance_id, - 'uuid': instance_uuid, - 'host': 'fake'}) - - self.mox.ReplayAll() - self.compute_api.attach_volume(None, None, volume_id, device) - self.mox.UnsetStubs() - def test_vnc_console(self): """Make sure we can a vnc console for an instance.""" def vnc_rpc_call_wrapper(*args, **kwargs): @@ -2896,6 +2860,10 @@ class ComputeAPITestCase(BaseTestCase): def fake_check_attach(*args, **kwargs): pass + def fake_volume_get(self, context, volume_id): + return {'id': volume_id} + + self.stubs.Set(nova.volume.api.API, 'get', fake_volume_get) self.stubs.Set(nova.volume.api.API, 'check_attach', fake_check_attach) instance = self._create_fake_instance() diff --git a/nova/tests/test_volume.py b/nova/tests/test_volume.py index 6c81facf..aeefcd02 100644 --- a/nova/tests/test_volume.py +++ b/nova/tests/test_volume.py @@ -30,7 +30,7 @@ from nova import log as logging from nova import rpc from nova import test from nova import utils -from nova import volume +import nova.volume.api FLAGS = flags.FLAGS LOG = logging.getLogger('nova.tests.volume') @@ -62,11 +62,12 @@ class VolumeTestCase(test.TestCase): vol['availability_zone'] = FLAGS.storage_availability_zone vol['status'] = "creating" vol['attach_status'] = "detached" - return db.volume_create(context.get_admin_context(), vol)['id'] + return db.volume_create(context.get_admin_context(), vol) def test_create_delete_volume(self): """Test volume can be created and deleted.""" - volume_id = self._create_volume() + volume = self._create_volume() + volume_id = volume['id'] self.volume.create_volume(self.context, volume_id) self.assertEqual(volume_id, db.volume_get(context.get_admin_context(), volume_id).id) @@ -79,22 +80,24 @@ class VolumeTestCase(test.TestCase): def test_create_volume_from_snapshot(self): """Test volume can be created from a snapshot.""" - volume_src_id = self._create_volume() - self.volume.create_volume(self.context, volume_src_id) - snapshot_id = self._create_snapshot(volume_src_id) - self.volume.create_snapshot(self.context, volume_src_id, snapshot_id) - volume_dst_id = self._create_volume(0, snapshot_id) - self.volume.create_volume(self.context, volume_dst_id, snapshot_id) - self.assertEqual(volume_dst_id, db.volume_get( - context.get_admin_context(), - volume_dst_id).id) + volume_src = self._create_volume() + self.volume.create_volume(self.context, volume_src['id']) + snapshot_id = self._create_snapshot(volume_src['id']) + self.volume.create_snapshot(self.context, volume_src['id'], + snapshot_id) + volume_dst = self._create_volume(0, snapshot_id) + self.volume.create_volume(self.context, volume_dst['id'], snapshot_id) + self.assertEqual(volume_dst['id'], + db.volume_get( + context.get_admin_context(), + volume_dst['id']).id) self.assertEqual(snapshot_id, db.volume_get( context.get_admin_context(), - volume_dst_id).snapshot_id) + volume_dst['id']).snapshot_id) - self.volume.delete_volume(self.context, volume_dst_id) + self.volume.delete_volume(self.context, volume_dst['id']) self.volume.delete_snapshot(self.context, snapshot_id) - self.volume.delete_volume(self.context, volume_src_id) + self.volume.delete_volume(self.context, volume_src['id']) def test_too_big_volume(self): """Ensure failure if a too large of a volume is requested.""" @@ -102,8 +105,8 @@ class VolumeTestCase(test.TestCase): # volume_create return True try: - volume_id = self._create_volume('1001') - self.volume.create_volume(self.context, volume_id) + volume = self._create_volume('1001') + self.volume.create_volume(self.context, volume) self.fail("Should have thrown TypeError") except TypeError: pass @@ -113,15 +116,15 @@ class VolumeTestCase(test.TestCase): vols = [] total_slots = FLAGS.iscsi_num_targets for _index in xrange(total_slots): - volume_id = self._create_volume() - self.volume.create_volume(self.context, volume_id) - vols.append(volume_id) - volume_id = self._create_volume() + volume = self._create_volume() + self.volume.create_volume(self.context, volume['id']) + vols.append(volume['id']) + volume = self._create_volume() self.assertRaises(db.NoMoreTargets, self.volume.create_volume, self.context, - volume_id) - db.volume_destroy(context.get_admin_context(), volume_id) + volume['id']) + db.volume_destroy(context.get_admin_context(), volume['id']) for volume_id in vols: self.volume.delete_volume(self.context, volume_id) @@ -137,7 +140,8 @@ class VolumeTestCase(test.TestCase): inst['ami_launch_index'] = 0 instance_id = db.instance_create(self.context, inst)['id'] mountpoint = "/dev/sdf" - volume_id = self._create_volume() + volume = self._create_volume() + volume_id = volume['id'] self.volume.create_volume(self.context, volume_id) if FLAGS.fake_tests: db.volume_attached(self.context, volume_id, instance_id, @@ -190,8 +194,8 @@ class VolumeTestCase(test.TestCase): LOG.debug(_("Target %s allocated"), iscsi_target) total_slots = FLAGS.iscsi_num_targets for _index in xrange(total_slots): - volume_id = self._create_volume() - d = self.volume.create_volume(self.context, volume_id) + volume = self._create_volume() + d = self.volume.create_volume(self.context, volume['id']) _check(d) for volume_id in volume_ids: self.volume.delete_volume(self.context, volume_id) @@ -215,10 +219,10 @@ class VolumeTestCase(test.TestCase): def test_create_delete_snapshot(self): """Test snapshot can be created and deleted.""" - volume_id = self._create_volume() - self.volume.create_volume(self.context, volume_id) - snapshot_id = self._create_snapshot(volume_id) - self.volume.create_snapshot(self.context, volume_id, snapshot_id) + volume = self._create_volume() + self.volume.create_volume(self.context, volume['id']) + snapshot_id = self._create_snapshot(volume['id']) + self.volume.create_snapshot(self.context, volume['id'], snapshot_id) self.assertEqual(snapshot_id, db.snapshot_get(context.get_admin_context(), snapshot_id).id) @@ -228,7 +232,7 @@ class VolumeTestCase(test.TestCase): db.snapshot_get, self.context, snapshot_id) - self.volume.delete_volume(self.context, volume_id) + self.volume.delete_volume(self.context, volume['id']) def test_create_snapshot_force(self): """Test snapshot in use can be created forcibly.""" @@ -237,22 +241,23 @@ class VolumeTestCase(test.TestCase): pass self.stubs.Set(rpc, 'cast', fake_cast) - volume_id = self._create_volume() - self.volume.create_volume(self.context, volume_id) - db.volume_attached(self.context, volume_id, self.instance_id, + volume = self._create_volume() + self.volume.create_volume(self.context, volume['id']) + db.volume_attached(self.context, volume['id'], self.instance_id, '/dev/sda1') - volume_api = volume.api.API() + volume_api = nova.volume.api.API() + volume = volume_api.get(self.context, volume['id']) self.assertRaises(exception.ApiError, volume_api.create_snapshot, - self.context, volume_id, + self.context, volume, 'fake_name', 'fake_description') snapshot_ref = volume_api.create_snapshot_force(self.context, - volume_id, + volume, 'fake_name', 'fake_description') db.snapshot_destroy(self.context, snapshot_ref['id']) - db.volume_destroy(self.context, volume_id) + db.volume_destroy(self.context, volume['id']) class DriverTestCase(test.TestCase): diff --git a/nova/tests/test_vsa.py b/nova/tests/test_vsa.py index d7c8f09f..13287461 100644 --- a/nova/tests/test_vsa.py +++ b/nova/tests/test_vsa.py @@ -24,7 +24,6 @@ from nova import flags from nova import log as logging from nova import test from nova import vsa -from nova import volume from nova.volume import volume_types from nova.vsa import utils as vsa_utils @@ -40,7 +39,6 @@ class VsaTestCase(test.TestCase): super(VsaTestCase, self).setUp() self.stubs = stubout.StubOutForTesting() self.vsa_api = vsa.API() - self.volume_api = volume.API() FLAGS.quota_volumes = 100 FLAGS.quota_gigabytes = 10000 diff --git a/nova/tests/test_vsa_volumes.py b/nova/tests/test_vsa_volumes.py index ef6396ff..7840dd48 100644 --- a/nova/tests/test_vsa_volumes.py +++ b/nova/tests/test_vsa_volumes.py @@ -56,7 +56,7 @@ class VsaVolumesTestCase(test.TestCase): def _default_volume_param(self): return { 'size': 1, - 'snapshot_id': None, + 'snapshot': None, 'name': 'Test volume name', 'description': 'Test volume desc name', 'volume_type': self.default_vol_type, @@ -95,8 +95,10 @@ class VsaVolumesTestCase(test.TestCase): 'creating') self.volume_api.update(self.context, - volume_ref['id'], {'status': 'available'}) - self.volume_api.delete(self.context, volume_ref['id']) + volume_ref, + {'status': 'available'}) + volume_ref = self.volume_api.get(self.context, volume_ref['id']) + self.volume_api.delete(self.context, volume_ref) vols3 = self._get_all_volumes_by_vsa() self.assertEqual(1, len(vols2)) @@ -110,10 +112,11 @@ class VsaVolumesTestCase(test.TestCase): volume_ref = self.volume_api.create(self.context, **volume_param) self.volume_api.update(self.context, - volume_ref['id'], {'status': 'in-use'}) + volume_ref, + {'status': 'in-use'}) self.assertRaises(exception.ApiError, self.volume_api.delete, - self.context, volume_ref['id']) + self.context, volume_ref) def test_vsa_volume_delete_vsa_with_volumes(self): """ Check volume deleton in different states. """ diff --git a/nova/vsa/api.py b/nova/vsa/api.py index 9f17b6e4..27baff15 100644 --- a/nova/vsa/api.py +++ b/nova/vsa/api.py @@ -246,9 +246,9 @@ class API(base.Base): vol_ref = self.volume_api.create(context, vol_size, - None, vol_name, vol['description'], + None, volume_type=vol_type, metadata=dict(to_vsa_id=str(vsa_id)), availability_zone=availability_zone) @@ -349,7 +349,7 @@ class API(base.Base): vol_name = volume['name'] LOG.info(_("VSA ID %(vsa_id)s: Deleting %(direction)s "\ "volume %(vol_name)s"), locals()) - self.volume_api.delete(context, volume['id']) + self.volume_api.delete(context, volume) except exception.ApiError: LOG.info(_("Unable to delete volume %s"), volume['name']) if force_delete: diff --git a/nova/vsa/manager.py b/nova/vsa/manager.py index d4c41410..850d9958 100644 --- a/nova/vsa/manager.py +++ b/nova/vsa/manager.py @@ -136,7 +136,7 @@ class VsaManager(manager.SchedulerDependentManager): locals()) if status == 'available': try: - # self.volume_api.update(context, volume['id'], + # self.volume_api.update(context, volume, # dict(attach_status="attached")) pass except Exception as ex: