manila/manila/tests/scheduler/filters/test_driver.py

171 lines
4.9 KiB
Python

# Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from manila.scheduler.filters import driver
from manila import test
from manila.tests.scheduler import fakes
class HostFiltersTestCase(test.TestCase):
def setUp(self):
super(HostFiltersTestCase, self).setUp()
self.filter = driver.DriverFilter()
def test_passing_function(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': '1 == 1',
}
})
filter_properties = {'share_type': {}}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_failing_function(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': '1 == 2',
}
})
filter_properties = {'share_type': {}}
self.assertFalse(self.filter.host_passes(host1, filter_properties))
def test_no_filter_function(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': None,
}
})
filter_properties = {'share_type': {}}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_not_implemented(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {}
})
filter_properties = {'share_type': {}}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_no_share_extra_specs(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': '1 == 1',
}
})
filter_properties = {'share_type': {}}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_function_extra_spec_replacement(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': 'extra.var == 1',
}
})
filter_properties = {
'share_type': {
'extra_specs': {
'var': 1,
}
}
}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_function_stats_replacement(self):
host1 = fakes.FakeHostState(
'host1', {
'total_capacity_gb': 100,
'capabilities': {
'filter_function': 'stats.total_capacity_gb < 200',
}
})
filter_properties = {'share_type': {}}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_function_share_replacement(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': 'share.size < 5',
}
})
filter_properties = {
'request_spec': {
'resource_properties': {
'size': 1
}
}
}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_function_exception_caught(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'filter_function': '1 / 0 == 0',
}
})
filter_properties = {}
self.assertFalse(self.filter.host_passes(host1, filter_properties))
def test_capabilities(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'foo': 10,
'filter_function': 'capabilities.foo == 10',
},
})
filter_properties = {}
self.assertTrue(self.filter.host_passes(host1, filter_properties))
def test_wrong_capabilities(self):
host1 = fakes.FakeHostState(
'host1', {
'capabilities': {
'bar': 10,
'filter_function': 'capabilities.foo == 10',
},
})
filter_properties = {}
self.assertFalse(self.filter.host_passes(host1, filter_properties))