summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJohn Griffith <john.griffith@solidfire.com>2012-04-12 20:36:48 -0600
committerJohn Griffith <john.griffith@solidfire.com>2012-05-02 13:32:19 -0600
commit407e16b863bac1dfbf4e954837009abf9c17f018 (patch)
tree10af13810b6746c0fad249b42d3f71466ca87428 /nova/tests
parentca2bb061a728bb5db8781f298c18c980d9d91863 (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.py23
-rw-r--r--nova/tests/api/ec2/test_ec2_validate.py17
-rw-r--r--nova/tests/integrated/test_volumes.py12
-rw-r--r--nova/tests/test_bdm.py25
-rw-r--r--nova/tests/test_compute.py45
-rw-r--r--nova/tests/test_volume.py15
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()