summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2013-01-25 17:49:23 +0000
committerDaniel P. Berrange <berrange@redhat.com>2013-02-05 16:03:11 +0000
commitc3cbed015094e001bd7b9d85accca9f74326af65 (patch)
treee445d884524fe5c43ddbc98626cb8a2336cafbe2
parent7c92bf438a3d76487110aacf713e79939e44af5c (diff)
downloadnova-c3cbed015094e001bd7b9d85accca9f74326af65.tar.gz
nova-c3cbed015094e001bd7b9d85accca9f74326af65.tar.xz
nova-c3cbed015094e001bd7b9d85accca9f74326af65.zip
Move libvirt volume driver tests to separate test case
The libvirt volume code is in a separate module from the main libvirt driver code, so it makes sense for the test suite to be separated too, to make it easy to quickly run just the volume tests. This has the added advantage of reducing the size of the enourmous test_libvirt.py file which is becoming unwieldly. Change-Id: I7c6134992055694798c4ec3217483bc3a41d89eb Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
-rw-r--r--nova/tests/test_libvirt.py301
-rw-r--r--nova/tests/test_libvirt_volume.py326
2 files changed, 326 insertions, 301 deletions
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 2c1866a2c..1bdcb4b82 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -60,7 +60,6 @@ from nova.virt.libvirt import driver as libvirt_driver
from nova.virt.libvirt import firewall
from nova.virt.libvirt import imagebackend
from nova.virt.libvirt import utils as libvirt_utils
-from nova.virt.libvirt import volume
try:
@@ -132,306 +131,6 @@ class FakeVirtDomain(object):
return self._fake_dom_xml
-class LibvirtVolumeTestCase(test.TestCase):
-
- def setUp(self):
- super(LibvirtVolumeTestCase, self).setUp()
- self.executes = []
-
- def fake_execute(*cmd, **kwargs):
- self.executes.append(cmd)
- return None, None
-
- self.stubs.Set(utils, 'execute', fake_execute)
-
- class FakeLibvirtDriver(object):
- def __init__(self, hyperv="QEMU"):
- self.hyperv = hyperv
-
- def get_hypervisor_type(self):
- return self.hyperv
-
- def get_all_block_devices(self):
- return []
-
- self.fake_conn = FakeLibvirtDriver(fake.FakeVirtAPI())
- self.connr = {
- 'ip': '127.0.0.1',
- 'initiator': 'fake_initiator',
- 'host': 'fake_host'
- }
-
- def test_libvirt_volume_driver_serial(self):
- libvirt_driver = volume.LibvirtVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = {
- 'driver_volume_type': 'fake',
- 'data': {
- 'device_path': '/foo',
- },
- 'serial': 'fake_serial',
- }
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'block')
- self.assertEqual(tree.find('./serial').text, 'fake_serial')
-
- def iscsi_connection(self, volume, location, iqn):
- return {
- 'driver_volume_type': 'iscsi',
- 'data': {
- 'volume_id': volume['id'],
- 'target_portal': location,
- 'target_iqn': iqn,
- 'target_lun': 1,
- }
- }
-
- def test_libvirt_iscsi_driver(self):
- # NOTE(vish) exists is to make driver assume connecting worked
- self.stubs.Set(os.path, 'exists', lambda x: True)
- libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
- location = '10.0.2.15:3260'
- name = 'volume-00000001'
- iqn = 'iqn.2010-10.org.openstack:%s' % name
- vol = {'id': 1, 'name': name}
- connection_info = self.iscsi_connection(vol, location, iqn)
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
- self.assertEqual(tree.get('type'), 'block')
- self.assertEqual(tree.find('./source').get('dev'), dev_str)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
- expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--login'),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--op', 'update',
- '-n', 'node.startup', '-v', 'automatic'),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--op', 'update',
- '-n', 'node.startup', '-v', 'manual'),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--logout'),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--op', 'delete')]
- self.assertEqual(self.executes, expected_commands)
-
- def test_libvirt_iscsi_driver_still_in_use(self):
- # NOTE(vish) exists is to make driver assume connecting worked
- self.stubs.Set(os.path, 'exists', lambda x: True)
- libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
- location = '10.0.2.15:3260'
- name = 'volume-00000001'
- iqn = 'iqn.2010-10.org.openstack:%s' % name
- devs = ['/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)]
- self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
- vol = {'id': 1, 'name': name}
- connection_info = self.iscsi_connection(vol, location, iqn)
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
- self.assertEqual(tree.get('type'), 'block')
- self.assertEqual(tree.find('./source').get('dev'), dev_str)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
- expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--login'),
- ('iscsiadm', '-m', 'node', '-T', iqn,
- '-p', location, '--op', 'update',
- '-n', 'node.startup', '-v', 'automatic')]
- self.assertEqual(self.executes, expected_commands)
-
- def sheepdog_connection(self, volume):
- return {
- 'driver_volume_type': 'sheepdog',
- 'data': {
- 'name': volume['name']
- }
- }
-
- def test_libvirt_sheepdog_driver(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.sheepdog_connection(vol)
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'sheepdog')
- self.assertEqual(tree.find('./source').get('name'), name)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def rbd_connection(self, volume):
- return {
- 'driver_volume_type': 'rbd',
- 'data': {
- 'name': '%s/%s' % ('rbd', volume['name']),
- 'auth_enabled': CONF.rbd_secret_uuid is not None,
- 'auth_username': CONF.rbd_user,
- 'secret_type': 'ceph',
- 'secret_uuid': CONF.rbd_secret_uuid,
- }
- }
-
- def test_libvirt_rbd_driver(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.rbd_connection(vol)
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
- rbd_name = '%s/%s' % ('rbd', name)
- self.assertEqual(tree.find('./source').get('name'), rbd_name)
- self.assertEqual(tree.find('./source/auth'), None)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def test_libvirt_rbd_driver_auth_enabled(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.rbd_connection(vol)
- uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
- user = 'foo'
- secret_type = 'ceph'
- connection_info['data']['auth_enabled'] = True
- connection_info['data']['auth_username'] = user
- connection_info['data']['secret_type'] = secret_type
- connection_info['data']['secret_uuid'] = uuid
-
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
- rbd_name = '%s/%s' % ('rbd', name)
- self.assertEqual(tree.find('./source').get('name'), rbd_name)
- self.assertEqual(tree.find('./auth').get('username'), user)
- self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
- self.assertEqual(tree.find('./auth/secret').get('uuid'), uuid)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def test_libvirt_rbd_driver_auth_enabled_flags_override(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.rbd_connection(vol)
- uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
- user = 'foo'
- secret_type = 'ceph'
- connection_info['data']['auth_enabled'] = True
- connection_info['data']['auth_username'] = user
- connection_info['data']['secret_type'] = secret_type
- connection_info['data']['secret_uuid'] = uuid
-
- flags_uuid = '37152720-1785-11e2-a740-af0c1d8b8e4b'
- flags_user = 'bar'
- self.flags(rbd_user=flags_user,
- rbd_secret_uuid=flags_uuid)
-
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
- rbd_name = '%s/%s' % ('rbd', name)
- self.assertEqual(tree.find('./source').get('name'), rbd_name)
- self.assertEqual(tree.find('./auth').get('username'), flags_user)
- self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
- self.assertEqual(tree.find('./auth/secret').get('uuid'), flags_uuid)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def test_libvirt_rbd_driver_auth_disabled(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.rbd_connection(vol)
- uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
- user = 'foo'
- secret_type = 'ceph'
- connection_info['data']['auth_enabled'] = False
- connection_info['data']['auth_username'] = user
- connection_info['data']['secret_type'] = secret_type
- connection_info['data']['secret_uuid'] = uuid
-
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
- rbd_name = '%s/%s' % ('rbd', name)
- self.assertEqual(tree.find('./source').get('name'), rbd_name)
- self.assertEqual(tree.find('./auth'), None)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def test_libvirt_rbd_driver_auth_disabled_flags_override(self):
- libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
- name = 'volume-00000001'
- vol = {'id': 1, 'name': name}
- connection_info = self.rbd_connection(vol)
- uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
- user = 'foo'
- secret_type = 'ceph'
- connection_info['data']['auth_enabled'] = False
- connection_info['data']['auth_username'] = user
- connection_info['data']['secret_type'] = secret_type
- connection_info['data']['secret_uuid'] = uuid
-
- # NOTE: Supplying the rbd_secret_uuid will enable authentication
- # locally in nova-compute even if not enabled in nova-volume/cinder
- flags_uuid = '37152720-1785-11e2-a740-af0c1d8b8e4b'
- flags_user = 'bar'
- self.flags(rbd_user=flags_user,
- rbd_secret_uuid=flags_uuid)
-
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'network')
- self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
- rbd_name = '%s/%s' % ('rbd', name)
- self.assertEqual(tree.find('./source').get('name'), rbd_name)
- self.assertEqual(tree.find('./auth').get('username'), flags_user)
- self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
- self.assertEqual(tree.find('./auth/secret').get('uuid'), flags_uuid)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- def test_libvirt_nfs_driver(self):
- # NOTE(vish) exists is to make driver assume connecting worked
- mnt_base = '/mnt'
- self.flags(nfs_mount_point_base=mnt_base)
-
- libvirt_driver = volume.LibvirtNFSVolumeDriver(self.fake_conn)
- export_string = '192.168.1.1:/nfs/share1'
- name = 'volume-00001'
- export_mnt_base = os.path.join(mnt_base,
- libvirt_driver.get_hash_str(export_string))
- file_path = os.path.join(export_mnt_base, name)
-
- connection_info = {'data': {'export': export_string, 'name': name}}
- mount_device = "vde"
- conf = libvirt_driver.connect_volume(connection_info, mount_device)
- tree = conf.format_dom()
- self.assertEqual(tree.get('type'), 'file')
- self.assertEqual(tree.find('./source').get('file'), file_path)
- libvirt_driver.disconnect_volume(connection_info, mount_device)
-
- expected_commands = [
- ('stat', export_mnt_base),
- ('mount', '-t', 'nfs', export_string, export_mnt_base)]
- self.assertEqual(self.executes, expected_commands)
-
-
class CacheConcurrencyTestCase(test.TestCase):
def setUp(self):
super(CacheConcurrencyTestCase, self).setUp()
diff --git a/nova/tests/test_libvirt_volume.py b/nova/tests/test_libvirt_volume.py
new file mode 100644
index 000000000..6cc8ee2f6
--- /dev/null
+++ b/nova/tests/test_libvirt_volume.py
@@ -0,0 +1,326 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2010 OpenStack LLC
+# Copyright 2012 University Of Minho
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import os
+
+from nova.openstack.common import cfg
+from nova import test
+from nova import utils
+from nova.virt import fake
+from nova.virt.libvirt import volume
+
+CONF = cfg.CONF
+
+
+class LibvirtVolumeTestCase(test.TestCase):
+
+ def setUp(self):
+ super(LibvirtVolumeTestCase, self).setUp()
+ self.executes = []
+
+ def fake_execute(*cmd, **kwargs):
+ self.executes.append(cmd)
+ return None, None
+
+ self.stubs.Set(utils, 'execute', fake_execute)
+
+ class FakeLibvirtDriver(object):
+ def __init__(self, hyperv="QEMU"):
+ self.hyperv = hyperv
+
+ def get_hypervisor_type(self):
+ return self.hyperv
+
+ def get_all_block_devices(self):
+ return []
+
+ self.fake_conn = FakeLibvirtDriver(fake.FakeVirtAPI())
+ self.connr = {
+ 'ip': '127.0.0.1',
+ 'initiator': 'fake_initiator',
+ 'host': 'fake_host'
+ }
+
+ def test_libvirt_volume_driver_serial(self):
+ libvirt_driver = volume.LibvirtVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = {
+ 'driver_volume_type': 'fake',
+ 'data': {
+ 'device_path': '/foo',
+ },
+ 'serial': 'fake_serial',
+ }
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'block')
+ self.assertEqual(tree.find('./serial').text, 'fake_serial')
+
+ def iscsi_connection(self, volume, location, iqn):
+ return {
+ 'driver_volume_type': 'iscsi',
+ 'data': {
+ 'volume_id': volume['id'],
+ 'target_portal': location,
+ 'target_iqn': iqn,
+ 'target_lun': 1,
+ }
+ }
+
+ def test_libvirt_iscsi_driver(self):
+ # NOTE(vish) exists is to make driver assume connecting worked
+ self.stubs.Set(os.path, 'exists', lambda x: True)
+ libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
+ location = '10.0.2.15:3260'
+ name = 'volume-00000001'
+ iqn = 'iqn.2010-10.org.openstack:%s' % name
+ vol = {'id': 1, 'name': name}
+ connection_info = self.iscsi_connection(vol, location, iqn)
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
+ self.assertEqual(tree.get('type'), 'block')
+ self.assertEqual(tree.find('./source').get('dev'), dev_str)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+ expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--login'),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--op', 'update',
+ '-n', 'node.startup', '-v', 'automatic'),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--op', 'update',
+ '-n', 'node.startup', '-v', 'manual'),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--logout'),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--op', 'delete')]
+ self.assertEqual(self.executes, expected_commands)
+
+ def test_libvirt_iscsi_driver_still_in_use(self):
+ # NOTE(vish) exists is to make driver assume connecting worked
+ self.stubs.Set(os.path, 'exists', lambda x: True)
+ libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
+ location = '10.0.2.15:3260'
+ name = 'volume-00000001'
+ iqn = 'iqn.2010-10.org.openstack:%s' % name
+ devs = ['/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)]
+ self.stubs.Set(self.fake_conn, 'get_all_block_devices', lambda: devs)
+ vol = {'id': 1, 'name': name}
+ connection_info = self.iscsi_connection(vol, location, iqn)
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ dev_str = '/dev/disk/by-path/ip-%s-iscsi-%s-lun-1' % (location, iqn)
+ self.assertEqual(tree.get('type'), 'block')
+ self.assertEqual(tree.find('./source').get('dev'), dev_str)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+ expected_commands = [('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--login'),
+ ('iscsiadm', '-m', 'node', '-T', iqn,
+ '-p', location, '--op', 'update',
+ '-n', 'node.startup', '-v', 'automatic')]
+ self.assertEqual(self.executes, expected_commands)
+
+ def sheepdog_connection(self, volume):
+ return {
+ 'driver_volume_type': 'sheepdog',
+ 'data': {
+ 'name': volume['name']
+ }
+ }
+
+ def test_libvirt_sheepdog_driver(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.sheepdog_connection(vol)
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'sheepdog')
+ self.assertEqual(tree.find('./source').get('name'), name)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def rbd_connection(self, volume):
+ return {
+ 'driver_volume_type': 'rbd',
+ 'data': {
+ 'name': '%s/%s' % ('rbd', volume['name']),
+ 'auth_enabled': CONF.rbd_secret_uuid is not None,
+ 'auth_username': CONF.rbd_user,
+ 'secret_type': 'ceph',
+ 'secret_uuid': CONF.rbd_secret_uuid,
+ }
+ }
+
+ def test_libvirt_rbd_driver(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.rbd_connection(vol)
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
+ rbd_name = '%s/%s' % ('rbd', name)
+ self.assertEqual(tree.find('./source').get('name'), rbd_name)
+ self.assertEqual(tree.find('./source/auth'), None)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def test_libvirt_rbd_driver_auth_enabled(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.rbd_connection(vol)
+ uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
+ user = 'foo'
+ secret_type = 'ceph'
+ connection_info['data']['auth_enabled'] = True
+ connection_info['data']['auth_username'] = user
+ connection_info['data']['secret_type'] = secret_type
+ connection_info['data']['secret_uuid'] = uuid
+
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
+ rbd_name = '%s/%s' % ('rbd', name)
+ self.assertEqual(tree.find('./source').get('name'), rbd_name)
+ self.assertEqual(tree.find('./auth').get('username'), user)
+ self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
+ self.assertEqual(tree.find('./auth/secret').get('uuid'), uuid)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def test_libvirt_rbd_driver_auth_enabled_flags_override(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.rbd_connection(vol)
+ uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
+ user = 'foo'
+ secret_type = 'ceph'
+ connection_info['data']['auth_enabled'] = True
+ connection_info['data']['auth_username'] = user
+ connection_info['data']['secret_type'] = secret_type
+ connection_info['data']['secret_uuid'] = uuid
+
+ flags_uuid = '37152720-1785-11e2-a740-af0c1d8b8e4b'
+ flags_user = 'bar'
+ self.flags(rbd_user=flags_user,
+ rbd_secret_uuid=flags_uuid)
+
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
+ rbd_name = '%s/%s' % ('rbd', name)
+ self.assertEqual(tree.find('./source').get('name'), rbd_name)
+ self.assertEqual(tree.find('./auth').get('username'), flags_user)
+ self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
+ self.assertEqual(tree.find('./auth/secret').get('uuid'), flags_uuid)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def test_libvirt_rbd_driver_auth_disabled(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.rbd_connection(vol)
+ uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
+ user = 'foo'
+ secret_type = 'ceph'
+ connection_info['data']['auth_enabled'] = False
+ connection_info['data']['auth_username'] = user
+ connection_info['data']['secret_type'] = secret_type
+ connection_info['data']['secret_uuid'] = uuid
+
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
+ rbd_name = '%s/%s' % ('rbd', name)
+ self.assertEqual(tree.find('./source').get('name'), rbd_name)
+ self.assertEqual(tree.find('./auth'), None)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def test_libvirt_rbd_driver_auth_disabled_flags_override(self):
+ libvirt_driver = volume.LibvirtNetVolumeDriver(self.fake_conn)
+ name = 'volume-00000001'
+ vol = {'id': 1, 'name': name}
+ connection_info = self.rbd_connection(vol)
+ uuid = '875a8070-d0b9-4949-8b31-104d125c9a64'
+ user = 'foo'
+ secret_type = 'ceph'
+ connection_info['data']['auth_enabled'] = False
+ connection_info['data']['auth_username'] = user
+ connection_info['data']['secret_type'] = secret_type
+ connection_info['data']['secret_uuid'] = uuid
+
+ # NOTE: Supplying the rbd_secret_uuid will enable authentication
+ # locally in nova-compute even if not enabled in nova-volume/cinder
+ flags_uuid = '37152720-1785-11e2-a740-af0c1d8b8e4b'
+ flags_user = 'bar'
+ self.flags(rbd_user=flags_user,
+ rbd_secret_uuid=flags_uuid)
+
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'network')
+ self.assertEqual(tree.find('./source').get('protocol'), 'rbd')
+ rbd_name = '%s/%s' % ('rbd', name)
+ self.assertEqual(tree.find('./source').get('name'), rbd_name)
+ self.assertEqual(tree.find('./auth').get('username'), flags_user)
+ self.assertEqual(tree.find('./auth/secret').get('type'), secret_type)
+ self.assertEqual(tree.find('./auth/secret').get('uuid'), flags_uuid)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ def test_libvirt_nfs_driver(self):
+ # NOTE(vish) exists is to make driver assume connecting worked
+ mnt_base = '/mnt'
+ self.flags(nfs_mount_point_base=mnt_base)
+
+ libvirt_driver = volume.LibvirtNFSVolumeDriver(self.fake_conn)
+ export_string = '192.168.1.1:/nfs/share1'
+ name = 'volume-00001'
+ export_mnt_base = os.path.join(mnt_base,
+ libvirt_driver.get_hash_str(export_string))
+ file_path = os.path.join(export_mnt_base, name)
+
+ connection_info = {'data': {'export': export_string, 'name': name}}
+ mount_device = "vde"
+ conf = libvirt_driver.connect_volume(connection_info, mount_device)
+ tree = conf.format_dom()
+ self.assertEqual(tree.get('type'), 'file')
+ self.assertEqual(tree.find('./source').get('file'), file_path)
+ libvirt_driver.disconnect_volume(connection_info, mount_device)
+
+ expected_commands = [
+ ('stat', export_mnt_base),
+ ('mount', '-t', 'nfs', export_string, export_mnt_base)]
+ self.assertEqual(self.executes, expected_commands)