21
from nova.compute import utils as compute_utils
22
from nova.compute import vm_states
21
23
from nova import context
22
25
from nova import exception
23
26
from nova.scheduler import driver
24
27
from nova.scheduler import filter_scheduler
38
41
driver_cls = filter_scheduler.FilterScheduler
40
43
def test_run_instance_no_hosts(self):
42
Ensure empty hosts & child_zones result in NoValidHosts exception.
44
45
def _fake_empty_call_zone_method(*args, **kwargs):
47
48
sched = fakes.FakeFilterScheduler()
49
51
fake_context = context.RequestContext('user', 'project')
50
52
request_spec = {'instance_type': {'memory_mb': 1, 'root_gb': 1,
51
53
'ephemeral_gb': 0},
52
54
'instance_properties': {'project_id': 1},
53
'instance_uuids': ['fake-uuid1']}
54
self.assertRaises(exception.NoValidHost, sched.schedule_run_instance,
55
fake_context, request_spec, None, None, None,
55
'instance_uuids': [uuid]}
57
self.mox.StubOutWithMock(compute_utils, 'add_instance_fault_from_exc')
58
self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
59
compute_utils.add_instance_fault_from_exc(fake_context,
60
uuid, mox.IsA(exception.NoValidHost), mox.IgnoreArg())
61
db.instance_update_and_get_original(fake_context, uuid,
62
{'vm_state': vm_states.ERROR,
63
'task_state': None}).AndReturn(({}, {}))
65
sched.schedule_run_instance(
66
fake_context, request_spec, None, None, None, None, {})
58
68
def test_run_instance_non_admin(self):
59
"""Test creating an instance locally using run_instance, passing
60
a non-admin context. DB actions should work."""
61
69
self.was_admin = False
63
71
def fake_get(context, *args, **kwargs):
72
80
fake_context = context.RequestContext('user', 'project')
74
83
request_spec = {'instance_type': {'memory_mb': 1, 'local_gb': 1},
75
84
'instance_properties': {'project_id': 1},
76
'instance_uuids': ['fake-uuid1']}
77
self.assertRaises(exception.NoValidHost, sched.schedule_run_instance,
78
fake_context, request_spec, None, None, None,
85
'instance_uuids': [uuid]}
86
self.mox.StubOutWithMock(compute_utils, 'add_instance_fault_from_exc')
87
self.mox.StubOutWithMock(db, 'instance_update_and_get_original')
88
compute_utils.add_instance_fault_from_exc(fake_context,
89
uuid, mox.IsA(exception.NoValidHost), mox.IgnoreArg())
90
db.instance_update_and_get_original(fake_context, uuid,
91
{'vm_state': vm_states.ERROR,
92
'task_state': None}).AndReturn(({}, {}))
94
sched.schedule_run_instance(
95
fake_context, request_spec, None, None, None, None, {})
80
96
self.assertTrue(self.was_admin)
82
98
def test_schedule_bad_topic(self):
200
216
self.assertEqual(info['called'], 0)
202
218
def test_get_cost_functions(self):
203
self.flags(reserved_host_memory_mb=128)
204
219
fixture = fakes.FakeFilterScheduler()
205
220
fns = fixture.get_cost_functions()
206
221
self.assertEquals(len(fns), 1)
209
224
hostinfo = host_manager.HostState('host', 'compute')
210
225
hostinfo.update_from_compute_node(dict(memory_mb=1000,
211
226
local_gb=0, vcpus=1, disk_available_least=1000,
212
free_disk_mb=1000, free_ram_mb=1000, vcpus_used=0))
213
self.assertEquals(1000 - 128, fn(hostinfo, {}))
227
free_disk_mb=1000, free_ram_mb=872, vcpus_used=0,
229
self.assertEquals(872, fn(hostinfo, {}))
215
231
def test_max_attempts(self):
216
232
self.flags(scheduler_max_attempts=4)