diff options
| author | John Griffith <john.griffith@solidfire.com> | 2012-04-12 20:36:48 -0600 |
|---|---|---|
| committer | John Griffith <john.griffith@solidfire.com> | 2012-05-02 13:32:19 -0600 |
| commit | 407e16b863bac1dfbf4e954837009abf9c17f018 (patch) | |
| tree | 10af13810b6746c0fad249b42d3f71466ca87428 /nova/tests | |
| parent | ca2bb061a728bb5db8781f298c18c980d9d91863 (diff) | |
Convert Volume and Snapshot IDs to use UUID
* Three migrations
1. create id mappings
2. convert volume_id and snapshot_id from int to string
3. change volume/snapshot id's from int to uuid
* DB migration for Volume and Related tables
* Addition of new volume id mapping tables
* Added methods in ec2utils
* Minor tweaks to unit tests
* Other changes to migration to ensure consistency in id's
* Fixed bug in the block-device-mapping table (wasn't setting autoinc)
Change-Id: Ic6c3646e0f01c26467a4a3c20e13eebaa2baa97e
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/api/ec2/test_cloud.py | 23 | ||||
| -rw-r--r-- | nova/tests/api/ec2/test_ec2_validate.py | 17 | ||||
| -rw-r--r-- | nova/tests/integrated/test_volumes.py | 12 | ||||
| -rw-r--r-- | nova/tests/test_bdm.py | 25 | ||||
| -rw-r--r-- | nova/tests/test_compute.py | 45 | ||||
| -rw-r--r-- | nova/tests/test_volume.py | 15 |
6 files changed, 82 insertions, 55 deletions
diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py index 7b6fb34c2..52d0a5a6e 100644 --- a/nova/tests/api/ec2/test_cloud.py +++ b/nova/tests/api/ec2/test_cloud.py @@ -596,7 +596,8 @@ class CloudTestCase(test.TestCase): volume_id=[volume_id]) self.assertEqual(len(result['volumeSet']), 1) self.assertEqual( - ec2utils.ec2_id_to_id(result['volumeSet'][0]['volumeId']), + ec2utils.ec2_vol_id_to_uuid( + result['volumeSet'][0]['volumeId']), vol2['id']) db.volume_destroy(self.context, vol1['id']) db.volume_destroy(self.context, vol2['id']) @@ -669,7 +670,8 @@ class CloudTestCase(test.TestCase): snapshot_id=[snapshot_id]) self.assertEqual(len(result['snapshotSet']), 1) self.assertEqual( - ec2utils.ec2_id_to_id(result['snapshotSet'][0]['snapshotId']), + ec2utils.ec2_snap_id_to_uuid( + result['snapshotSet'][0]['snapshotId']), snap2['id']) db.snapshot_destroy(self.context, snap1['id']) db.snapshot_destroy(self.context, snap2['id']) @@ -998,6 +1000,7 @@ class CloudTestCase(test.TestCase): db.instance_destroy(self.context, inst2['id']) db.instance_destroy(self.context, inst1['id']) + # NOTE(jdg) Modified expected volume_id's to string _expected_instance_bdm1 = { 'instanceId': 'i-00000001', 'rootDeviceName': '/dev/sdb1', @@ -1007,32 +1010,32 @@ class CloudTestCase(test.TestCase): {'deviceName': '/dev/sdb1', 'ebs': {'status': 'in-use', 'deleteOnTermination': False, - 'volumeId': 2, + 'volumeId': '2', }}, {'deviceName': '/dev/sdb2', 'ebs': {'status': 'in-use', 'deleteOnTermination': False, - 'volumeId': 3, + 'volumeId': '3', }}, {'deviceName': '/dev/sdb3', 'ebs': {'status': 'in-use', 'deleteOnTermination': True, - 'volumeId': 5, + 'volumeId': '5', }}, {'deviceName': '/dev/sdb4', 'ebs': {'status': 'in-use', 'deleteOnTermination': False, - 'volumeId': 7, + 'volumeId': '7', }}, {'deviceName': '/dev/sdb5', 'ebs': {'status': 'in-use', 'deleteOnTermination': False, - 'volumeId': 9, + 'volumeId': '9', }}, {'deviceName': '/dev/sdb6', 'ebs': {'status': 'in-use', 'deleteOnTermination': False, - 'volumeId': 11, }}] + 'volumeId': '11', }}] # NOTE(yamahata): swap/ephemeral device case isn't supported yet. _expected_instance_bdm2 = { @@ -2030,9 +2033,9 @@ class CloudTestCase(test.TestCase): ec2_volume_id = ec2utils.id_to_ec2_vol_id(vol['id']) ec2_snapshot1_id = self._create_snapshot(ec2_volume_id) - snapshot1_id = ec2utils.ec2_id_to_id(ec2_snapshot1_id) + snapshot1_id = ec2utils.ec2_snap_id_to_uuid(ec2_snapshot1_id) ec2_snapshot2_id = self._create_snapshot(ec2_volume_id) - snapshot2_id = ec2utils.ec2_id_to_id(ec2_snapshot2_id) + snapshot2_id = ec2utils.ec2_snap_id_to_uuid(ec2_snapshot2_id) kwargs = {'image_id': 'ami-1', 'instance_type': FLAGS.default_instance_type, diff --git a/nova/tests/api/ec2/test_ec2_validate.py b/nova/tests/api/ec2/test_ec2_validate.py index 3765c9425..ae494ccde 100644 --- a/nova/tests/api/ec2/test_ec2_validate.py +++ b/nova/tests/api/ec2/test_ec2_validate.py @@ -107,23 +107,6 @@ class EC2ValidateTestCase(test.TestCase): context=self.context, instance_id=[ec2_id]) - def test_attach_volume(self): - for ec2_id, e in self.ec2_id_exception_map: - self.assertRaises(e, - self.cloud.attach_volume, - context=self.context, - volume_id='i-1234', - instance_id=ec2_id, - device='/dev/vdc') - #missing instance error gets priority - for ec2_id, e in self.ec2_id_exception_map: - self.assertRaises(e, - self.cloud.attach_volume, - context=self.context, - volume_id=ec2_id, - instance_id='i-1234', - device='/dev/vdc') - def test_describe_instance_attribute(self): for ec2_id, e in self.ec2_id_exception_map: self.assertRaises(e, diff --git a/nova/tests/integrated/test_volumes.py b/nova/tests/integrated/test_volumes.py index 8ad2e2bef..5e61f759f 100644 --- a/nova/tests/integrated/test_volumes.py +++ b/nova/tests/integrated/test_volumes.py @@ -118,29 +118,29 @@ class VolumesTest(integrated_helpers._IntegratedTestBase): create_actions = driver.LoggingVolumeDriver.logs_like( 'create_volume', - id=int(created_volume_id)) + id=created_volume_id) LOG.debug("Create_Actions: %s" % create_actions) self.assertEquals(1, len(create_actions)) create_action = create_actions[0] - self.assertEquals(create_action['id'], int(created_volume_id)) + self.assertEquals(create_action['id'], created_volume_id) self.assertEquals(create_action['availability_zone'], 'nova') self.assertEquals(create_action['size'], 1) export_actions = driver.LoggingVolumeDriver.logs_like( 'create_export', - id=int(created_volume_id)) + id=created_volume_id) self.assertEquals(1, len(export_actions)) export_action = export_actions[0] - self.assertEquals(export_action['id'], int(created_volume_id)) + self.assertEquals(export_action['id'], created_volume_id) self.assertEquals(export_action['availability_zone'], 'nova') delete_actions = driver.LoggingVolumeDriver.logs_like( 'delete_volume', - id=int(created_volume_id)) + id=created_volume_id) self.assertEquals(1, len(delete_actions)) delete_action = export_actions[0] - self.assertEquals(delete_action['id'], int(created_volume_id)) + self.assertEquals(delete_action['id'], created_volume_id) def test_create_volume_with_metadata(self): """Creates a volume with metadata.""" diff --git a/nova/tests/test_bdm.py b/nova/tests/test_bdm.py index eec412d21..381ed8070 100644 --- a/nova/tests/test_bdm.py +++ b/nova/tests/test_bdm.py @@ -20,23 +20,40 @@ Tests for Block Device Mapping Code. """ from nova.api.ec2 import cloud +from nova.api.ec2 import ec2utils from nova import test class BlockDeviceMappingEc2CloudTestCase(test.TestCase): """Test Case for Block Device Mapping""" + def fake_ec2_vol_id_to_uuid(obj, ec2_id): + if ec2_id == 'snap-12345678': + return '00000000-1111-2222-3333-444444444444' + elif ec2_id == 'snap-23456789': + return '11111111-2222-3333-4444-555555555555' + elif ec2_id == 'vol-87654321': + return '22222222-3333-4444-5555-666666666666' + elif ec2_id == 'vol-98765432': + return '77777777-8888-9999-0000-aaaaaaaaaaaa' + else: + return 'OhNoooo' + def _assertApply(self, action, bdm_list): for bdm, expected_result in bdm_list: self.assertDictMatch(action(bdm), expected_result) def test_parse_block_device_mapping(self): + self.stubs.Set(ec2utils, + 'ec2_vol_id_to_uuid', + self.fake_ec2_vol_id_to_uuid) + bdm_list = [ ({'device_name': '/dev/fake0', 'ebs': {'snapshot_id': 'snap-12345678', 'volume_size': 1}}, {'device_name': '/dev/fake0', - 'snapshot_id': 0x12345678, + 'snapshot_id': '00000000-1111-2222-3333-444444444444', 'volume_size': 1, 'delete_on_termination': True}), @@ -44,14 +61,14 @@ class BlockDeviceMappingEc2CloudTestCase(test.TestCase): 'ebs': {'snapshot_id': 'snap-23456789', 'delete_on_termination': False}}, {'device_name': '/dev/fake1', - 'snapshot_id': 0x23456789, + 'snapshot_id': '11111111-2222-3333-4444-555555555555', 'delete_on_termination': False}), ({'device_name': '/dev/fake2', 'ebs': {'snapshot_id': 'vol-87654321', 'volume_size': 2}}, {'device_name': '/dev/fake2', - 'volume_id': 0x87654321, + 'volume_id': '22222222-3333-4444-5555-666666666666', 'volume_size': 2, 'delete_on_termination': True}), @@ -59,7 +76,7 @@ class BlockDeviceMappingEc2CloudTestCase(test.TestCase): 'ebs': {'snapshot_id': 'vol-98765432', 'delete_on_termination': False}}, {'device_name': '/dev/fake3', - 'volume_id': 0x98765432, + 'volume_id': '77777777-8888-9999-0000-aaaaaaaaaaaa', 'delete_on_termination': False}), ({'device_name': '/dev/fake4', diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index ca159c891..b6b227168 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -1406,9 +1406,9 @@ class ComputeTestCase(BaseTestCase): c = context.get_admin_context() topic = db.queue_get_for(c, FLAGS.compute_topic, inst_ref['host']) + # creating volume testdata - volume_id = 1 - db.volume_create(c, {'id': volume_id}) + volume_id = db.volume_create(c, {'size': 1})['id'] values = {'instance_uuid': inst_ref['uuid'], 'device_name': '/dev/vdc', 'delete_on_termination': False, 'volume_id': volume_id} db.block_device_mapping_create(c, values) @@ -1428,6 +1428,7 @@ class ComputeTestCase(BaseTestCase): 'block_migration': True, 'disk': None} }).AndRaise(rpc.common.RemoteError('', '', '')) + # mocks for rollback rpc.call(c, 'network', {'method': 'setup_networks_on_host', 'args': {'instance_id': inst_ref['id'], @@ -3063,36 +3064,36 @@ class ComputeAPITestCase(BaseTestCase): block_device_mapping = [ # root {'device_name': '/dev/sda1', - 'snapshot_id': 0x12345678, + 'snapshot_id': '00000000-aaaa-bbbb-cccc-000000000000', 'delete_on_termination': False}, # overwrite swap {'device_name': '/dev/sdb2', - 'snapshot_id': 0x23456789, + 'snapshot_id': '11111111-aaaa-bbbb-cccc-111111111111', 'delete_on_termination': False}, {'device_name': '/dev/sdb3', - 'snapshot_id': 0x3456789A}, + 'snapshot_id': '22222222-aaaa-bbbb-cccc-222222222222'}, {'device_name': '/dev/sdb4', 'no_device': True}, # overwrite ephemeral {'device_name': '/dev/sdc2', - 'snapshot_id': 0x456789AB, + 'snapshot_id': '33333333-aaaa-bbbb-cccc-333333333333', 'delete_on_termination': False}, {'device_name': '/dev/sdc3', - 'snapshot_id': 0x56789ABC}, + 'snapshot_id': '44444444-aaaa-bbbb-cccc-444444444444'}, {'device_name': '/dev/sdc4', 'no_device': True}, # volume {'device_name': '/dev/sdd1', - 'snapshot_id': 0x87654321, + 'snapshot_id': '55555555-aaaa-bbbb-cccc-555555555555', 'delete_on_termination': False}, {'device_name': '/dev/sdd2', - 'snapshot_id': 0x98765432}, + 'snapshot_id': '66666666-aaaa-bbbb-cccc-666666666666'}, {'device_name': '/dev/sdd3', - 'snapshot_id': 0xA9875463}, + 'snapshot_id': '77777777-aaaa-bbbb-cccc-777777777777'}, {'device_name': '/dev/sdd4', 'no_device': True}] @@ -3123,22 +3124,30 @@ class ComputeAPITestCase(BaseTestCase): for bdm_ref in db.block_device_mapping_get_all_by_instance( self.context, instance['uuid'])] expected_result = [ - {'snapshot_id': 0x12345678, 'device_name': '/dev/sda1'}, + {'snapshot_id': '00000000-aaaa-bbbb-cccc-000000000000', + 'device_name': '/dev/sda1'}, {'virtual_name': 'swap', 'device_name': '/dev/sdb1', 'volume_size': swap_size}, - {'snapshot_id': 0x23456789, 'device_name': '/dev/sdb2'}, - {'snapshot_id': 0x3456789A, 'device_name': '/dev/sdb3'}, + {'snapshot_id': '11111111-aaaa-bbbb-cccc-111111111111', + 'device_name': '/dev/sdb2'}, + {'snapshot_id': '22222222-aaaa-bbbb-cccc-222222222222', + 'device_name': '/dev/sdb3'}, {'no_device': True, 'device_name': '/dev/sdb4'}, {'virtual_name': 'ephemeral0', 'device_name': '/dev/sdc1'}, - {'snapshot_id': 0x456789AB, 'device_name': '/dev/sdc2'}, - {'snapshot_id': 0x56789ABC, 'device_name': '/dev/sdc3'}, + {'snapshot_id': '33333333-aaaa-bbbb-cccc-333333333333', + 'device_name': '/dev/sdc2'}, + {'snapshot_id': '44444444-aaaa-bbbb-cccc-444444444444', + 'device_name': '/dev/sdc3'}, {'no_device': True, 'device_name': '/dev/sdc4'}, - {'snapshot_id': 0x87654321, 'device_name': '/dev/sdd1'}, - {'snapshot_id': 0x98765432, 'device_name': '/dev/sdd2'}, - {'snapshot_id': 0xA9875463, 'device_name': '/dev/sdd3'}, + {'snapshot_id': '55555555-aaaa-bbbb-cccc-555555555555', + 'device_name': '/dev/sdd1'}, + {'snapshot_id': '66666666-aaaa-bbbb-cccc-666666666666', + 'device_name': '/dev/sdd2'}, + {'snapshot_id': '77777777-aaaa-bbbb-cccc-777777777777', + 'device_name': '/dev/sdd3'}, {'no_device': True, 'device_name': '/dev/sdd4'}] bdms.sort() expected_result.sort() diff --git a/nova/tests/test_volume.py b/nova/tests/test_volume.py index af3ba9f64..ece04f89f 100644 --- a/nova/tests/test_volume.py +++ b/nova/tests/test_volume.py @@ -67,6 +67,21 @@ class VolumeTestCase(test.TestCase): vol['attach_status'] = "detached" return db.volume_create(context.get_admin_context(), vol) + def test_ec2_uuid_mapping(self): + ec2_vol = db.ec2_volume_create(context.get_admin_context(), + 'aaaaaaaa-bbbb-bbbb-bbbb-aaaaaaaaaaaa', 5) + self.assertEqual(5, ec2_vol['id']) + self.assertEqual('aaaaaaaa-bbbb-bbbb-bbbb-aaaaaaaaaaaa', + db.get_volume_uuid_by_ec2_id(context.get_admin_context(), 5)) + + ec2_vol = db.ec2_volume_create(context.get_admin_context(), + 'aaaaaaaa-bbbb-bbbb-bbbb-aaaaaaaaaaaa', 1) + self.assertEqual(1, ec2_vol['id']) + + ec2_vol = db.ec2_volume_create(context.get_admin_context(), + 'aaaaaaaa-bbbb-bbbb-bbbb-aaaaaaaaazzz') + self.assertEqual(6, ec2_vol['id']) + def test_create_delete_volume(self): """Test volume can be created and deleted.""" volume = self._create_volume() |
