Revision fda3d987
b/Makefile.am | ||
---|---|---|
1318 | 1318 |
test/data/kvm_0.9.1_help_boot_test.txt \ |
1319 | 1319 |
test/data/kvm_1.0_help.txt \ |
1320 | 1320 |
test/data/kvm_1.1.2_help.txt \ |
1321 |
test/data/kvm_runtime.json \ |
|
1321 | 1322 |
test/data/lvs_lv.txt \ |
1322 | 1323 |
test/data/NEWS_OK.txt \ |
1323 | 1324 |
test/data/NEWS_previous_unreleased.txt \ |
b/test/data/kvm_runtime.json | ||
---|---|---|
1 |
[ |
|
2 |
[ |
|
3 |
"/usr/bin/kvm", |
|
4 |
"-name", |
|
5 |
"xen-test-inst2", |
|
6 |
"-m", |
|
7 |
1024, |
|
8 |
"-smp", |
|
9 |
"1", |
|
10 |
"-pidfile", |
|
11 |
"/var/run/ganeti/kvm-hypervisor/pid/xen-test-inst2", |
|
12 |
"-balloon", |
|
13 |
"virtio", |
|
14 |
"-daemonize", |
|
15 |
"-machine", |
|
16 |
"pc-1.1", |
|
17 |
"-monitor", |
|
18 |
"unix:/var/run/ganeti/kvm-hypervisor/ctrl/xen-test-inst2.monitor,server,nowait", |
|
19 |
"-serial", |
|
20 |
"unix:/var/run/ganeti/kvm-hypervisor/ctrl/xen-test-inst2.serial,server,nowait", |
|
21 |
"-usb", |
|
22 |
"-usbdevice", |
|
23 |
"tablet", |
|
24 |
"-vnc", |
|
25 |
":5100" |
|
26 |
], |
|
27 |
[ |
|
28 |
{ |
|
29 |
"mac": "aa:00:00:bf:2f:16", |
|
30 |
"nicparams": { |
|
31 |
"link": "br0", |
|
32 |
"mode": "bridged" |
|
33 |
}, |
|
34 |
"pci": 6, |
|
35 |
"uuid": "003fc157-66a8-4e6d-8b7e-ec4f69751396" |
|
36 |
} |
|
37 |
], |
|
38 |
{ |
|
39 |
"acpi": true, |
|
40 |
"boot_order": "disk", |
|
41 |
"cdrom2_image_path": "", |
|
42 |
"cdrom_disk_type": "", |
|
43 |
"cdrom_image_path": "", |
|
44 |
"cpu_cores": 0, |
|
45 |
"cpu_mask": "all", |
|
46 |
"cpu_sockets": 0, |
|
47 |
"cpu_threads": 0, |
|
48 |
"cpu_type": "", |
|
49 |
"disk_cache": "default", |
|
50 |
"disk_type": "paravirtual", |
|
51 |
"floppy_image_path": "", |
|
52 |
"initrd_path": "", |
|
53 |
"kernel_args": "ro", |
|
54 |
"kernel_path": "", |
|
55 |
"keymap": "", |
|
56 |
"kvm_extra": "", |
|
57 |
"kvm_flag": "", |
|
58 |
"kvm_path": "/usr/bin/kvm", |
|
59 |
"machine_version": "", |
|
60 |
"mem_path": "", |
|
61 |
"migration_bandwidth": 32, |
|
62 |
"migration_downtime": 30, |
|
63 |
"migration_mode": "live", |
|
64 |
"migration_port": 8102, |
|
65 |
"nic_type": "paravirtual", |
|
66 |
"reboot_behavior": "reboot", |
|
67 |
"root_path": "/dev/vda1", |
|
68 |
"security_domain": "", |
|
69 |
"security_model": "none", |
|
70 |
"serial_console": true, |
|
71 |
"serial_speed": 38400, |
|
72 |
"soundhw": "", |
|
73 |
"spice_bind": "", |
|
74 |
"spice_image_compression": "", |
|
75 |
"spice_ip_version": 0, |
|
76 |
"spice_jpeg_wan_compression": "", |
|
77 |
"spice_password_file": "", |
|
78 |
"spice_playback_compression": true, |
|
79 |
"spice_streaming_video": "", |
|
80 |
"spice_tls_ciphers": "HIGH:-DES:-3DES:-EXPORT:-ADH", |
|
81 |
"spice_use_tls": false, |
|
82 |
"spice_use_vdagent": true, |
|
83 |
"spice_zlib_glz_wan_compression": "", |
|
84 |
"usb_devices": "", |
|
85 |
"usb_mouse": "", |
|
86 |
"use_chroot": false, |
|
87 |
"use_localtime": false, |
|
88 |
"vga": "", |
|
89 |
"vhost_net": false, |
|
90 |
"vnc_bind_address": "0.0.0.0", |
|
91 |
"vnc_password_file": "", |
|
92 |
"vnc_tls": false, |
|
93 |
"vnc_x509_path": "", |
|
94 |
"vnc_x509_verify": false, |
|
95 |
"vnet_hdr": true |
|
96 |
}, |
|
97 |
[ |
|
98 |
[ |
|
99 |
{ |
|
100 |
"dev_type": "lvm", |
|
101 |
"iv_name": "disk/0", |
|
102 |
"logical_id": [ |
|
103 |
"autovg", |
|
104 |
"b9d4ee8e-c81b-42eb-9899-60481886c7ac.disk0" |
|
105 |
], |
|
106 |
"mode": "rw", |
|
107 |
"name": "disk0", |
|
108 |
"params": { |
|
109 |
"stripes": 1 |
|
110 |
}, |
|
111 |
"pci": 4, |
|
112 |
"size": 1024, |
|
113 |
"uuid": "7c079136-2573-4112-82d0-0d3d2aa90d8f" |
|
114 |
}, |
|
115 |
"/var/run/ganeti/instance-disks/xen-test-inst2:0", |
|
116 |
"rbd://123451214123/" |
|
117 |
], |
|
118 |
[ |
|
119 |
{ |
|
120 |
"dev_type": "lvm", |
|
121 |
"iv_name": "disk/1", |
|
122 |
"logical_id": [ |
|
123 |
"autovg", |
|
124 |
"602c0a3b-d09b-4ebe-9774-5f12ef654a1f.disk1" |
|
125 |
], |
|
126 |
"mode": "rw", |
|
127 |
"name": "disk1", |
|
128 |
"params": { |
|
129 |
"stripes": 1 |
|
130 |
}, |
|
131 |
"pci": 5, |
|
132 |
"size": 512, |
|
133 |
"uuid": "9f5c5bd4-6f60-480b-acdc-9bb1a4b7df79" |
|
134 |
}, |
|
135 |
"/var/run/ganeti/instance-disks/xen-test-inst2:1", |
|
136 |
null |
|
137 |
] |
|
138 |
] |
|
139 |
] |
b/test/py/cmdlib/instance_unittest.py | ||
---|---|---|
1970 | 1970 |
nics=[(constants.DDM_ADD, -1, {})]) |
1971 | 1971 |
self.ExecOpCode(op) |
1972 | 1972 |
|
1973 |
def testHotAddNic(self): |
|
1974 |
op = self.CopyOpCode(self.op, |
|
1975 |
nics=[(constants.DDM_ADD, -1, {})], |
|
1976 |
hotplug=True) |
|
1977 |
self.ExecOpCode(op) |
|
1978 |
self.assertTrue(self.rpc.call_hotplug_device.called) |
|
1979 |
|
|
1973 | 1980 |
def testAddNicWithIp(self): |
1974 | 1981 |
op = self.CopyOpCode(self.op, |
1975 | 1982 |
nics=[(constants.DDM_ADD, -1, |
... | ... | |
2053 | 2060 |
nics=[(constants.DDM_MODIFY, 0, {})]) |
2054 | 2061 |
self.ExecOpCode(op) |
2055 | 2062 |
|
2063 |
def testHotModifyNic(self): |
|
2064 |
op = self.CopyOpCode(self.op, |
|
2065 |
nics=[(constants.DDM_MODIFY, 0, {})], |
|
2066 |
hotplug=True) |
|
2067 |
self.ExecOpCode(op) |
|
2068 |
self.assertTrue(self.rpc.call_hotplug_device.called) |
|
2069 |
|
|
2056 | 2070 |
def testRemoveLastNic(self): |
2057 | 2071 |
op = self.CopyOpCode(self.op, |
2058 | 2072 |
nics=[(constants.DDM_REMOVE, 0, {})]) |
... | ... | |
2067 | 2081 |
nics=[(constants.DDM_REMOVE, 0, {})]) |
2068 | 2082 |
self.ExecOpCode(op) |
2069 | 2083 |
|
2084 |
def testHotRemoveNic(self): |
|
2085 |
inst = self.cfg.AddNewInstance(nics=[self.cfg.CreateNic(), |
|
2086 |
self.cfg.CreateNic()]) |
|
2087 |
op = self.CopyOpCode(self.op, |
|
2088 |
instance_name=inst.name, |
|
2089 |
nics=[(constants.DDM_REMOVE, 0, {})], |
|
2090 |
hotplug=True) |
|
2091 |
self.ExecOpCode(op) |
|
2092 |
self.assertTrue(self.rpc.call_hotplug_device.called) |
|
2093 |
|
|
2070 | 2094 |
def testSetOffline(self): |
2071 | 2095 |
op = self.CopyOpCode(self.op, |
2072 | 2096 |
offline=True) |
... | ... | |
2141 | 2165 |
}]]) |
2142 | 2166 |
self.ExecOpCode(op) |
2143 | 2167 |
|
2168 |
def testHotAddDisk(self): |
|
2169 |
self.rpc.call_blockdev_assemble.return_value = \ |
|
2170 |
self.RpcResultsBuilder() \ |
|
2171 |
.CreateSuccessfulNodeResult(self.master, ("/dev/mocked_path", |
|
2172 |
"/var/run/ganeti/instance-disks/mocked_d")) |
|
2173 |
op = self.CopyOpCode(self.op, |
|
2174 |
disks=[[constants.DDM_ADD, -1, |
|
2175 |
{ |
|
2176 |
constants.IDISK_SIZE: 1024, |
|
2177 |
}]], |
|
2178 |
hotplug=True) |
|
2179 |
self.ExecOpCode(op) |
|
2180 |
self.assertTrue(self.rpc.call_blockdev_create.called) |
|
2181 |
self.assertTrue(self.rpc.call_blockdev_assemble.called) |
|
2182 |
self.assertTrue(self.rpc.call_hotplug_device.called) |
|
2183 |
|
|
2184 |
def testHotRemoveDisk(self): |
|
2185 |
inst = self.cfg.AddNewInstance(disks=[self.cfg.CreateDisk(), |
|
2186 |
self.cfg.CreateDisk()]) |
|
2187 |
op = self.CopyOpCode(self.op, |
|
2188 |
instance_name=inst.name, |
|
2189 |
disks=[[constants.DDM_REMOVE, -1, |
|
2190 |
{}]], |
|
2191 |
hotplug=True) |
|
2192 |
self.ExecOpCode(op) |
|
2193 |
self.assertTrue(self.rpc.call_hotplug_device.called) |
|
2194 |
self.assertTrue(self.rpc.call_blockdev_shutdown.called) |
|
2195 |
self.assertTrue(self.rpc.call_blockdev_remove.called) |
|
2196 |
|
|
2144 | 2197 |
def testModifyDiskWithSize(self): |
2145 | 2198 |
op = self.CopyOpCode(self.op, |
2146 | 2199 |
disks=[[constants.DDM_MODIFY, 0, |
b/test/py/ganeti.hypervisor.hv_kvm_unittest.py | ||
---|---|---|
27 | 27 |
import socket |
28 | 28 |
import os |
29 | 29 |
import struct |
30 |
import re |
|
30 | 31 |
|
31 | 32 |
from ganeti import serializer |
32 | 33 |
from ganeti import constants |
... | ... | |
384 | 385 |
self.assertFalse(hv_kvm._ProbeTapVnetHdr(fd, _features_fn=lambda _: None)) |
385 | 386 |
|
386 | 387 |
|
388 |
class TestGenerateDeviceKVMId(unittest.TestCase): |
|
389 |
def test(self): |
|
390 |
device = objects.NIC() |
|
391 |
target = constants.HOTPLUG_TARGET_NIC |
|
392 |
fn = hv_kvm._GenerateDeviceKVMId |
|
393 |
self.assertRaises(errors.HotplugError, fn, target, device) |
|
394 |
|
|
395 |
device.pci = 5 |
|
396 |
device.uuid = "003fc157-66a8-4e6d-8b7e-ec4f69751396" |
|
397 |
self.assertTrue(re.match("hotnic-003fc157-pci-5", fn(target, device))) |
|
398 |
|
|
399 |
|
|
400 |
class TestGetRuntimeInfo(unittest.TestCase): |
|
401 |
@classmethod |
|
402 |
def _GetRuntime(cls): |
|
403 |
data = testutils.ReadTestData("kvm_runtime.json") |
|
404 |
return hv_kvm._AnalyzeSerializedRuntime(data) |
|
405 |
|
|
406 |
def _fail(self, target, device, runtime): |
|
407 |
device.uuid = "aaaaaaaa-66a8-4e6d-8b7e-ec4f69751396" |
|
408 |
self.assertRaises(errors.HotplugError, |
|
409 |
hv_kvm._GetExistingDeviceInfo, |
|
410 |
target, device, runtime) |
|
411 |
|
|
412 |
def testNIC(self): |
|
413 |
device = objects.NIC() |
|
414 |
target = constants.HOTPLUG_TARGET_NIC |
|
415 |
runtime = self._GetRuntime() |
|
416 |
|
|
417 |
self._fail(target, device, runtime) |
|
418 |
|
|
419 |
device.uuid = "003fc157-66a8-4e6d-8b7e-ec4f69751396" |
|
420 |
devinfo = hv_kvm._GetExistingDeviceInfo(target, device, runtime) |
|
421 |
self.assertTrue(devinfo.pci==6) |
|
422 |
|
|
423 |
def testDisk(self): |
|
424 |
device = objects.Disk() |
|
425 |
target = constants.HOTPLUG_TARGET_DISK |
|
426 |
runtime = self._GetRuntime() |
|
427 |
|
|
428 |
self._fail(target, device, runtime) |
|
429 |
|
|
430 |
device.uuid = "9f5c5bd4-6f60-480b-acdc-9bb1a4b7df79" |
|
431 |
(devinfo, _, __) = hv_kvm._GetExistingDeviceInfo(target, device, runtime) |
|
432 |
self.assertTrue(devinfo.pci==5) |
|
433 |
|
|
434 |
|
|
387 | 435 |
if __name__ == "__main__": |
388 | 436 |
testutils.GanetiTestProgram() |
Also available in: Unified diff