diff --git a/cinder/tests/unit/test_rbd.py b/cinder/tests/unit/test_rbd.py index 4e59a6e92b2..a6583e4c10e 100644 --- a/cinder/tests/unit/test_rbd.py +++ b/cinder/tests/unit/test_rbd.py @@ -15,7 +15,7 @@ # License for the specific language governing permissions and limitations # under the License. - +import ddt import math import os import tempfile @@ -122,6 +122,7 @@ CEPH_MON_DUMP = """dumped monmap epoch 1 """ +@ddt.ddt class RBDTestCase(test.TestCase): def setUp(self): @@ -154,6 +155,17 @@ class RBDTestCase(test.TestCase): self.snapshot = dict(volume_name=self.volume_name, name=self.snapshot_name) + @ddt.data({'cluster_name': None, 'pool_name': 'rbd'}, + {'cluster_name': 'volumes', 'pool_name': None}) + @ddt.unpack + def test_min_config(self, cluster_name, pool_name): + self.cfg.rbd_cluster_name = cluster_name + self.cfg.rbd_pool = pool_name + + with mock.patch('cinder.volume.drivers.rbd.rados'): + self.assertRaises(exception.InvalidConfigurationValue, + self.driver.check_for_setup_error) + @common_mocks def test_create_volume(self): client = self.mock_client.return_value diff --git a/cinder/volume/drivers/rbd.py b/cinder/volume/drivers/rbd.py index 33c8f3d7344..27d2ae48f14 100644 --- a/cinder/volume/drivers/rbd.py +++ b/cinder/volume/drivers/rbd.py @@ -290,6 +290,11 @@ class RBDDriver(driver.TransferVD, driver.ExtendVD, msg = _('rados and rbd python libraries not found') raise exception.VolumeBackendAPIException(data=msg) + for attr in ['rbd_cluster_name', 'rbd_pool']: + val = getattr(self.configuration, attr) + if not val: + raise exception.InvalidConfigurationValue(option=attr, + value=val) # NOTE: Checking connection to ceph # RADOSClient __init__ method invokes _connect_to_rados # so no need to check for self.rados.Error here.