summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-16 01:16:02 +0000
committerGerrit Code Review <review@openstack.org>2012-08-16 01:16:02 +0000
commitbc115f003ddf7b8a825f0303bdf290a19c39f134 (patch)
tree3fe5061feef38f9686a244f07ffaede96a6db1bc /nova/tests
parente364c9086b3adf793d79c44062d5a9e17943e887 (diff)
parente44751162b09c5b57557b89db27656b5bd23341c (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.py94
-rw-r--r--nova/tests/compute/test_rpcapi.py4
-rw-r--r--nova/tests/test_metadata.py3
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)