Преглед изворни кода

Add unit tests for `scheduler/filters/trivial_filters.py`
module

Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>

Mihaela Balutoiu пре 2 година
родитељ
комит
1b4a541299
1 измењених фајлова са 137 додато и 0 уклоњено
  1. 137 0
      coriolis/tests/scheduler/filters/test_trivial_filters.py

+ 137 - 0
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, "<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)