manila/manila/tests/scheduler/filters/test_capabilities.py

175 lines
6.6 KiB
Python

# Copyright 2011 OpenStack Foundation.
# 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.
"""
Tests For CapabilitiesFilter.
"""
import ddt
from manila.scheduler.filters import capabilities
from manila import test
from manila.tests.scheduler import fakes
@ddt.ddt
class HostFiltersTestCase(test.TestCase):
"""Test case for CapabilitiesFilter."""
def setUp(self):
super(HostFiltersTestCase, self).setUp()
self.filter = capabilities.CapabilitiesFilter()
def _do_test_type_filter_extra_specs(self, ecaps, especs, passes):
capabilities = {'enabled': True}
capabilities.update(ecaps)
service = {'disabled': False}
filter_properties = {'resource_type': {'name': 'fake_type',
'extra_specs': especs}}
host = fakes.FakeHostState('host1',
{'free_capacity_gb': 1024,
'capabilities': capabilities,
'service': service})
assertion = self.assertTrue if passes else self.assertFalse
assertion(self.filter.host_passes(host, filter_properties))
def test_capability_filter_passes_extra_specs_simple(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': '1', 'opt2': '2'},
especs={'opt1': '1', 'opt2': '2'},
passes=True)
def test_capability_filter_passes_extra_specs_ignore_azs_spec(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': '1', 'opt2': '2'},
especs={'opt1': '1',
'opt2': '2',
'availability_zones': 'az1,az2'},
passes=True)
def test_capability_filter_fails_extra_specs_simple(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': '1', 'opt2': '2'},
especs={'opt1': '1', 'opt2': '222'},
passes=False)
def test_capability_filter_passes_extra_specs_complex(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': 10, 'opt2': 5},
especs={'opt1': '>= 2', 'opt2': '<= 8'},
passes=True)
def test_capability_filter_fails_extra_specs_complex(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': 10, 'opt2': 5},
especs={'opt1': '>= 2', 'opt2': '>= 8'},
passes=False)
def test_capability_filter_passes_extra_specs_list_simple(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': ['1', '2'], 'opt2': '2'},
especs={'opt1': '1', 'opt2': '2'},
passes=True)
@ddt.data('<is> True', '<is> False')
def test_capability_filter_passes_extra_specs_list_complex(self, opt1):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': [True, False], 'opt2': ['1', '2']},
especs={'opt1': opt1, 'opt2': '<= 8'},
passes=True)
def test_capability_filter_fails_extra_specs_list_simple(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': ['1', '2'], 'opt2': ['2']},
especs={'opt1': '3', 'opt2': '2'},
passes=False)
def test_capability_filter_fails_extra_specs_list_complex(self):
self._do_test_type_filter_extra_specs(
ecaps={'opt1': [True, False], 'opt2': ['1', '2']},
especs={'opt1': 'fake', 'opt2': '<= 8'},
passes=False)
def test_capability_filter_passes_scope_extra_specs(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv1': {'opt1': 10}},
especs={'capabilities:scope_lv1:opt1': '>= 2'},
passes=True)
def test_capability_filter_passes_fakescope_extra_specs(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv1': {'opt1': 10}, 'opt2': 5},
especs={'scope_lv1:opt1': '= 2', 'opt2': '>= 3'},
passes=True)
def test_capability_filter_fails_scope_extra_specs(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv1': {'opt1': 10}},
especs={'capabilities:scope_lv1:opt1': '<= 2'},
passes=False)
def test_capability_filter_passes_multi_level_scope_extra_specs(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv0': {'scope_lv1':
{'scope_lv2': {'opt1': 10}}}},
especs={'capabilities:scope_lv0:scope_lv1:scope_lv2:opt1': '>= 2'},
passes=True)
def test_capability_filter_fails_wrong_scope_extra_specs(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv0': {'opt1': 10}},
especs={'capabilities:scope_lv1:opt1': '>= 2'},
passes=False)
def test_capability_filter_passes_multi_level_scope_extra_specs_list(self):
self._do_test_type_filter_extra_specs(
ecaps={
'scope_lv0': {
'scope_lv1': {
'scope_lv2': {
'opt1': [True, False],
},
},
},
},
especs={
'capabilities:scope_lv0:scope_lv1:scope_lv2:opt1': '<is> True',
},
passes=True)
def test_capability_filter_fails_multi_level_scope_extra_specs_list(self):
self._do_test_type_filter_extra_specs(
ecaps={
'scope_lv0': {
'scope_lv1': {
'scope_lv2': {
'opt1': [True, False],
'opt2': ['1', '2'],
},
},
},
},
especs={
'capabilities:scope_lv0:scope_lv1:scope_lv2:opt1': '<is> True',
'capabilities:scope_lv0:scope_lv1:scope_lv2:opt2': '3',
},
passes=False)
def test_capability_filter_fails_wrong_scope_extra_specs_list(self):
self._do_test_type_filter_extra_specs(
ecaps={'scope_lv0': {'opt1': [True, False]}},
especs={'capabilities:scope_lv1:opt1': '<is> True'},
passes=False)