615
640
self.assertEquals(cfg.devices[3].target_dev, 'vdd')
617
642
def test_get_guest_cpu_config_none(self):
618
conn = libvirt_driver.LibvirtDriver(True)
619
instance_ref = db.instance_create(self.context, self.test_instance)
621
conf = conn.get_guest_config(instance_ref,
622
_fake_network_info(self.stubs, 1),
624
self.assertEquals(conf.cpu, None)
626
@test.skip_if(missing_libvirt(), "Test requires libvirt")
643
self.flags(libvirt_cpu_mode="none")
644
conn = libvirt_driver.LibvirtDriver(True)
645
instance_ref = db.instance_create(self.context, self.test_instance)
647
conf = conn.get_guest_config(instance_ref,
648
_fake_network_info(self.stubs, 1),
650
self.assertEquals(conf.cpu, None)
652
def test_get_guest_cpu_config_default_kvm(self):
653
self.flags(libvirt_type="kvm",
654
libvirt_cpu_mode=None)
656
def get_lib_version_stub(self):
657
return (0 * 1000 * 1000) + (9 * 1000) + 11
659
self.stubs.Set(libvirt.virConnect,
661
get_lib_version_stub)
662
conn = libvirt_driver.LibvirtDriver(True)
663
instance_ref = db.instance_create(self.context, self.test_instance)
665
conf = conn.get_guest_config(instance_ref,
666
_fake_network_info(self.stubs, 1),
668
self.assertEquals(type(conf.cpu),
669
config.LibvirtConfigGuestCPU)
670
self.assertEquals(conf.cpu.mode, "host-model")
671
self.assertEquals(conf.cpu.model, None)
673
def test_get_guest_cpu_config_default_uml(self):
674
self.flags(libvirt_type="uml",
675
libvirt_cpu_mode=None)
677
conn = libvirt_driver.LibvirtDriver(True)
678
instance_ref = db.instance_create(self.context, self.test_instance)
680
conf = conn.get_guest_config(instance_ref,
681
_fake_network_info(self.stubs, 1),
683
self.assertEquals(conf.cpu, None)
685
def test_get_guest_cpu_config_default_lxc(self):
686
self.flags(libvirt_type="lxc",
687
libvirt_cpu_mode=None)
689
conn = libvirt_driver.LibvirtDriver(True)
690
instance_ref = db.instance_create(self.context, self.test_instance)
692
conf = conn.get_guest_config(instance_ref,
693
_fake_network_info(self.stubs, 1),
695
self.assertEquals(conf.cpu, None)
627
697
def test_get_guest_cpu_config_host_passthrough_new(self):
628
698
def get_lib_version_stub(self):
629
699
return (0 * 1000 * 1000) + (9 * 1000) + 11
684
752
self.assertEquals(conf.cpu.mode, "custom")
685
753
self.assertEquals(conf.cpu.model, "Penryn")
755
def test_get_guest_cpu_config_host_passthrough_old(self):
756
def get_lib_version_stub(self):
757
return (0 * 1000 * 1000) + (9 * 1000) + 7
759
self.stubs.Set(libvirt.virConnect, "getLibVersion",
760
get_lib_version_stub)
761
conn = libvirt_driver.LibvirtDriver(True)
762
instance_ref = db.instance_create(self.context, self.test_instance)
764
self.flags(libvirt_cpu_mode="host-passthrough")
765
self.assertRaises(exception.NovaException,
766
conn.get_guest_config,
768
_fake_network_info(self.stubs, 1),
771
def test_get_guest_cpu_config_host_model_old(self):
772
def get_lib_version_stub(self):
773
return (0 * 1000 * 1000) + (9 * 1000) + 7
775
# Ensure we have a predictable host CPU
776
def get_host_capabilities_stub(self):
777
cpu = config.LibvirtConfigGuestCPU()
778
cpu.model = "Opteron_G4"
781
caps = config.LibvirtConfigCaps()
782
caps.host = config.LibvirtConfigCapsHost()
786
self.stubs.Set(libvirt.virConnect,
788
get_lib_version_stub)
789
self.stubs.Set(libvirt_driver.LibvirtDriver,
790
"get_host_capabilities",
791
get_host_capabilities_stub)
792
conn = libvirt_driver.LibvirtDriver(True)
793
instance_ref = db.instance_create(self.context, self.test_instance)
795
self.flags(libvirt_cpu_mode="host-model")
796
conf = conn.get_guest_config(instance_ref,
797
_fake_network_info(self.stubs, 1),
799
self.assertEquals(type(conf.cpu),
800
config.LibvirtConfigGuestCPU)
801
self.assertEquals(conf.cpu.mode, None)
802
self.assertEquals(conf.cpu.model, "Opteron_G4")
803
self.assertEquals(conf.cpu.vendor, "AMD")
805
def test_get_guest_cpu_config_custom_old(self):
806
def get_lib_version_stub(self):
807
return (0 * 1000 * 1000) + (9 * 1000) + 7
809
self.stubs.Set(libvirt.virConnect,
811
get_lib_version_stub)
812
conn = libvirt_driver.LibvirtDriver(True)
813
instance_ref = db.instance_create(self.context, self.test_instance)
815
self.flags(libvirt_cpu_mode="custom")
816
self.flags(libvirt_cpu_model="Penryn")
817
conf = conn.get_guest_config(instance_ref,
818
_fake_network_info(self.stubs, 1),
820
self.assertEquals(type(conf.cpu),
821
config.LibvirtConfigGuestCPU)
822
self.assertEquals(conf.cpu.mode, None)
823
self.assertEquals(conf.cpu.model, "Penryn")
687
825
def test_xml_and_uri_no_ramdisk_no_kernel(self):
688
826
instance_data = dict(self.test_instance)
689
827
self._check_xml_and_uri(instance_data,
690
828
expect_kernel=False, expect_ramdisk=False)
830
def test_xml_and_uri_no_ramdisk_no_kernel_xen_hvm(self):
831
instance_data = dict(self.test_instance)
832
instance_data.update({'vm_mode': vm_mode.HVM})
833
self._check_xml_and_uri(instance_data, expect_kernel=False,
834
expect_ramdisk=False, expect_xen_hvm=True)
836
def test_xml_and_uri_no_ramdisk_no_kernel_xen_pv(self):
837
instance_data = dict(self.test_instance)
838
instance_data.update({'vm_mode': vm_mode.XEN})
839
self._check_xml_and_uri(instance_data, expect_kernel=False,
840
expect_ramdisk=False, expect_xen_hvm=False,
692
843
def test_xml_and_uri_no_ramdisk(self):
693
844
instance_data = dict(self.test_instance)
694
845
instance_data['kernel_id'] = 'aki-deadbeef'
1216
1421
type_uri_map = {'qemu': ('qemu:///system',
1217
1422
[(lambda t: t.find('.').get('type'), 'qemu'),
1218
(lambda t: t.find('./os/type').text, 'hvm'),
1423
(lambda t: t.find('./os/type').text,
1219
1425
(lambda t: t.find('./devices/emulator'), None)]),
1220
1426
'kvm': ('qemu:///system',
1221
1427
[(lambda t: t.find('.').get('type'), 'kvm'),
1222
(lambda t: t.find('./os/type').text, 'hvm'),
1428
(lambda t: t.find('./os/type').text,
1223
1430
(lambda t: t.find('./devices/emulator'), None)]),
1224
1431
'uml': ('uml:///system',
1225
1432
[(lambda t: t.find('.').get('type'), 'uml'),
1226
(lambda t: t.find('./os/type').text, 'uml')]),
1433
(lambda t: t.find('./os/type').text,
1227
1435
'xen': ('xen:///',
1228
1436
[(lambda t: t.find('.').get('type'), 'xen'),
1229
(lambda t: t.find('./os/type').text, 'linux')]),
1232
for hypervisor_type in ['qemu', 'kvm', 'xen']:
1437
(lambda t: t.find('./os/type').text,
1440
if expect_xen_hvm or xen_only:
1441
hypervisors_to_check = ['xen']
1443
hypervisors_to_check = ['qemu', 'kvm', 'xen']
1447
type_uri_map['xen'] = ('xen:///',
1448
[(lambda t: t.find('.').get('type'),
1450
(lambda t: t.find('./os/type').text,
1453
for hypervisor_type in hypervisors_to_check:
1233
1454
check_list = type_uri_map[hypervisor_type][1]
1373
1602
db.instance_destroy(self.context, instance_ref['uuid'])
1375
@test.skip_if(missing_libvirt(), "Test requires libvirt")
1604
def test_check_can_live_migrate_dest_all_pass_with_block_migration(self):
1605
instance_ref = db.instance_create(self.context, self.test_instance)
1606
dest = "fake_host_2"
1607
src = instance_ref['host']
1608
conn = libvirt_driver.LibvirtDriver(False)
1610
self.mox.StubOutWithMock(conn, '_get_compute_info')
1611
self.mox.StubOutWithMock(conn, 'get_instance_disk_info')
1612
self.mox.StubOutWithMock(conn, '_create_shared_storage_test_file')
1613
self.mox.StubOutWithMock(conn, '_compare_cpu')
1615
conn._get_compute_info(self.context, FLAGS.host).AndReturn(
1616
{'disk_available_least': 400})
1617
conn.get_instance_disk_info(instance_ref["name"]).AndReturn(
1618
'[{"virt_disk_size":2}]')
1620
conn._get_compute_info(self.context,
1621
src).AndReturn({'cpu_info': "asdf"})
1622
conn._compare_cpu("asdf")
1624
# mounted_on_same_shared_storage
1626
conn._create_shared_storage_test_file().AndReturn(filename)
1628
self.mox.ReplayAll()
1629
return_value = conn.check_can_live_migrate_destination(self.context,
1630
instance_ref, True, False)
1631
self.assertDictMatch(return_value,
1632
{"filename": "file", "block_migration": True})
1634
def test_check_can_live_migrate_dest_all_pass_no_block_migration(self):
1635
instance_ref = db.instance_create(self.context, self.test_instance)
1636
dest = "fake_host_2"
1637
src = instance_ref['host']
1638
conn = libvirt_driver.LibvirtDriver(False)
1640
self.mox.StubOutWithMock(conn, '_get_compute_info')
1641
self.mox.StubOutWithMock(conn, '_create_shared_storage_test_file')
1642
self.mox.StubOutWithMock(conn, '_compare_cpu')
1645
conn._get_compute_info(self.context,
1646
src).AndReturn({'cpu_info': "asdf"})
1647
conn._compare_cpu("asdf")
1649
# mounted_on_same_shared_storage
1651
conn._create_shared_storage_test_file().AndReturn(filename)
1653
self.mox.ReplayAll()
1654
return_value = conn.check_can_live_migrate_destination(self.context,
1655
instance_ref, False, False)
1656
self.assertDictMatch(return_value,
1657
{"filename": "file", "block_migration": False})
1659
def test_check_can_live_migrate_dest_fails_not_enough_disk(self):
1660
instance_ref = db.instance_create(self.context, self.test_instance)
1661
dest = "fake_host_2"
1662
src = instance_ref['host']
1663
conn = libvirt_driver.LibvirtDriver(False)
1665
self.mox.StubOutWithMock(conn, '_get_compute_info')
1666
self.mox.StubOutWithMock(conn, 'get_instance_disk_info')
1668
conn._get_compute_info(self.context, FLAGS.host).AndReturn(
1669
{'disk_available_least': 0})
1670
conn.get_instance_disk_info(instance_ref["name"]).AndReturn(
1671
'[{"virt_disk_size":2}]')
1673
self.mox.ReplayAll()
1674
self.assertRaises(exception.MigrationError,
1675
conn.check_can_live_migrate_destination,
1676
self.context, instance_ref, True, False)
1678
def test_check_can_live_migrate_dest_incompatible_cpu_raises(self):
1679
instance_ref = db.instance_create(self.context, self.test_instance)
1680
dest = "fake_host_2"
1681
src = instance_ref['host']
1682
conn = libvirt_driver.LibvirtDriver(False)
1684
self.mox.StubOutWithMock(conn, '_get_compute_info')
1685
self.mox.StubOutWithMock(conn, '_compare_cpu')
1687
conn._get_compute_info(self.context, src).AndReturn(
1688
{'cpu_info': "asdf"})
1689
conn._compare_cpu("asdf").AndRaise(exception.InvalidCPUInfo)
1691
self.mox.ReplayAll()
1692
self.assertRaises(exception.InvalidCPUInfo,
1693
conn.check_can_live_migrate_destination,
1694
self.context, instance_ref, False, False)
1696
def test_check_can_live_migrate_dest_fail_space_with_block_migration(self):
1697
instance_ref = db.instance_create(self.context, self.test_instance)
1698
dest = "fake_host_2"
1699
src = instance_ref['host']
1700
conn = libvirt_driver.LibvirtDriver(False)
1702
self.mox.StubOutWithMock(conn, '_get_compute_info')
1703
self.mox.StubOutWithMock(conn, 'get_instance_disk_info')
1705
conn._get_compute_info(self.context, FLAGS.host).AndReturn(
1706
{'disk_available_least': 0})
1707
conn.get_instance_disk_info(instance_ref["name"]).AndReturn(
1708
'[{"virt_disk_size":2}]')
1710
self.mox.ReplayAll()
1711
self.assertRaises(exception.MigrationError,
1712
conn.check_can_live_migrate_destination,
1713
self.context, instance_ref, True, False)
1715
def test_check_can_live_migrate_dest_cleanup_works_correctly(self):
1716
dest_check_data = {"filename": "file", "block_migration": True}
1717
conn = libvirt_driver.LibvirtDriver(False)
1719
self.mox.StubOutWithMock(conn, '_cleanup_shared_storage_test_file')
1720
conn._cleanup_shared_storage_test_file("file")
1722
self.mox.ReplayAll()
1723
conn.check_can_live_migrate_destination_cleanup(self.context,
1726
def test_check_can_live_migrate_source_works_correctly(self):
1727
instance_ref = db.instance_create(self.context, self.test_instance)
1728
dest_check_data = {"filename": "file", "block_migration": True}
1729
conn = libvirt_driver.LibvirtDriver(False)
1731
self.mox.StubOutWithMock(conn, "_check_shared_storage_test_file")
1732
conn._check_shared_storage_test_file("file").AndReturn(False)
1734
self.mox.ReplayAll()
1735
conn.check_can_live_migrate_source(self.context, instance_ref,
1738
def test_check_can_live_migrate_dest_fail_shared_storage_with_blockm(self):
1739
instance_ref = db.instance_create(self.context, self.test_instance)
1740
dest_check_data = {"filename": "file", "block_migration": True}
1741
conn = libvirt_driver.LibvirtDriver(False)
1743
self.mox.StubOutWithMock(conn, "_check_shared_storage_test_file")
1744
conn._check_shared_storage_test_file("file").AndReturn(True)
1746
self.mox.ReplayAll()
1747
self.assertRaises(exception.InvalidSharedStorage,
1748
conn.check_can_live_migrate_source,
1749
self.context, instance_ref, dest_check_data)
1751
def test_check_can_live_migrate_no_shared_storage_no_blck_mig_raises(self):
1752
instance_ref = db.instance_create(self.context, self.test_instance)
1753
dest_check_data = {"filename": "file", "block_migration": False}
1754
conn = libvirt_driver.LibvirtDriver(False)
1756
self.mox.StubOutWithMock(conn, "_check_shared_storage_test_file")
1757
conn._check_shared_storage_test_file("file").AndReturn(False)
1759
self.mox.ReplayAll()
1760
self.assertRaises(exception.InvalidSharedStorage,
1761
conn.check_can_live_migrate_source,
1762
self.context, instance_ref, dest_check_data)
1376
1764
def test_live_migration_raises_exception(self):
1377
1765
"""Confirms recover method is called when exceptions are raised."""
1378
1766
# Preparing data
1442
1837
conn.volume_driver_method('connect_volume',
1443
1838
v['connection_info'],
1444
1839
v['mount_device'].rpartition("/")[2])
1840
self.mox.StubOutWithMock(conn, 'plug_vifs')
1841
conn.plug_vifs(mox.IsA(inst_ref), nw_info)
1447
1843
self.mox.ReplayAll()
1448
self.assertEqual(conn.pre_live_migration(vol), None)
1844
result = conn.pre_live_migration(c, inst_ref, vol, nw_info)
1845
self.assertEqual(result, None)
1450
@test.skip_if(missing_libvirt(), "Test requires libvirt")
1451
1847
def test_pre_block_migration_works_correctly(self):
1452
"""Confirms pre_block_migration works correctly."""
1453
1848
# Replace instances_path since this testcase creates tmpfile
1454
1849
with utils.tempdir() as tmpdir:
1455
1850
self.flags(instances_path=tmpdir)
1458
1853
instance_ref = db.instance_create(self.context, self.test_instance)
1459
dummyjson = ('[{"path": "%s/disk", "disk_size": "10737418240",'
1460
' "type": "raw", "backing_file": ""}]')
1854
dummy_info = [{'path': '%s/disk' % tmpdir,
1855
'disk_size': 10737418240,
1857
'backing_file': ''},
1858
{'backing_file': 'otherdisk_1234567',
1859
'path': '%s/otherdisk' % tmpdir,
1860
'virt_disk_size': 10737418240}]
1861
dummyjson = json.dumps(dummy_info)
1463
1863
# qemu-img should be mockd since test environment might not have
1464
1864
# large disk space.
1865
self.mox.StubOutWithMock(imagebackend.Image, 'cache')
1866
imagebackend.Image.cache(context=mox.IgnoreArg(),
1872
user_id=None).AndReturn(None)
1465
1873
self.mox.ReplayAll()
1466
1875
conn = libvirt_driver.LibvirtDriver(False)
1467
1876
conn.pre_block_migration(self.context, instance_ref,
1470
1879
self.assertTrue(os.path.exists('%s/%s/' %
1471
1880
(tmpdir, instance_ref.name)))
1473
1882
db.instance_destroy(self.context, instance_ref['uuid'])
1475
@test.skip_if(missing_libvirt(), "Test requires libvirt")
1476
1884
def test_get_instance_disk_info_works_correctly(self):
1477
"""Confirms pre_block_migration works correctly."""
1479
1886
instance_ref = db.instance_create(self.context, self.test_instance)
1480
1887
dummyxml = ("<domain type='kvm'><name>instance-0000000a</name>"
1865
2268
got = jsonutils.loads(conn.get_cpu_info())
1866
2269
self.assertEqual(want, got)
2271
def test_diagnostic_vcpus_exception(self):
2276
<source file='filename'/>
2277
<target dev='vda' bus='virtio'/>
2280
<source dev='/path/to/dev/1'/>
2281
<target dev='vdb' bus='virtio'/>
2283
<interface type='network'>
2284
<mac address='52:54:00:a4:38:38'/>
2285
<source network='default'/>
2286
<target dev='vnet0'/>
2292
class DiagFakeDomain(FakeVirtDomain):
2295
super(DiagFakeDomain, self).__init__(fake_xml=xml)
2298
raise libvirt.libvirtError('vcpus missing')
2300
def blockStats(self, path):
2301
return (169L, 688640L, 0L, 0L, -1L)
2303
def interfaceStats(self, path):
2304
return (4408L, 82L, 0L, 0L, 0L, 0L, 0L, 0L)
2306
def memoryStats(self):
2307
return {'actual': 220160L, 'rss': 200164L}
2309
def maxMemory(self):
2312
def fake_lookup_name(name):
2313
return DiagFakeDomain()
2315
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
2316
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
2318
conn = libvirt_driver.LibvirtDriver(False)
2319
actual = conn.get_diagnostics({"name": "testvirt"})
2320
expect = {'vda_read': 688640L,
2321
'vda_read_req': 169L,
2323
'vda_write_req': 0L,
2325
'vdb_read': 688640L,
2326
'vdb_read_req': 169L,
2328
'vdb_write_req': 0L,
2331
'memory-actual': 220160L,
2332
'memory-rss': 200164L,
2334
'vnet0_rx_drop': 0L,
2335
'vnet0_rx_errors': 0L,
2336
'vnet0_rx_packets': 82L,
2338
'vnet0_tx_drop': 0L,
2339
'vnet0_tx_errors': 0L,
2340
'vnet0_tx_packets': 0L,
2342
self.assertEqual(actual, expect)
2344
def test_diagnostic_blockstats_exception(self):
2349
<source file='filename'/>
2350
<target dev='vda' bus='virtio'/>
2353
<source dev='/path/to/dev/1'/>
2354
<target dev='vdb' bus='virtio'/>
2356
<interface type='network'>
2357
<mac address='52:54:00:a4:38:38'/>
2358
<source network='default'/>
2359
<target dev='vnet0'/>
2365
class DiagFakeDomain(FakeVirtDomain):
2368
super(DiagFakeDomain, self).__init__(fake_xml=xml)
2371
return ([(0, 1, 15340000000L, 0),
2372
(1, 1, 1640000000L, 0),
2373
(2, 1, 3040000000L, 0),
2374
(3, 1, 1420000000L, 0)],
2380
def blockStats(self, path):
2381
raise libvirt.libvirtError('blockStats missing')
2383
def interfaceStats(self, path):
2384
return (4408L, 82L, 0L, 0L, 0L, 0L, 0L, 0L)
2386
def memoryStats(self):
2387
return {'actual': 220160L, 'rss': 200164L}
2389
def maxMemory(self):
2392
def fake_lookup_name(name):
2393
return DiagFakeDomain()
2395
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
2396
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
2398
conn = libvirt_driver.LibvirtDriver(False)
2399
actual = conn.get_diagnostics({"name": "testvirt"})
2400
expect = {'cpu0_time': 15340000000L,
2401
'cpu1_time': 1640000000L,
2402
'cpu2_time': 3040000000L,
2403
'cpu3_time': 1420000000L,
2405
'memory-actual': 220160L,
2406
'memory-rss': 200164L,
2408
'vnet0_rx_drop': 0L,
2409
'vnet0_rx_errors': 0L,
2410
'vnet0_rx_packets': 82L,
2412
'vnet0_tx_drop': 0L,
2413
'vnet0_tx_errors': 0L,
2414
'vnet0_tx_packets': 0L,
2416
self.assertEqual(actual, expect)
2418
def test_diagnostic_interfacestats_exception(self):
2423
<source file='filename'/>
2424
<target dev='vda' bus='virtio'/>
2427
<source dev='/path/to/dev/1'/>
2428
<target dev='vdb' bus='virtio'/>
2430
<interface type='network'>
2431
<mac address='52:54:00:a4:38:38'/>
2432
<source network='default'/>
2433
<target dev='vnet0'/>
2439
class DiagFakeDomain(FakeVirtDomain):
2442
super(DiagFakeDomain, self).__init__(fake_xml=xml)
2445
return ([(0, 1, 15340000000L, 0),
2446
(1, 1, 1640000000L, 0),
2447
(2, 1, 3040000000L, 0),
2448
(3, 1, 1420000000L, 0)],
2454
def blockStats(self, path):
2455
return (169L, 688640L, 0L, 0L, -1L)
2457
def interfaceStats(self, path):
2458
raise libvirt.libvirtError('interfaceStat missing')
2460
def memoryStats(self):
2461
return {'actual': 220160L, 'rss': 200164L}
2463
def maxMemory(self):
2466
def fake_lookup_name(name):
2467
return DiagFakeDomain()
2469
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
2470
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
2472
conn = libvirt_driver.LibvirtDriver(False)
2473
actual = conn.get_diagnostics({"name": "testvirt"})
2474
expect = {'cpu0_time': 15340000000L,
2475
'cpu1_time': 1640000000L,
2476
'cpu2_time': 3040000000L,
2477
'cpu3_time': 1420000000L,
2478
'vda_read': 688640L,
2479
'vda_read_req': 169L,
2481
'vda_write_req': 0L,
2483
'vdb_read': 688640L,
2484
'vdb_read_req': 169L,
2486
'vdb_write_req': 0L,
2489
'memory-actual': 220160L,
2490
'memory-rss': 200164L,
2492
self.assertEqual(actual, expect)
2494
def test_diagnostic_memorystats_exception(self):
2499
<source file='filename'/>
2500
<target dev='vda' bus='virtio'/>
2503
<source dev='/path/to/dev/1'/>
2504
<target dev='vdb' bus='virtio'/>
2506
<interface type='network'>
2507
<mac address='52:54:00:a4:38:38'/>
2508
<source network='default'/>
2509
<target dev='vnet0'/>
2515
class DiagFakeDomain(FakeVirtDomain):
2518
super(DiagFakeDomain, self).__init__(fake_xml=xml)
2521
return ([(0, 1, 15340000000L, 0),
2522
(1, 1, 1640000000L, 0),
2523
(2, 1, 3040000000L, 0),
2524
(3, 1, 1420000000L, 0)],
2530
def blockStats(self, path):
2531
return (169L, 688640L, 0L, 0L, -1L)
2533
def interfaceStats(self, path):
2534
return (4408L, 82L, 0L, 0L, 0L, 0L, 0L, 0L)
2536
def memoryStats(self):
2537
raise libvirt.libvirtError('memoryStats missing')
2539
def maxMemory(self):
2542
def fake_lookup_name(name):
2543
return DiagFakeDomain()
2545
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
2546
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
2548
conn = libvirt_driver.LibvirtDriver(False)
2549
actual = conn.get_diagnostics({"name": "testvirt"})
2550
expect = {'cpu0_time': 15340000000L,
2551
'cpu1_time': 1640000000L,
2552
'cpu2_time': 3040000000L,
2553
'cpu3_time': 1420000000L,
2554
'vda_read': 688640L,
2555
'vda_read_req': 169L,
2557
'vda_write_req': 0L,
2559
'vdb_read': 688640L,
2560
'vdb_read_req': 169L,
2562
'vdb_write_req': 0L,
2566
'vnet0_rx_drop': 0L,
2567
'vnet0_rx_errors': 0L,
2568
'vnet0_rx_packets': 82L,
2570
'vnet0_tx_drop': 0L,
2571
'vnet0_tx_errors': 0L,
2572
'vnet0_tx_packets': 0L,
2574
self.assertEqual(actual, expect)
2576
def test_diagnostic_full(self):
2581
<source file='filename'/>
2582
<target dev='vda' bus='virtio'/>
2585
<source dev='/path/to/dev/1'/>
2586
<target dev='vdb' bus='virtio'/>
2588
<interface type='network'>
2589
<mac address='52:54:00:a4:38:38'/>
2590
<source network='default'/>
2591
<target dev='vnet0'/>
2597
class DiagFakeDomain(FakeVirtDomain):
2600
super(DiagFakeDomain, self).__init__(fake_xml=xml)
2603
return ([(0, 1, 15340000000L, 0),
2604
(1, 1, 1640000000L, 0),
2605
(2, 1, 3040000000L, 0),
2606
(3, 1, 1420000000L, 0)],
2612
def blockStats(self, path):
2613
return (169L, 688640L, 0L, 0L, -1L)
2615
def interfaceStats(self, path):
2616
return (4408L, 82L, 0L, 0L, 0L, 0L, 0L, 0L)
2618
def memoryStats(self):
2619
return {'actual': 220160L, 'rss': 200164L}
2621
def maxMemory(self):
2624
def fake_lookup_name(name):
2625
return DiagFakeDomain()
2627
self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn')
2628
libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name
2630
conn = libvirt_driver.LibvirtDriver(False)
2631
actual = conn.get_diagnostics({"name": "testvirt"})
2632
expect = {'cpu0_time': 15340000000L,
2633
'cpu1_time': 1640000000L,
2634
'cpu2_time': 3040000000L,
2635
'cpu3_time': 1420000000L,
2636
'vda_read': 688640L,
2637
'vda_read_req': 169L,
2639
'vda_write_req': 0L,
2641
'vdb_read': 688640L,
2642
'vdb_read_req': 169L,
2644
'vdb_write_req': 0L,
2647
'memory-actual': 220160L,
2648
'memory-rss': 200164L,
2650
'vnet0_rx_drop': 0L,
2651
'vnet0_rx_errors': 0L,
2652
'vnet0_rx_packets': 82L,
2654
'vnet0_tx_drop': 0L,
2655
'vnet0_tx_errors': 0L,
2656
'vnet0_tx_packets': 0L,
2658
self.assertEqual(actual, expect)
2660
def test_get_instance_capabilities(self):
2661
conn = libvirt_driver.LibvirtDriver(True)
2663
def get_host_capabilities_stub(self):
2664
caps = config.LibvirtConfigCaps()
2666
guest = config.LibvirtConfigGuest()
2667
guest.ostype = 'hvm'
2668
guest.arch = 'x86_64'
2669
guest.domtype = ['kvm', 'qemu']
2670
caps.guests.append(guest)
2672
guest = config.LibvirtConfigGuest()
2673
guest.ostype = 'hvm'
2675
guest.domtype = ['kvm']
2676
caps.guests.append(guest)
2680
self.stubs.Set(libvirt_driver.LibvirtDriver,
2681
'get_host_capabilities',
2682
get_host_capabilities_stub)
2684
want = [('x86_64', 'kvm', 'hvm'),
2685
('x86_64', 'qemu', 'hvm'),
2686
('i686', 'kvm', 'hvm')]
2687
got = conn.get_instance_capabilities()
2688
self.assertEqual(want, got)
1869
2691
class HostStateTestCase(test.TestCase):