Skip to content

Commit

Permalink
Add unit tests for scheduler/filters/trivial_filters.py
Browse files Browse the repository at this point in the history
module

Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>
  • Loading branch information
mihaelabalutoiu committed Feb 28, 2024
1 parent b5adb28 commit 51c8434
Showing 1 changed file with 137 additions and 0 deletions.
137 changes: 137 additions & 0 deletions coriolis/tests/scheduler/filters/test_trivial_filters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# Copyright 2024 Cloudbase Solutions Srl
# All Rights Reserved.

from unittest import mock

import ddt

from coriolis.scheduler.filters import trivial_filters
from coriolis.tests import test_base


@ddt.ddt
class RegionsFilterTestCase(test_base.CoriolisBaseTestCase):
"""Test suite for the RegionsFilter class."""

def setUp(self):
super(RegionsFilterTestCase, self).setUp()
self.regions = [mock.sentinel.region1, mock.sentinel.region2]
self.any_region = False
self.regions_filter = trivial_filters.RegionsFilter(
self.regions, self.any_region)

def test__repr__(self):
result = repr(self.regions_filter)

self.assertEqual(result, "<RegionsFilter(regions=%s, "
"any_region=%s)>" % (self.regions,
self.any_region))

@ddt.data(
(None, [mock.sentinel.region1, mock.sentinel.region2], 100, False),
([mock.sentinel.region1, mock.sentinel.region2],
[mock.sentinel.region1, mock.sentinel.region2], 100, False),
([mock.sentinel.region1, mock.sentinel.region2], [], 0, False),
([mock.sentinel.region1, mock.sentinel.region2],
[mock.sentinel.region1], 0, False),
([mock.sentinel.region1, mock.sentinel.region2],
[mock.sentinel.region1], 100, True)
)
@ddt.unpack
def test_rate_service(self, regions, mapped_regions, expected, any_region):
self.regions_filter._regions = regions
self.regions_filter._any_region = any_region
mock_service = mock.Mock()
mock_service.mapped_regions = [mock.Mock(id=region) for region in
mapped_regions]

result = self.regions_filter.rate_service(mock_service)

self.assertEqual(result, expected)


class TopicFilterTestCase(test_base.CoriolisBaseTestCase):
"""Test suite for the TopicFilter class."""

def setUp(self):
super(TopicFilterTestCase, self).setUp()
self.service = mock.Mock()
self.topic = mock.sentinel.topic
self.topic_filter = trivial_filters.TopicFilter(self.topic)

def test__repr__(self):
result = repr(self.topic_filter)
self.assertEqual(result, "<TopicFilter(topic=%s)>" % self.topic)

def test_rate_service(self):
self.service.topic = self.topic

result = self.topic_filter.rate_service(self.service)
self.assertEqual(result, 100)

def test_rate_service_false(self):
self.service.topic = mock.sentinel.other_topic

result = self.topic_filter.rate_service(self.service)
self.assertEqual(result, 0)


class EnabledFilterTestCase(test_base.CoriolisBaseTestCase):
"""Test suite for the EnabledFilter class."""

def setUp(self):
super(EnabledFilterTestCase, self).setUp()
self.service = mock.Mock()
self.enabled = True
self.enabled_filter = trivial_filters.EnabledFilter()

def test__repr__(self):
result = repr(self.enabled_filter)
self.assertEqual(result, "<EnabledFilter(enabled=%s)>" % self.enabled)

def test_rate_service(self):
self.service.enabled = True

result = self.enabled_filter.rate_service(self.service)
self.assertEqual(result, 100)

def test_rate_service_false(self):
self.service.enabled = False

result = self.enabled_filter.rate_service(self.service)
self.assertEqual(result, 0)


@ddt.ddt
class ProviderTypesFilterTestCase(test_base.CoriolisBaseTestCase):
"""Test suite for the ProviderTypesFilter class."""

def setUp(self):
super(ProviderTypesFilterTestCase, self).setUp()
self.service = mock.Mock()
self.provider_types = [mock.sentinel.provider_type1,
mock.sentinel.provider_type2]
self.provider_types_filter = trivial_filters.ProviderTypesFilter(
self.provider_types)

def test__repr__(self):
result = repr(self.provider_types_filter)
self.assertEqual(result,
"<ProviderTypesFilter(provider_requirements=%s)>" %
self.provider_types)

@ddt.data(
({'platform1': ['type1']}, {'platform1': {'types': ['type1']}}, 100),
({'platform1': ['type1']}, {'platform2': {'types': ['type1']}}, 0),
({'platform1': ['type1', 'type2']},
{'platform1': {'types': ['type1']}}, 0)
)
@ddt.unpack
def test_rate_service(self, provider_requirements, providers, expected):
self.provider_types_filter.\
_provider_requirements = provider_requirements
self.service.providers = providers

result = self.provider_types_filter.rate_service(self.service)

self.assertEqual(result, expected)

0 comments on commit 51c8434

Please sign in to comment.