On 04/13/2014 05:16 AM, lvroyce(a)linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
Tested attach and detach disks,
according to current vm distro and version,
choose proper bus for disk if no bus assigned.
Hot plug for virtio disk works while ide disk does not.
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
tests/test_model.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 62 insertions(+)
diff --git a/tests/test_model.py b/tests/test_model.py
index 3041196..a5d2a06 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -167,6 +167,68 @@ class ModelTests(unittest.TestCase):
self.assertEquals("virtio", iface["model"])
@unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
+ def test_vm_disk(self):
+ def _attach_disk(bus_type=None):
+ disk_args = {"type": "disk",
+ "path": disk_path}
+ if bus_type:
+ disk_args['bus'] = bus_type
+ else:
+ bus_type = 'virtio'
+ disk = inst.vmstorages_create(vm_name, disk_args)
+ storage_list = inst.vmstorages_get_list(vm_name)
+ self.assertEquals(prev_count + 1, len(storage_list))
+
+ # Check the bus type to be 'virtio'
+ disk_info = inst.vmstorage_lookup(vm_name, disk)
+ self.assertEquals(u'disk', disk_info['type'])
+ self.assertEquals(disk_path, disk_info['path'])
+ self.assertEquals(bus_type, disk_info['bus'])
+ return disk
+
+ inst = model.Model(objstore_loc=self.tmp_store)
+ with RollbackContext() as rollback:
+ vm_name = 'kimchi-cdrom'
+ params = {'name': 'test', 'disks': [],
'cdrom': self.kimchi_iso}
+ inst.templates_create(params)
+ rollback.prependDefer(inst.template_delete, 'test')
+ params = {'name': vm_name, 'template':
'/templates/test'}
+ inst.vms_create(params)
+ rollback.prependDefer(inst.vm_delete, vm_name)
+
+ prev_count = len(inst.vmstorages_get_list(vm_name))
+ self.assertEquals(1, prev_count)
+
+ # dummy .iso files
+ disk_path = '/tmp/existent.qcow2'
+ disk_path2 = '/tmp/existent2.qcow2'
+ open(disk_path, 'w').close()
+ rollback.prependDefer(os.remove, disk_path)
+ open(disk_path2, 'w').close()
+
Add rollback to delete disk_path2 ?
+ # Cold plug and unplug a disk
+ disk = _attach_disk()
+ inst.vmstorage_delete(vm_name, disk)
+
+ # Hot plug a disk
+ inst.vm_start(vm_name)
+ disk = _attach_disk()
+ inst.vmstorage_delete(vm_name, disk)
+
+ # Hot plug 'ide' bus disk does not work
+ self.assertRaises(InvalidOperation, _attach_disk, 'ide')
+ inst.vm_poweroff(vm_name)
+
+ # Cold plug 'ide' bus disk can work
+ disk = _attach_disk()
+
+ # update path is not supported for disk
+ self.assertRaises(
+ InvalidOperation, inst.vmstorage_update,
+ vm_name, disk, {'path': disk_path2})
+ inst.vmstorage_delete(vm_name, disk)
+
+ @unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
def test_vm_cdrom(self):
inst = model.Model(objstore_loc=self.tmp_store)
with RollbackContext() as rollback: