diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-16 01:16:02 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-16 01:16:02 +0000 |
| commit | bc115f003ddf7b8a825f0303bdf290a19c39f134 (patch) | |
| tree | 3fe5061feef38f9686a244f07ffaede96a6db1bc /nova/tests | |
| parent | e364c9086b3adf793d79c44062d5a9e17943e887 (diff) | |
| parent | e44751162b09c5b57557b89db27656b5bd23341c (diff) | |
Merge "Allow nova to guess device if not passed to attach"
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/compute/test_compute_utils.py | 94 | ||||
| -rw-r--r-- | nova/tests/compute/test_rpcapi.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_metadata.py | 3 |
3 files changed, 100 insertions, 1 deletions
diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py index 40e1947e6..7ae692bb6 100644 --- a/nova/tests/compute/test_compute_utils.py +++ b/nova/tests/compute/test_compute_utils.py @@ -17,10 +17,13 @@ """Tests For miscellaneous util methods used with compute.""" +import string + from nova.compute import instance_types from nova.compute import utils as compute_utils from nova import context from nova import db +from nova import exception from nova import flags from nova.openstack.common import importutils from nova.openstack.common import log as logging @@ -37,6 +40,97 @@ FLAGS = flags.FLAGS flags.DECLARE('stub_network', 'nova.compute.manager') +class ComputeValidateDeviceTestCase(test.TestCase): + def setUp(self): + super(ComputeValidateDeviceTestCase, self).setUp() + self.context = context.RequestContext('fake', 'fake') + self.instance = { + 'uuid': 'fake', + 'root_device_name': '/dev/vda', + 'default_ephemeral_device': '/dev/vdb' + } + + def _validate_device(self, device=None): + return compute_utils.get_device_name_for_instance(self.context, + self.instance, + device) + + @staticmethod + def _fake_bdm(device): + return { + 'device_name': device, + 'no_device': None, + 'volume_id': 'fake', + 'snapshot_id': None + } + + def test_wrap(self): + data = [] + for letter in string.ascii_lowercase[2:]: + data.append(self._fake_bdm('/dev/vd' + letter)) + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: data) + device = self._validate_device() + self.assertEqual(device, '/dev/vdaa') + + def test_wrap_plus_one(self): + data = [] + for letter in string.ascii_lowercase[2:]: + data.append(self._fake_bdm('/dev/vd' + letter)) + data.append(self._fake_bdm('/dev/vdaa')) + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: data) + device = self._validate_device() + self.assertEqual(device, '/dev/vdab') + + def test_later(self): + data = [ + self._fake_bdm('/dev/vdc'), + self._fake_bdm('/dev/vdd'), + self._fake_bdm('/dev/vde'), + ] + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: data) + device = self._validate_device() + self.assertEqual(device, '/dev/vdf') + + def test_gap(self): + data = [ + self._fake_bdm('/dev/vdc'), + self._fake_bdm('/dev/vde'), + ] + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: data) + device = self._validate_device() + self.assertEqual(device, '/dev/vdd') + + def test_no_bdms(self): + data = [] + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: data) + device = self._validate_device() + self.assertEqual(device, '/dev/vdc') + + def test_invalid_bdms(self): + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: []) + self.instance['root_device_name'] = "baddata" + self.assertRaises(exception.InvalidDevicePath, + self._validate_device) + + def test_invalid_device_prefix(self): + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: []) + self.assertRaises(exception.InvalidDevicePath, + self._validate_device, '/baddata/vdc') + + def test_device_in_use(self): + self.stubs.Set(db, 'block_device_mapping_get_all_by_instance', + lambda context, instance: []) + self.assertRaises(exception.DevicePathInUse, + self._validate_device, '/dev/vdb') + + class UsageInfoTestCase(test.TestCase): def setUp(self): diff --git a/nova/tests/compute/test_rpcapi.py b/nova/tests/compute/test_rpcapi.py index e88cb2096..38849d3ed 100644 --- a/nova/tests/compute/test_rpcapi.py +++ b/nova/tests/compute/test_rpcapi.py @@ -232,6 +232,10 @@ class ComputeRpcAPITestCase(test.TestCase): injected_files='files', image_ref='ref', orig_image_ref='orig_ref', version='1.24') + def test_reserve_block_device_name(self): + self._test_compute_api('reserve_block_device_name', 'call', + instance=self.fake_instance, device='device', version='1.44') + def refresh_provider_fw_rules(self): self._test_compute_api('refresh_provider_fw_rules', 'cast', host='host') diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py index b9b67326c..13be9e056 100644 --- a/nova/tests/test_metadata.py +++ b/nova/tests/test_metadata.py @@ -27,6 +27,7 @@ import webob from nova.api.metadata import base from nova.api.metadata import handler +from nova import block_device from nova import db from nova.db.sqlalchemy import api from nova import exception @@ -183,7 +184,7 @@ class MetadataTestCase(test.TestCase): 'ebs0': '/dev/sdh'} self.assertEqual(base._format_instance_mapping(ctxt, instance_ref0), - base._DEFAULT_MAPPINGS) + block_device._DEFAULT_MAPPINGS) self.assertEqual(base._format_instance_mapping(ctxt, instance_ref1), expected) |
