blob: b988ff0d6997b23ba54add23708f93adae4a2135 [file] [log] [blame]
# Copyright 2015 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unittests for main builder logic (__init__.py)."""
import importlib
from unittest import mock
from chromite.cbuildbot import builders
from chromite.cbuildbot.builders import simple_builders
from chromite.lib import cros_test_lib
class ModuleTest(cros_test_lib.MockTempDirTestCase):
"""Module loading related tests"""
def testGetBuilderClass(self) -> None:
"""Check behavior when requesting a valid builder."""
result = builders.GetBuilderClass("simple_builders.SimpleBuilder")
self.assertEqual(result, simple_builders.SimpleBuilder)
def testGetBuilderClassError(self) -> None:
"""Check behavior when requesting missing builders."""
self.assertRaises(ValueError, builders.GetBuilderClass, "Foalksdjo")
self.assertRaises(
ImportError, builders.GetBuilderClass, "foo.Foalksdjo"
)
self.assertRaises(
AttributeError,
builders.GetBuilderClass,
"generic_builders.Foalksdjo",
)
def testGetBuilderClassConfig(self) -> None:
"""Check behavior when requesting config builders.
This can't be done with live classes since the site config may or may
not be there.
"""
# Setup
mock_module = mock.Mock()
mock_module.MyBuilder = "fake_class"
mock_import = self.PatchObject(
importlib, "import_module", return_value=mock_module
)
# Test
result = builders.GetBuilderClass("config.my_builders.MyBuilder")
# Verify
mock_import.assert_called_once_with("chromite.config.my_builders")
self.assertEqual(result, "fake_class")
# Test again with a nested builder class name.
mock_import.reset_mock()
# Test
result = builders.GetBuilderClass("config.nested.my_builders.MyBuilder")
# Verify
mock_import.assert_called_once_with(
"chromite.config.nested.my_builders"
)
self.assertEqual(result, "fake_class")