blob: 3e8c5831389608fa2c6ff3b11845d93aba6a5b6d [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.
"""Unit tests for factory.py."""
from chromite.lib import cros_test_lib
from chromite.lib import factory
from chromite.utils import memoize
def _GET_OBJECT():
return object()
class FactoryTest(cros_test_lib.TestCase):
"""Test that ObjectFactory behaves as expected."""
_OBJECT_NAME = "Test Object Name"
_OBJECT_TYPES = {
"t0": _GET_OBJECT,
"t1": memoize.Memoize(_GET_OBJECT),
"t3": memoize.Memoize(_GET_OBJECT),
"t4": None,
}
def _allowed_transitions(self, from_setup, to_setup):
return from_setup == "t3" and to_setup == "t4"
def setUp(self) -> None:
self.of = factory.ObjectFactory(self._OBJECT_NAME, self._OBJECT_TYPES)
self.of2 = factory.ObjectFactory(
self._OBJECT_NAME, self._OBJECT_TYPES, self._allowed_transitions
)
def testGetInstance(self) -> None:
self.of.Setup("t0")
a = self.of.GetInstance()
self.assertNotEqual(a, self.of.GetInstance())
def testGetCachedInstance(self) -> None:
self.of.Setup("t1")
a = self.of.GetInstance()
self.assertEqual(a, self.of.GetInstance())
def testDuplicateSetupForbidden(self) -> None:
self.of.Setup("t0")
with self.assertRaises(factory.ObjectFactoryIllegalOperation):
self.of.Setup("t0")
def testNotSetup(self) -> None:
with self.assertRaises(factory.ObjectFactoryIllegalOperation):
self.of.GetInstance()
def testUnknownSetupForbidden(self) -> None:
with self.assertRaises(factory.ObjectFactoryIllegalOperation):
self.of.Setup("unknown setup type")
def testSetupWithInstanceForbidden(self) -> None:
with self.assertRaises(factory.ObjectFactoryIllegalOperation):
self.of.Setup("t0", None)
def testSetupWithInstanceAllowed(self) -> None:
self.of.Setup("t4", None)
def testForbiddenTransition(self) -> None:
self.of2.Setup("t0")
with self.assertRaises(factory.ObjectFactoryIllegalOperation):
self.of2.Setup("t1")
def testAllowedTransition(self) -> None:
self.of2.Setup("t3")
a = self.of2.GetInstance()
self.of2.Setup("t4", None)
self.assertNotEqual(a, self.of2.GetInstance())