27
25
from nova.compute import aggregate_states
28
26
from nova.compute import instance_types
29
27
from nova.compute import power_state
30
from nova.compute import task_states
31
from nova.compute import vm_states
32
28
from nova import context
33
29
from nova import db
34
30
from nova import exception
35
31
from nova import flags
36
32
from nova import log as logging
37
33
from nova.openstack.common import importutils
34
from nova.openstack.common import timeutils
38
35
from nova import test
39
36
from nova.tests.db import fakes as db_fakes
40
37
from nova.tests import fake_network
41
38
from nova.tests import fake_utils
42
39
from nova.tests.glance import stubs as glance_stubs
43
40
from nova.tests.xenapi import stubs
44
from nova import utils
45
41
from nova.virt.xenapi import connection as xenapi_conn
46
42
from nova.virt.xenapi import fake as xenapi_fake
47
43
from nova.virt.xenapi import vm_utils
166
161
"""This shows how to test helper classes' methods."""
167
162
stubs.stubout_session(self.stubs, stubs.FakeSessionForVolumeTests)
168
163
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
169
helper = volume_utils.VolumeHelper
170
helper.XenAPI = session.get_imported_xenapi()
171
164
vol = self._create_volume()
172
165
# oops, wrong mount point!
173
166
self.assertRaises(volume_utils.StorageError,
174
helper.parse_volume_info,
167
volume_utils.parse_volume_info,
175
168
self._make_info(),
180
173
def test_attach_volume(self):
181
174
"""This shows how to test Ops classes' methods."""
182
175
stubs.stubout_session(self.stubs, stubs.FakeSessionForVolumeTests)
183
conn = xenapi_conn.get_connection(False)
176
conn = xenapi_conn.XenAPIDriver(False)
184
177
volume = self._create_volume()
185
178
instance = db.instance_create(self.context, self.instance_values)
186
179
vm = xenapi_fake.create_vm(instance.name, 'Running')
198
191
"""This shows how to test when exceptions are raised."""
199
192
stubs.stubout_session(self.stubs,
200
193
stubs.FakeSessionForVolumeFailedTests)
201
conn = xenapi_conn.get_connection(False)
194
conn = xenapi_conn.XenAPIDriver(False)
202
195
volume = self._create_volume()
203
196
instance = db.instance_create(self.context, self.instance_values)
204
197
xenapi_fake.create_vm(instance.name, 'Running')
705
698
def test_rescue(self):
706
699
instance = self._create_instance()
707
700
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
708
vm_ref = vm_utils.VMHelper.lookup(session, instance.name)
701
vm_ref = vm_utils.lookup(session, instance.name)
710
703
xenapi_fake.create_vbd(vm_ref, "swap", userdevice=1)
711
704
xenapi_fake.create_vbd(vm_ref, "rootfs", userdevice=0)
713
conn = xenapi_conn.get_connection(False)
706
conn = xenapi_conn.XenAPIDriver(False)
714
707
image_meta = {'id': glance_stubs.FakeGlance.IMAGE_VHD,
715
708
'disk_format': 'vhd'}
716
709
conn.rescue(self.context, instance, [], image_meta)
718
711
vm = xenapi_fake.get_record('VM', vm_ref)
719
712
rescue_name = "%s-rescue" % vm["name_label"]
720
rescue_ref = vm_utils.VMHelper.lookup(session, rescue_name)
713
rescue_ref = vm_utils.lookup(session, rescue_name)
721
714
rescue_vm = xenapi_fake.get_record('VM', rescue_ref)
875
868
"VDI_resize", fake_vdi_resize)
876
869
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests,
877
870
product_version=(6, 0, 0))
878
conn = xenapi_conn.get_connection(False)
871
conn = xenapi_conn.XenAPIDriver(False)
879
872
vdi_ref = xenapi_fake.create_vdi('hurr', 'fake')
880
873
vdi_uuid = xenapi_fake.get_record('VDI', vdi_ref)['uuid']
881
conn._vmops._resize_instance(instance, vdi_uuid)
874
conn._vmops._resize_instance(instance,
875
{'uuid': vdi_uuid, 'ref': vdi_ref})
882
876
self.assertEqual(called['resize'], True)
884
878
def test_migrate_disk_and_power_off(self):
885
879
instance = db.instance_create(self.context, self.instance_values)
886
880
xenapi_fake.create_vm(instance.name, 'Running')
887
881
instance_type = db.instance_type_get_by_name(self.context, 'm1.large')
888
conn = xenapi_conn.get_connection(False)
882
conn = xenapi_conn.XenAPIDriver(False)
889
883
conn.migrate_disk_and_power_off(self.context, instance,
890
884
'127.0.0.1', instance_type, None)
1156
1150
self.context = context.RequestContext(self.user_id, self.project_id)
1159
def fake_create_vbd(cls, session, vm_ref, vdi_ref, userdevice,
1152
def fake_create_vbd(session, vm_ref, vdi_ref, userdevice,
1160
1153
vbd_type='disk', read_only=False, bootable=True):
1163
self.stubs.Set(vm_utils.VMHelper,
1156
self.stubs.Set(vm_utils, 'create_vbd', fake_create_vbd)
1167
1158
def assertIsPartitionCalled(self, called):
1168
1159
marker = {"partition_called": False}
1172
1163
self.stubs.Set(vm_utils, "_resize_part_and_fs",
1173
1164
fake_resize_part_and_fs)
1166
ctx = context.RequestContext(self.user_id, self.project_id)
1167
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1169
disk_image_type = vm_utils.ImageType.DISK_VHD
1175
1170
instance = db.instance_create(self.context, self.instance_values)
1176
disk_image_type = vm_utils.ImageType.DISK_VHD
1178
first_vdi_ref = "blah"
1181
self.conn._vmops._attach_disks(
1182
instance, disk_image_type, vm_ref, first_vdi_ref, vdis)
1171
vm_ref = xenapi_fake.create_vm(instance['name'], 'Halted')
1172
vdi_ref = xenapi_fake.create_vdi(instance['name'], 'fake')
1174
vdi_uuid = session.call_xenapi('VDI.get_record', vdi_ref)['uuid']
1175
vdis = {'root': {'uuid': vdi_uuid, 'ref': vdi_ref}}
1177
self.conn._vmops._attach_disks(instance, disk_image_type, vm_ref, vdis)
1184
1179
self.assertEqual(marker["partition_called"], called)
1249
1244
self.context = context.RequestContext(self.user_id, self.project_id)
1252
def fake_create_vbd(cls, session, vm_ref, vdi_ref, userdevice,
1246
def fake_create_vbd(session, vm_ref, vdi_ref, userdevice,
1253
1247
vbd_type='disk', read_only=False, bootable=True):
1256
self.stubs.Set(vm_utils.VMHelper,
1250
self.stubs.Set(vm_utils, 'create_vbd', fake_create_vbd)
1260
1252
def assertCalled(self, instance):
1253
ctx = context.RequestContext(self.user_id, self.project_id)
1254
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1261
1256
disk_image_type = vm_utils.ImageType.DISK_VHD
1263
first_vdi_ref = "blah"
1257
vm_ref = xenapi_fake.create_vm(instance['name'], 'Halted')
1258
vdi_ref = xenapi_fake.create_vdi(instance['name'], 'fake')
1260
vdi_uuid = session.call_xenapi('VDI.get_record', vdi_ref)['uuid']
1261
vdis = {'root': {'uuid': vdi_uuid, 'ref': vdi_ref}}
1266
1263
self.called = False
1267
self.conn._vmops._attach_disks(instance, disk_image_type,
1268
vm_ref, first_vdi_ref, vdis)
1264
self.conn._vmops._attach_disks(instance, disk_image_type, vm_ref, vdis)
1269
1265
self.assertTrue(self.called)
1271
1267
def test_generate_swap(self):
1272
1268
"""Test swap disk generation."""
1273
1269
instance = db.instance_create(self.context, self.instance_values)
1274
instance = db.instance_update(self.context, instance['id'],
1270
instance = db.instance_update(self.context, instance['uuid'],
1275
1271
{'instance_type_id': 5})
1278
def fake_generate_swap(cls, *args, **kwargs):
1273
def fake_generate_swap(*args, **kwargs):
1279
1274
self.called = True
1280
self.stubs.Set(vm_utils.VMHelper, 'generate_swap',
1275
self.stubs.Set(vm_utils, 'generate_swap', fake_generate_swap)
1283
1277
self.assertCalled(instance)
1285
1279
def test_generate_ephemeral(self):
1286
1280
"""Test ephemeral disk generation."""
1287
1281
instance = db.instance_create(self.context, self.instance_values)
1288
instance = db.instance_update(self.context, instance['id'],
1282
instance = db.instance_update(self.context, instance['uuid'],
1289
1283
{'instance_type_id': 4})
1292
def fake_generate_ephemeral(cls, *args):
1285
def fake_generate_ephemeral(*args):
1293
1286
self.called = True
1294
self.stubs.Set(vm_utils.VMHelper, 'generate_ephemeral',
1295
fake_generate_ephemeral)
1287
self.stubs.Set(vm_utils, 'generate_ephemeral', fake_generate_ephemeral)
1297
1289
self.assertCalled(instance)
1300
1292
class XenAPIBWUsageTestCase(test.TestCase):
1301
1293
def setUp(self):
1302
1294
super(XenAPIBWUsageTestCase, self).setUp()
1303
self.stubs.Set(vm_utils.VMHelper, "compile_metrics",
1295
self.stubs.Set(vm_utils, 'compile_metrics',
1304
1296
XenAPIBWUsageTestCase._fake_compile_metrics)
1305
1297
self.flags(target_host='127.0.0.1',
1306
1298
xenapi_connection_url='test_url',
1643
1636
self.flags(sr_matching_filter='yadayadayada')
1644
1637
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
1645
1638
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1646
helper = vm_utils.VMHelper
1647
helper.XenAPI = session.get_imported_xenapi()
1648
1639
self.assertRaises(exception.StorageRepositoryNotFound,
1649
helper.safe_find_sr, session)
1640
vm_utils.safe_find_sr, session)
1651
1642
def test_safe_find_sr_local_storage(self):
1652
1643
"""Ensure the default local-storage is found."""
1653
1644
self.flags(sr_matching_filter='other-config:i18n-key=local-storage')
1654
1645
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
1655
1646
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1656
helper = vm_utils.VMHelper
1657
helper.XenAPI = session.get_imported_xenapi()
1658
1647
host_ref = xenapi_fake.get_all('host')[0]
1659
1648
local_sr = xenapi_fake.create_sr(
1660
1649
name_label='Fake Storage',
1671
1660
self.flags(sr_matching_filter='other-config:my_fake_sr=true')
1672
1661
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
1673
1662
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1674
helper = vm_utils.VMHelper
1675
helper.XenAPI = session.get_imported_xenapi()
1676
1663
host_ref = xenapi_fake.get_all('host')[0]
1677
1664
local_sr = xenapi_fake.create_sr(name_label='Fake Storage',
1679
1666
other_config={'my_fake_sr': 'true'},
1680
1667
host_ref=host_ref)
1681
expected = helper.safe_find_sr(session)
1668
expected = vm_utils.safe_find_sr(session)
1682
1669
self.assertEqual(local_sr, expected)
1684
1671
def test_safe_find_sr_default(self):
1686
1673
self.flags(sr_matching_filter='default-sr:true')
1687
1674
stubs.stubout_session(self.stubs, stubs.FakeSessionForVMTests)
1688
1675
session = xenapi_conn.XenAPISession('test_url', 'root', 'test_pass')
1689
helper = vm_utils.VMHelper
1690
1676
pool_ref = xenapi_fake.create_pool('')
1691
helper.XenAPI = session.get_imported_xenapi()
1692
expected = helper.safe_find_sr(session)
1677
expected = vm_utils.safe_find_sr(session)
1693
1678
self.assertEqual(session.call_xenapi('pool.get_default_SR', pool_ref),