From 278ea6d67c1e9ee888e2a1f632ac387219af0510 Mon Sep 17 00:00:00 2001 From: Mihaela Balutoiu Date: Fri, 26 Jan 2024 11:38:15 +0200 Subject: [PATCH] Add unit tests for `scheduler/filters/trivial_filters.py` module Signed-off-by: Mihaela Balutoiu --- .../scheduler/filters/test_trivial_filters.py | 137 ++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 coriolis/tests/scheduler/filters/test_trivial_filters.py diff --git a/coriolis/tests/scheduler/filters/test_trivial_filters.py b/coriolis/tests/scheduler/filters/test_trivial_filters.py new file mode 100644 index 00000000..eac435cd --- /dev/null +++ b/coriolis/tests/scheduler/filters/test_trivial_filters.py @@ -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, "" % (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, "" % 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, "" % 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, + "" % + 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)