From c215b5ec79516111456dfc2a63fa0facf5946ab0 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Tue, 18 Dec 2012 12:06:15 +0000 Subject: Add support for configuring SPICE graphics with libvirt Add support to the libvirt driver to configure SPICE graphics and the SPICE guest agent. It allows for enablement of both VNC and SPICE at the same time, since some recent libvirt/KVM versions support this concurrent mode. The USB tablet will now only be enabled if VNC is requested, or SPICE is requested without the agent Blueprint: libvirt-spice Change-Id: Ic7fbfd636455aba5bf881b6a1925fd4561edfd15 Signed-off-by: Daniel P. Berrange --- nova/tests/test_libvirt.py | 144 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) (limited to 'nova/tests') diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index de0745654..0abf16801 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -769,6 +769,150 @@ class LibvirtConnTestCase(test.TestCase): vconfig.LibvirtConfigGuestDisk) self.assertEquals(cfg.devices[3].target_dev, 'vdd') + def test_get_guest_config_with_vnc(self): + self.flags(libvirt_type='kvm', + vnc_enabled=True, + use_usb_tablet=False) + self.flags(enabled=False, group='spice') + + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + + cfg = conn.get_guest_config(instance_ref, [], None, None) + self.assertEquals(len(cfg.devices), 5) + self.assertEquals(type(cfg.devices[0]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[1]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[2]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[3]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[4]), + vconfig.LibvirtConfigGuestGraphics) + + self.assertEquals(cfg.devices[4].type, "vnc") + + def test_get_guest_config_with_vnc_and_tablet(self): + self.flags(libvirt_type='kvm', + vnc_enabled=True, + use_usb_tablet=True) + self.flags(enabled=False, group='spice') + + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + + cfg = conn.get_guest_config(instance_ref, [], None, None) + self.assertEquals(len(cfg.devices), 6) + self.assertEquals(type(cfg.devices[0]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[1]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[2]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[3]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[4]), + vconfig.LibvirtConfigGuestInput) + self.assertEquals(type(cfg.devices[5]), + vconfig.LibvirtConfigGuestGraphics) + + self.assertEquals(cfg.devices[4].type, "tablet") + self.assertEquals(cfg.devices[5].type, "vnc") + + def test_get_guest_config_with_spice_and_tablet(self): + self.flags(libvirt_type='kvm', + vnc_enabled=False, + use_usb_tablet=True) + self.flags(enabled=True, + agent_enabled=False, + group='spice') + + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + + cfg = conn.get_guest_config(instance_ref, [], None, None) + self.assertEquals(len(cfg.devices), 6) + self.assertEquals(type(cfg.devices[0]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[1]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[2]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[3]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[4]), + vconfig.LibvirtConfigGuestInput) + self.assertEquals(type(cfg.devices[5]), + vconfig.LibvirtConfigGuestGraphics) + + self.assertEquals(cfg.devices[4].type, "tablet") + self.assertEquals(cfg.devices[5].type, "spice") + + def test_get_guest_config_with_spice_and_agent(self): + self.flags(libvirt_type='kvm', + vnc_enabled=False, + use_usb_tablet=True) + self.flags(enabled=True, + agent_enabled=True, + group='spice') + + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + + cfg = conn.get_guest_config(instance_ref, [], None, None) + self.assertEquals(len(cfg.devices), 6) + self.assertEquals(type(cfg.devices[0]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[1]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[2]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[3]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[4]), + vconfig.LibvirtConfigGuestChannel) + self.assertEquals(type(cfg.devices[5]), + vconfig.LibvirtConfigGuestGraphics) + + self.assertEquals(cfg.devices[4].target_name, "com.redhat.spice.0") + self.assertEquals(cfg.devices[5].type, "spice") + + def test_get_guest_config_with_vnc_and_spice(self): + self.flags(libvirt_type='kvm', + vnc_enabled=True, + use_usb_tablet=True) + self.flags(enabled=True, + agent_enabled=True, + group='spice') + + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) + instance_ref = db.instance_create(self.context, self.test_instance) + + cfg = conn.get_guest_config(instance_ref, [], None, None) + self.assertEquals(len(cfg.devices), 8) + self.assertEquals(type(cfg.devices[0]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[1]), + vconfig.LibvirtConfigGuestDisk) + self.assertEquals(type(cfg.devices[2]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[3]), + vconfig.LibvirtConfigGuestSerial) + self.assertEquals(type(cfg.devices[4]), + vconfig.LibvirtConfigGuestInput) + self.assertEquals(type(cfg.devices[5]), + vconfig.LibvirtConfigGuestChannel) + self.assertEquals(type(cfg.devices[6]), + vconfig.LibvirtConfigGuestGraphics) + self.assertEquals(type(cfg.devices[7]), + vconfig.LibvirtConfigGuestGraphics) + + self.assertEquals(cfg.devices[4].type, "tablet") + self.assertEquals(cfg.devices[5].target_name, "com.redhat.spice.0") + self.assertEquals(cfg.devices[6].type, "vnc") + self.assertEquals(cfg.devices[7].type, "spice") + def test_get_guest_cpu_config_none(self): self.flags(libvirt_cpu_mode="none") conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True) -- cgit