diff options
| author | Christopher MacGown <chris@pistoncloud.com> | 2012-01-23 18:25:34 -0800 |
|---|---|---|
| committer | Christopher MacGown <ignoti+github@gmail.com> | 2012-01-24 08:19:46 -0800 |
| commit | 91bc67d81a9711fbf5a0f0c46bbf1d87232391f8 (patch) | |
| tree | b9223a4cdaed27af32aeedcb01999726b72d0523 /nova/tests | |
| parent | 0fc18408d93aa30a2cb2650951dc1171b4ef6bcd (diff) | |
Add affinity filters
updated to use scheduler_hints and have non-douchey names
Change-Id: I4fa22980a28e4a051176f1426a571f37fb5f118e
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/scheduler/fakes.py | 29 | ||||
| -rw-r--r-- | nova/tests/scheduler/test_host_filters.py | 84 |
2 files changed, 113 insertions, 0 deletions
diff --git a/nova/tests/scheduler/fakes.py b/nova/tests/scheduler/fakes.py index 8abf68e52..94287bac3 100644 --- a/nova/tests/scheduler/fakes.py +++ b/nova/tests/scheduler/fakes.py @@ -19,6 +19,8 @@ Fakes For Scheduler tests. import mox from nova import db +from nova.compute import instance_types +from nova.compute import vm_states from nova.scheduler import distributed_scheduler from nova.scheduler import host_manager from nova.scheduler import zone_manager @@ -96,6 +98,33 @@ class FakeHostState(host_manager.HostState): setattr(self, key, val) +class FakeInstance(object): + def __init__(self, context=None, params=None, type_name='m1.tiny'): + """Create a test instance. Returns uuid""" + self.context = context + + i = self._create_fake_instance(params, type_name=type_name) + self.uuid = i['uuid'] + + def _create_fake_instance(self, params=None, type_name='m1.tiny'): + """Create a test instance""" + if not params: + params = {} + + inst = {} + inst['vm_state'] = vm_states.ACTIVE + inst['image_ref'] = 1 + inst['reservation_id'] = 'r-fakeres' + inst['launch_time'] = '10' + inst['user_id'] = 'fake' + inst['project_id'] = 'fake' + type_id = instance_types.get_instance_type_by_name(type_name)['id'] + inst['instance_type_id'] = type_id + inst['ami_launch_index'] = 0 + inst.update(params) + return db.instance_create(self.context, inst) + + class FakeComputeAPI(object): def create_db_entry_for_new_instance(self, *args, **kwargs): pass diff --git a/nova/tests/scheduler/test_host_filters.py b/nova/tests/scheduler/test_host_filters.py index 8d9fa18a1..5e3ff2601 100644 --- a/nova/tests/scheduler/test_host_filters.py +++ b/nova/tests/scheduler/test_host_filters.py @@ -18,6 +18,7 @@ Tests For Scheduler Host Filters. import json from nova import context +from nova import flags from nova.scheduler import filters from nova import test from nova.tests.scheduler import fakes @@ -29,6 +30,7 @@ class HostFiltersTestCase(test.TestCase): def setUp(self): super(HostFiltersTestCase, self).setUp() + self.context = context.RequestContext('fake', 'fake') self.json_query = json.dumps( ['and', ['>=', '$free_ram_mb', 1024], ['>=', '$free_disk_mb', 200 * 1024]]) @@ -43,6 +45,88 @@ class HostFiltersTestCase(test.TestCase): return ret_value self.stubs.Set(utils, 'service_is_up', fake_service_is_up) + def test_affinity_different_filter_passes(self): + filt_cls = filters.DifferentHostFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host2'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'different_host': [instance_uuid], }} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + + def test_affinity_different_filter_fails(self): + filt_cls = filters.DifferentHostFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host1'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'different_host': [instance_uuid], }} + + self.assertFalse(filt_cls.host_passes(host, filter_properties)) + + def test_affinity_same_filter_passes(self): + filt_cls = filters.SameHostFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host1'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'same_host': [instance_uuid], }} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + + def test_affinity_same_filter_fails(self): + filt_cls = filters.SameHostFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + instance = fakes.FakeInstance(context=self.context, + params={'host': 'host2'}) + instance_uuid = instance.uuid + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'same_host': [instance_uuid], }} + + self.assertFalse(filt_cls.host_passes(host, filter_properties)) + + def test_affinity_simple_cidr_filter_passes(self): + filt_cls = filters.SimpleCIDRAffinityFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + + affinity_ip = flags.FLAGS.my_ip.split('.')[0:3] + affinity_ip.append('100') + affinity_ip = str.join('.', affinity_ip) + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'cidr': '/24', + 'build_near_host_ip': affinity_ip}} + + self.assertTrue(filt_cls.host_passes(host, filter_properties)) + + def test_affinity_simple_cidr_filter_fails(self): + filt_cls = filters.SimpleCIDRAffinityFilter() + host = fakes.FakeHostState('host1', 'compute', {}) + + affinity_ip = flags.FLAGS.my_ip.split('.') + affinity_ip[-1] = '100' if affinity_ip[-1] != '100' else '101' + affinity_ip = str.join('.', affinity_ip) + + filter_properties = {'context': self.context.elevated(), + 'scheduler_hints': { + 'cidr': '/32', + 'build_near_host_ip': affinity_ip}} + + self.assertFalse(filt_cls.host_passes(host, filter_properties)) + def test_compute_filter_passes(self): self._stub_service_is_up(True) filt_cls = filters.ComputeFilter() |
