summaryrefslogtreecommitdiff
path: root/lib/factory_unittest.py
blob: dba22ac8c6d6a196a1cfab4fa00d292b787742d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# 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 __future__ import print_function

from chromite.lib import cros_test_lib
from chromite.lib import factory

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' : factory.CachedFunctionCall(_GET_OBJECT),
      't3' : factory.CachedFunctionCall(_GET_OBJECT),
      't4' : None,
  }

  def _allowed_transitions(self, from_setup, to_setup):
    return from_setup == 't3' and to_setup == 't4'

  def setUp(self):
    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):
    self.of.Setup('t0')
    a = self.of.GetInstance()
    self.assertNotEqual(a, self.of.GetInstance())

  def testGetCachedInstance(self):
    self.of.Setup('t1')
    a = self.of.GetInstance()
    self.assertEqual(a, self.of.GetInstance())

  def testDuplicateSetupForbidden(self):
    self.of.Setup('t0')
    with self.assertRaises(factory.ObjectFactoryIllegalOperation):
      self.of.Setup('t0')

  def testNotSetup(self):
    with self.assertRaises(factory.ObjectFactoryIllegalOperation):
      self.of.GetInstance()

  def testUnknownSetupForbidden(self):
    with self.assertRaises(factory.ObjectFactoryIllegalOperation):
      self.of.Setup('unknown setup type')

  def testSetupWithInstanceForbidden(self):
    with self.assertRaises(factory.ObjectFactoryIllegalOperation):
      self.of.Setup('t0', None)

  def testSetupWithInstanceAllowed(self):
    self.of.Setup('t4', None)

  def testForbiddenTransition(self):
    self.of2.Setup('t0')
    with self.assertRaises(factory.ObjectFactoryIllegalOperation):
      self.of2.Setup('t1')

  def testAllowedTransition(self):
    self.of2.Setup('t3')
    a = self.of2.GetInstance()
    self.of2.Setup('t4', None)
    self.assertNotEqual(a, self.of2.GetInstance())