Add simple scheduler permutation tests
Change-Id: Ib55d16b2f05269ae58bbcf38e816fb776dbe4f3c
This commit is contained in:
parent
057dd2b3c6
commit
c0bd7c7ff0
251
designate/tests/unit/scheduler/test_permutations.py
Normal file
251
designate/tests/unit/scheduler/test_permutations.py
Normal file
@ -0,0 +1,251 @@
|
||||
# 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 unittest import mock
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_config import fixture as cfg_fixture
|
||||
|
||||
from designate import exceptions
|
||||
from designate import objects
|
||||
from designate import scheduler
|
||||
from designate import tests
|
||||
|
||||
DEFAULT_POOL_ID = BRONZE_POOL_ID = '67d71c2a-645c-4dde-a6b8-60a172c9ede8'
|
||||
SILVER_POOL_ID = '5fabcd37-262c-4cf3-8625-7f419434b6df'
|
||||
GOLD_POOL_ID = '24702e43-8a52-440f-ab74-19fc16048860'
|
||||
|
||||
|
||||
def build_test_pools():
|
||||
pools = objects.PoolList.from_list(
|
||||
[
|
||||
{'id': DEFAULT_POOL_ID},
|
||||
{'id': SILVER_POOL_ID},
|
||||
{'id': GOLD_POOL_ID},
|
||||
]
|
||||
|
||||
)
|
||||
|
||||
# Pool 0 is also the default pool.
|
||||
pool_0_attributes = objects.PoolAttributeList.from_list([
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'bronze'
|
||||
},
|
||||
])
|
||||
pool_1_attributes = objects.PoolAttributeList.from_list([
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'silver'
|
||||
},
|
||||
])
|
||||
pool_2_attributes = objects.PoolAttributeList.from_list([
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'gold'
|
||||
},
|
||||
])
|
||||
|
||||
pools[0].attributes = pool_0_attributes
|
||||
pools[1].attributes = pool_1_attributes
|
||||
pools[2].attributes = pool_2_attributes
|
||||
|
||||
return pools
|
||||
|
||||
|
||||
class AttributeSchedulerPermutationsTest(tests.TestCase):
|
||||
def setUp(self):
|
||||
super(AttributeSchedulerPermutationsTest, self).setUp()
|
||||
self.CONF = self.useFixture(cfg_fixture.Config(cfg.CONF)).conf
|
||||
self.context = self.get_context()
|
||||
|
||||
self.CONF.set_override(
|
||||
'scheduler_filters', ['attribute'], 'service:central'
|
||||
)
|
||||
self.CONF.set_override(
|
||||
'default_pool_id', DEFAULT_POOL_ID, 'service:central'
|
||||
)
|
||||
|
||||
attrs = {
|
||||
'find_pools.return_value': build_test_pools()
|
||||
}
|
||||
mock_storage = mock.Mock(**attrs)
|
||||
|
||||
self.scheduler = scheduler.get_scheduler(storage=mock_storage)
|
||||
|
||||
def test_get_gold_tier(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'gold'
|
||||
},
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
result = self.scheduler.schedule_zone(self.context, zone)
|
||||
|
||||
self.assertEqual(GOLD_POOL_ID, result)
|
||||
|
||||
def test_get_silver_tier(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'silver'
|
||||
},
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
result = self.scheduler.schedule_zone(self.context, zone)
|
||||
|
||||
self.assertEqual(SILVER_POOL_ID, result)
|
||||
|
||||
def test_get_bronze_tier(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'bronze'
|
||||
},
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
result = self.scheduler.schedule_zone(self.context, zone)
|
||||
|
||||
self.assertEqual(BRONZE_POOL_ID, result)
|
||||
|
||||
def test_tier_not_found_raises_exception(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'blue'
|
||||
},
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
self.assertRaises(
|
||||
exceptions.NoValidPoolFound,
|
||||
self.scheduler.schedule_zone, self.context, zone
|
||||
)
|
||||
|
||||
def test_no_tier_raises_exception(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[]
|
||||
)
|
||||
)
|
||||
|
||||
# When no attribute is requested it will return all available pools.
|
||||
# NOTE(eandersson): This is probably not intended behavior.
|
||||
# We probably want this to return NoValidPoolFound,
|
||||
# so that we can use a fallback filter with the
|
||||
# attribute filter.
|
||||
self.assertRaises(
|
||||
exceptions.MultiplePoolsFound,
|
||||
self.scheduler.schedule_zone, self.context, zone
|
||||
)
|
||||
|
||||
|
||||
class DefaultSchedulerPermutationsTest(tests.TestCase):
|
||||
def setUp(self):
|
||||
super(DefaultSchedulerPermutationsTest, self).setUp()
|
||||
self.CONF = self.useFixture(cfg_fixture.Config(cfg.CONF)).conf
|
||||
self.context = self.get_context()
|
||||
|
||||
self.CONF.set_override(
|
||||
'scheduler_filters', ['default_pool'], 'service:central'
|
||||
)
|
||||
self.CONF.set_override(
|
||||
'default_pool_id', DEFAULT_POOL_ID, 'service:central'
|
||||
)
|
||||
|
||||
attrs = {
|
||||
'find_pools.return_value': build_test_pools()
|
||||
}
|
||||
mock_storage = mock.Mock(**attrs)
|
||||
|
||||
self.scheduler = scheduler.get_scheduler(storage=mock_storage)
|
||||
|
||||
def test_get_default_pool(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
)
|
||||
|
||||
result = self.scheduler.schedule_zone(self.context, zone)
|
||||
|
||||
self.assertEqual(DEFAULT_POOL_ID, result)
|
||||
|
||||
|
||||
class FallbackSchedulerPermutationsTest(tests.TestCase):
|
||||
def setUp(self):
|
||||
super(FallbackSchedulerPermutationsTest, self).setUp()
|
||||
self.CONF = self.useFixture(cfg_fixture.Config(cfg.CONF)).conf
|
||||
self.context = self.get_context()
|
||||
|
||||
self.CONF.set_override(
|
||||
'scheduler_filters', ['attribute', 'fallback'], 'service:central'
|
||||
)
|
||||
self.CONF.set_override(
|
||||
'default_pool_id', DEFAULT_POOL_ID, 'service:central'
|
||||
)
|
||||
|
||||
attrs = {
|
||||
'find_pools.return_value': build_test_pools()
|
||||
}
|
||||
mock_storage = mock.Mock(**attrs)
|
||||
|
||||
self.scheduler = scheduler.get_scheduler(storage=mock_storage)
|
||||
|
||||
def test_tier_not_found_return_default(self):
|
||||
zone = objects.Zone(
|
||||
name='example.com.',
|
||||
type='PRIMARY',
|
||||
email='hostmaster@example.com',
|
||||
attributes=objects.ZoneAttributeList.from_list(
|
||||
[
|
||||
{
|
||||
'key': 'service_tier',
|
||||
'value': 'that does not exist'
|
||||
},
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
result = self.scheduler.schedule_zone(self.context, zone)
|
||||
|
||||
self.assertEqual(DEFAULT_POOL_ID, result)
|
Loading…
Reference in New Issue
Block a user