Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.objects_unittest.py @ 6760e4ed

History | View | Annotate | Download (4.5 kB)

1 4c14965f Guido Trotter
#!/usr/bin/python
2 4c14965f Guido Trotter
#
3 4c14965f Guido Trotter
4 4c14965f Guido Trotter
# Copyright (C) 2006, 2007, 2008 Google Inc.
5 4c14965f Guido Trotter
#
6 4c14965f Guido Trotter
# This program is free software; you can redistribute it and/or modify
7 4c14965f Guido Trotter
# it under the terms of the GNU General Public License as published by
8 4c14965f Guido Trotter
# the Free Software Foundation; either version 2 of the License, or
9 4c14965f Guido Trotter
# (at your option) any later version.
10 4c14965f Guido Trotter
#
11 4c14965f Guido Trotter
# This program is distributed in the hope that it will be useful, but
12 4c14965f Guido Trotter
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 4c14965f Guido Trotter
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 4c14965f Guido Trotter
# General Public License for more details.
15 4c14965f Guido Trotter
#
16 4c14965f Guido Trotter
# You should have received a copy of the GNU General Public License
17 4c14965f Guido Trotter
# along with this program; if not, write to the Free Software
18 4c14965f Guido Trotter
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 4c14965f Guido Trotter
# 0.0510-1301, USA.
20 4c14965f Guido Trotter
21 4c14965f Guido Trotter
22 4c14965f Guido Trotter
"""Script for unittesting the objects module"""
23 4c14965f Guido Trotter
24 4c14965f Guido Trotter
25 4c14965f Guido Trotter
import unittest
26 4c14965f Guido Trotter
27 7b64b9ea René Nussbaumer
from ganeti import constants
28 4c14965f Guido Trotter
from ganeti import objects
29 4c14965f Guido Trotter
30 25231ec5 Michael Hanselmann
import testutils
31 25231ec5 Michael Hanselmann
32 25231ec5 Michael Hanselmann
33 4c14965f Guido Trotter
class SimpleObject(objects.ConfigObject):
34 4c14965f Guido Trotter
  __slots__ = ['a', 'b']
35 4c14965f Guido Trotter
36 25231ec5 Michael Hanselmann
37 4c14965f Guido Trotter
class TestDictState(unittest.TestCase):
38 4c14965f Guido Trotter
  """Simple dict tansformation tests"""
39 4c14965f Guido Trotter
40 4c14965f Guido Trotter
  def testSimpleObjectToDict(self):
41 4c14965f Guido Trotter
    o1 = SimpleObject(a='1')
42 4c14965f Guido Trotter
    self.assertEquals(o1.ToDict(), {'a': '1'})
43 4c14965f Guido Trotter
    self.assertEquals(o1.__getstate__(), {'a': '1'})
44 4c14965f Guido Trotter
    self.assertEquals(o1.__getstate__(), o1.ToDict())
45 4c14965f Guido Trotter
    o1.a = 2
46 4c14965f Guido Trotter
    o1.b = 5
47 4c14965f Guido Trotter
    self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5})
48 4c14965f Guido Trotter
    o2 = SimpleObject.FromDict(o1.ToDict())
49 4c14965f Guido Trotter
    self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5})
50 4c14965f Guido Trotter
51 4c14965f Guido Trotter
52 7b64b9ea René Nussbaumer
class TestClusterObject(unittest.TestCase):
53 7b64b9ea René Nussbaumer
  """Tests done on a L{objects.Cluster}"""
54 7b64b9ea René Nussbaumer
55 7b64b9ea René Nussbaumer
  def setUp(self):
56 7b64b9ea René Nussbaumer
    hvparams = {
57 7b64b9ea René Nussbaumer
      constants.HT_FAKE: {
58 7b64b9ea René Nussbaumer
        "foo": "bar",
59 7b64b9ea René Nussbaumer
        "bar": "foo",
60 7b64b9ea René Nussbaumer
        "foobar": "barfoo",
61 7b64b9ea René Nussbaumer
        },
62 7b64b9ea René Nussbaumer
      }
63 7b64b9ea René Nussbaumer
    os_hvp = {
64 7b64b9ea René Nussbaumer
      "lenny-image": {
65 7b64b9ea René Nussbaumer
        constants.HT_FAKE: {
66 7b64b9ea René Nussbaumer
          "foo": "baz",
67 7b64b9ea René Nussbaumer
          "foobar": "foobar",
68 7b64b9ea René Nussbaumer
          "blah": "blibb",
69 7b64b9ea René Nussbaumer
          "blubb": "blah",
70 7b64b9ea René Nussbaumer
          },
71 7b64b9ea René Nussbaumer
        constants.HT_XEN_PVM: {
72 7b64b9ea René Nussbaumer
          "root_path": "/dev/sda5",
73 7b64b9ea René Nussbaumer
          "foo": "foobar",
74 7b64b9ea René Nussbaumer
          },
75 7b64b9ea René Nussbaumer
        },
76 7b64b9ea René Nussbaumer
      "ubuntu-hardy": {
77 7b64b9ea René Nussbaumer
        },
78 7b64b9ea René Nussbaumer
      }
79 7b64b9ea René Nussbaumer
    self.fake_cl = objects.Cluster(hvparams=hvparams, os_hvp=os_hvp)
80 7b64b9ea René Nussbaumer
    self.fake_cl.UpgradeConfig()
81 7b64b9ea René Nussbaumer
82 d63479b5 Iustin Pop
  def testGetHVDefaults(self):
83 d63479b5 Iustin Pop
    cl = self.fake_cl
84 d63479b5 Iustin Pop
    self.failUnlessEqual(cl.GetHVDefaults(constants.HT_FAKE),
85 d63479b5 Iustin Pop
                         cl.hvparams[constants.HT_FAKE])
86 d63479b5 Iustin Pop
    self.failUnlessEqual(cl.GetHVDefaults(None), {})
87 d63479b5 Iustin Pop
    self.failUnlessEqual(cl.GetHVDefaults(constants.HT_XEN_PVM,
88 d63479b5 Iustin Pop
                                          os_name="lenny-image"),
89 d63479b5 Iustin Pop
                         cl.os_hvp["lenny-image"][constants.HT_XEN_PVM])
90 d63479b5 Iustin Pop
91 d63479b5 Iustin Pop
92 7b64b9ea René Nussbaumer
  def testFillHvFullMerge(self):
93 7b64b9ea René Nussbaumer
    inst_hvparams = {
94 7b64b9ea René Nussbaumer
      "blah": "blubb",
95 7b64b9ea René Nussbaumer
      }
96 7b64b9ea René Nussbaumer
97 7b64b9ea René Nussbaumer
    fake_dict = {
98 7b64b9ea René Nussbaumer
      "foo": "baz",
99 7b64b9ea René Nussbaumer
      "bar": "foo",
100 7b64b9ea René Nussbaumer
      "foobar": "foobar",
101 7b64b9ea René Nussbaumer
      "blah": "blubb",
102 7b64b9ea René Nussbaumer
      "blubb": "blah",
103 7b64b9ea René Nussbaumer
      }
104 7b64b9ea René Nussbaumer
    fake_inst = objects.Instance(name="foobar",
105 7b64b9ea René Nussbaumer
                                 os="lenny-image",
106 7b64b9ea René Nussbaumer
                                 hypervisor=constants.HT_FAKE,
107 7b64b9ea René Nussbaumer
                                 hvparams=inst_hvparams)
108 7b64b9ea René Nussbaumer
    self.assertEqual(fake_dict, self.fake_cl.FillHV(fake_inst))
109 7b64b9ea René Nussbaumer
110 7b64b9ea René Nussbaumer
  def testFillHvGlobalParams(self):
111 7b64b9ea René Nussbaumer
    fake_inst = objects.Instance(name="foobar",
112 7b64b9ea René Nussbaumer
                                 os="ubuntu-hardy",
113 7b64b9ea René Nussbaumer
                                 hypervisor=constants.HT_FAKE,
114 7b64b9ea René Nussbaumer
                                 hvparams={})
115 7b64b9ea René Nussbaumer
    self.assertEqual(self.fake_cl.hvparams[constants.HT_FAKE],
116 7b64b9ea René Nussbaumer
                     self.fake_cl.FillHV(fake_inst))
117 7b64b9ea René Nussbaumer
118 7b64b9ea René Nussbaumer
  def testFillHvInstParams(self):
119 7b64b9ea René Nussbaumer
    inst_hvparams = {
120 7b64b9ea René Nussbaumer
      "blah": "blubb",
121 7b64b9ea René Nussbaumer
      }
122 7b64b9ea René Nussbaumer
    fake_inst = objects.Instance(name="foobar",
123 7b64b9ea René Nussbaumer
                                 os="ubuntu-hardy",
124 7b64b9ea René Nussbaumer
                                 hypervisor=constants.HT_XEN_PVM,
125 7b64b9ea René Nussbaumer
                                 hvparams=inst_hvparams)
126 7b64b9ea René Nussbaumer
    self.assertEqual(inst_hvparams, self.fake_cl.FillHV(fake_inst))
127 7b64b9ea René Nussbaumer
128 7b64b9ea René Nussbaumer
  def testFillHvEmptyParams(self):
129 7b64b9ea René Nussbaumer
    fake_inst = objects.Instance(name="foobar",
130 7b64b9ea René Nussbaumer
                                 os="ubuntu-hardy",
131 7b64b9ea René Nussbaumer
                                 hypervisor=constants.HT_XEN_PVM,
132 7b64b9ea René Nussbaumer
                                 hvparams={})
133 7b64b9ea René Nussbaumer
    self.assertEqual({}, self.fake_cl.FillHV(fake_inst))
134 7b64b9ea René Nussbaumer
135 7b64b9ea René Nussbaumer
  def testFillHvPartialParams(self):
136 7b64b9ea René Nussbaumer
    os = "lenny-image"
137 7b64b9ea René Nussbaumer
    fake_inst = objects.Instance(name="foobar",
138 7b64b9ea René Nussbaumer
                                 os=os,
139 7b64b9ea René Nussbaumer
                                 hypervisor=constants.HT_XEN_PVM,
140 7b64b9ea René Nussbaumer
                                 hvparams={})
141 7b64b9ea René Nussbaumer
    self.assertEqual(self.fake_cl.os_hvp[os][constants.HT_XEN_PVM],
142 7b64b9ea René Nussbaumer
                     self.fake_cl.FillHV(fake_inst))
143 7b64b9ea René Nussbaumer
144 7b64b9ea René Nussbaumer
145 4c14965f Guido Trotter
if __name__ == '__main__':
146 25231ec5 Michael Hanselmann
  testutils.GanetiTestProgram()