~ubuntu-cloud-archive/ubuntu/precise/nova/trunk

« back to all changes in this revision

Viewing changes to nova/tests/scheduler/test_filter_scheduler.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Adam Gandelman, Chuck Short, Vishvananda Ishaya
  • Date: 2012-09-20 07:45:50 UTC
  • mfrom: (1.1.62)
  • Revision ID: package-import@ubuntu.com-20120920074550-fzmmmzqcntnw1vu7
Tags: 2012.2~rc1-0ubuntu1
[ Adam Gandelman ]
* Ensure /etc/nova/rootwrap.d/ is only writable by root, ensure
  those permissions on /etc/nova/rootwrap.conf as well as
  all individual filter configurations.

[ Chuck Short ]
* Fix lintian warnings
* debian/*.lograote: compress logfiles when they are rotated. (LP:
  #1049915)
* debian/control: 
  - Suggest ceph-common for nova-volume.
  - Add python-cinderclient as a build depends.

[Vishvananda Ishaya]
* Split up vncproxy and xvpvncproxy.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
import mox
20
20
 
 
21
from nova.compute import utils as compute_utils
 
22
from nova.compute import vm_states
21
23
from nova import context
 
24
from nova import db
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
39
42
 
40
43
    def test_run_instance_no_hosts(self):
41
 
        """
42
 
        Ensure empty hosts & child_zones result in NoValidHosts exception.
43
 
        """
 
44
 
44
45
        def _fake_empty_call_zone_method(*args, **kwargs):
45
46
            return []
46
47
 
47
48
        sched = fakes.FakeFilterScheduler()
48
49
 
 
50
        uuid = 'fake-uuid1'
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,
56
 
                          None, {})
 
55
                        'instance_uuids': [uuid]}
 
56
 
 
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(({}, {}))
 
64
        self.mox.ReplayAll()
 
65
        sched.schedule_run_instance(
 
66
                fake_context, request_spec, None, None, None, None, {})
57
67
 
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
62
70
 
63
71
        def fake_get(context, *args, **kwargs):
71
79
 
72
80
        fake_context = context.RequestContext('user', 'project')
73
81
 
 
82
        uuid = 'fake-uuid1'
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,
79
 
                          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(({}, {}))
 
93
        self.mox.ReplayAll()
 
94
        sched.schedule_run_instance(
 
95
                fake_context, request_spec, None, None, None, None, {})
80
96
        self.assertTrue(self.was_admin)
81
97
 
82
98
    def test_schedule_bad_topic(self):
200
216
        self.assertEqual(info['called'], 0)
201
217
 
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,
 
228
                local_gb_used=0))
 
229
        self.assertEquals(872, fn(hostinfo, {}))
214
230
 
215
231
    def test_max_attempts(self):
216
232
        self.flags(scheduler_max_attempts=4)