Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.outils_unittest.py @ cd3b4ff4

History | View | Annotate | Download (3 kB)

1 32683096 René Nussbaumer
#!/usr/bin/python
2 32683096 René Nussbaumer
#
3 32683096 René Nussbaumer
4 473d87a3 Iustin Pop
# Copyright (C) 2012, 2013 Google Inc.
5 32683096 René Nussbaumer
#
6 32683096 René Nussbaumer
# This program is free software; you can redistribute it and/or modify
7 32683096 René Nussbaumer
# it under the terms of the GNU General Public License as published by
8 32683096 René Nussbaumer
# the Free Software Foundation; either version 2 of the License, or
9 32683096 René Nussbaumer
# (at your option) any later version.
10 32683096 René Nussbaumer
#
11 32683096 René Nussbaumer
# This program is distributed in the hope that it will be useful, but
12 32683096 René Nussbaumer
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 32683096 René Nussbaumer
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 32683096 René Nussbaumer
# General Public License for more details.
15 32683096 René Nussbaumer
#
16 32683096 René Nussbaumer
# You should have received a copy of the GNU General Public License
17 32683096 René Nussbaumer
# along with this program; if not, write to the Free Software
18 32683096 René Nussbaumer
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 32683096 René Nussbaumer
# 02110-1301, USA.
20 32683096 René Nussbaumer
21 32683096 René Nussbaumer
22 473d87a3 Iustin Pop
"""Script for unittesting the outils module"""
23 32683096 René Nussbaumer
24 32683096 René Nussbaumer
25 32683096 René Nussbaumer
import unittest
26 32683096 René Nussbaumer
27 473d87a3 Iustin Pop
from ganeti import outils
28 32683096 René Nussbaumer
29 32683096 René Nussbaumer
import testutils
30 32683096 René Nussbaumer
31 32683096 René Nussbaumer
32 473d87a3 Iustin Pop
class SlotsAutoSlot(outils.AutoSlots):
33 32683096 René Nussbaumer
  @classmethod
34 32683096 René Nussbaumer
  def _GetSlots(mcs, attr):
35 32683096 René Nussbaumer
    return attr["SLOTS"]
36 32683096 René Nussbaumer
37 32683096 René Nussbaumer
38 32683096 René Nussbaumer
class AutoSlotted(object):
39 32683096 René Nussbaumer
  __metaclass__ = SlotsAutoSlot
40 32683096 René Nussbaumer
41 32683096 René Nussbaumer
  SLOTS = ["foo", "bar", "baz"]
42 32683096 René Nussbaumer
43 32683096 René Nussbaumer
44 32683096 René Nussbaumer
class TestAutoSlot(unittest.TestCase):
45 32683096 René Nussbaumer
  def test(self):
46 32683096 René Nussbaumer
    slotted = AutoSlotted()
47 32683096 René Nussbaumer
    self.assertEqual(slotted.__slots__, AutoSlotted.SLOTS)
48 32683096 René Nussbaumer
49 473ab806 Michael Hanselmann
50 473ab806 Michael Hanselmann
class TestContainerToDicts(unittest.TestCase):
51 473ab806 Michael Hanselmann
  def testUnknownType(self):
52 473ab806 Michael Hanselmann
    for value in [None, 19410, "xyz"]:
53 473ab806 Michael Hanselmann
      try:
54 fe502d25 Iustin Pop
        outils.ContainerToDicts(value)
55 473ab806 Michael Hanselmann
      except TypeError, err:
56 473ab806 Michael Hanselmann
        self.assertTrue(str(err).startswith("Unknown container type"))
57 473ab806 Michael Hanselmann
      else:
58 473ab806 Michael Hanselmann
        self.fail("Exception was not raised")
59 473ab806 Michael Hanselmann
60 473ab806 Michael Hanselmann
  def testEmptyDict(self):
61 473ab806 Michael Hanselmann
    value = {}
62 fe502d25 Iustin Pop
    self.assertFalse(type(value) in outils._SEQUENCE_TYPES)
63 fe502d25 Iustin Pop
    self.assertEqual(outils.ContainerToDicts(value), {})
64 473ab806 Michael Hanselmann
65 473ab806 Michael Hanselmann
  def testEmptySequences(self):
66 473ab806 Michael Hanselmann
    for cls in [list, tuple, set, frozenset]:
67 fe502d25 Iustin Pop
      self.assertEqual(outils.ContainerToDicts(cls()), [])
68 473ab806 Michael Hanselmann
69 473ab806 Michael Hanselmann
70 473ab806 Michael Hanselmann
class _FakeWithFromDict:
71 473ab806 Michael Hanselmann
  def FromDict(self, _):
72 473ab806 Michael Hanselmann
    raise NotImplemented
73 473ab806 Michael Hanselmann
74 473ab806 Michael Hanselmann
75 473ab806 Michael Hanselmann
class TestContainerFromDicts(unittest.TestCase):
76 473ab806 Michael Hanselmann
  def testUnknownType(self):
77 473ab806 Michael Hanselmann
    for cls in [str, int, bool]:
78 473ab806 Michael Hanselmann
      try:
79 fe502d25 Iustin Pop
        outils.ContainerFromDicts(None, cls, NotImplemented)
80 473ab806 Michael Hanselmann
      except TypeError, err:
81 473ab806 Michael Hanselmann
        self.assertTrue(str(err).startswith("Unknown container type"))
82 473ab806 Michael Hanselmann
      else:
83 473ab806 Michael Hanselmann
        self.fail("Exception was not raised")
84 473ab806 Michael Hanselmann
85 473ab806 Michael Hanselmann
      try:
86 fe502d25 Iustin Pop
        outils.ContainerFromDicts(None, cls(), NotImplemented)
87 473ab806 Michael Hanselmann
      except TypeError, err:
88 473ab806 Michael Hanselmann
        self.assertTrue(str(err).endswith("is not a type"))
89 473ab806 Michael Hanselmann
      else:
90 473ab806 Michael Hanselmann
        self.fail("Exception was not raised")
91 473ab806 Michael Hanselmann
92 473ab806 Michael Hanselmann
  def testEmptyDict(self):
93 473ab806 Michael Hanselmann
    value = {}
94 fe502d25 Iustin Pop
    self.assertFalse(type(value) in outils._SEQUENCE_TYPES)
95 fe502d25 Iustin Pop
    self.assertEqual(outils.ContainerFromDicts(value, dict,
96 473ab806 Michael Hanselmann
                                                    NotImplemented),
97 473ab806 Michael Hanselmann
                     {})
98 473ab806 Michael Hanselmann
99 473ab806 Michael Hanselmann
  def testEmptySequences(self):
100 473ab806 Michael Hanselmann
    for cls in [list, tuple, set, frozenset]:
101 fe502d25 Iustin Pop
      self.assertEqual(outils.ContainerFromDicts([], cls,
102 473ab806 Michael Hanselmann
                                                      _FakeWithFromDict),
103 473ab806 Michael Hanselmann
                       cls())
104 473ab806 Michael Hanselmann
105 473ab806 Michael Hanselmann
106 32683096 René Nussbaumer
if __name__ == "__main__":
107 32683096 René Nussbaumer
  testutils.GanetiTestProgram()