Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.masterd.iallocator_unittest.py @ 1a2eb2dc

History | View | Annotate | Download (2.5 kB)

1 33b4fa9f René Nussbaumer
#!/usr/bin/python
2 33b4fa9f René Nussbaumer
#
3 33b4fa9f René Nussbaumer
4 33b4fa9f René Nussbaumer
# Copyright (C) 2012 Google Inc.
5 33b4fa9f René Nussbaumer
#
6 33b4fa9f René Nussbaumer
# This program is free software; you can redistribute it and/or modify
7 33b4fa9f René Nussbaumer
# it under the terms of the GNU General Public License as published by
8 33b4fa9f René Nussbaumer
# the Free Software Foundation; either version 2 of the License, or
9 33b4fa9f René Nussbaumer
# (at your option) any later version.
10 33b4fa9f René Nussbaumer
#
11 33b4fa9f René Nussbaumer
# This program is distributed in the hope that it will be useful, but
12 33b4fa9f René Nussbaumer
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 33b4fa9f René Nussbaumer
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 33b4fa9f René Nussbaumer
# General Public License for more details.
15 33b4fa9f René Nussbaumer
#
16 33b4fa9f René Nussbaumer
# You should have received a copy of the GNU General Public License
17 33b4fa9f René Nussbaumer
# along with this program; if not, write to the Free Software
18 33b4fa9f René Nussbaumer
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 33b4fa9f René Nussbaumer
# 02110-1301, USA.
20 33b4fa9f René Nussbaumer
21 33b4fa9f René Nussbaumer
22 33b4fa9f René Nussbaumer
"""Script for testing ganeti.masterd.iallocator"""
23 33b4fa9f René Nussbaumer
24 33b4fa9f René Nussbaumer
import unittest
25 33b4fa9f René Nussbaumer
26 33b4fa9f René Nussbaumer
from ganeti import compat
27 33b4fa9f René Nussbaumer
from ganeti import constants
28 33b4fa9f René Nussbaumer
from ganeti import errors
29 33b4fa9f René Nussbaumer
from ganeti import ht
30 33b4fa9f René Nussbaumer
from ganeti.masterd import iallocator
31 33b4fa9f René Nussbaumer
32 33b4fa9f René Nussbaumer
import testutils
33 33b4fa9f René Nussbaumer
34 33b4fa9f René Nussbaumer
35 33b4fa9f René Nussbaumer
class _StubIAllocator(object):
36 33b4fa9f René Nussbaumer
  def __init__(self, success):
37 33b4fa9f René Nussbaumer
    self.success = success
38 33b4fa9f René Nussbaumer
39 33b4fa9f René Nussbaumer
40 33b4fa9f René Nussbaumer
class TestIAReqMultiInstanceAlloc(unittest.TestCase):
41 33b4fa9f René Nussbaumer
  def testResult(self):
42 33b4fa9f René Nussbaumer
    good_results = [
43 33b4fa9f René Nussbaumer
      # First result (all instances "allocate")
44 33b4fa9f René Nussbaumer
      [
45 33b4fa9f René Nussbaumer
        [["foo", ["a", "b"]],
46 33b4fa9f René Nussbaumer
         ["bar", ["c"]],
47 33b4fa9f René Nussbaumer
         ["baz", []]],
48 33b4fa9f René Nussbaumer
        []
49 33b4fa9f René Nussbaumer
      ],
50 33b4fa9f René Nussbaumer
      # Second result (partial "allocate", partial "fail")
51 33b4fa9f René Nussbaumer
      [
52 33b4fa9f René Nussbaumer
        [["bar", ["c", "b"]],
53 33b4fa9f René Nussbaumer
         ["baz", ["a"]]],
54 33b4fa9f René Nussbaumer
        ["foo"]
55 33b4fa9f René Nussbaumer
      ],
56 33b4fa9f René Nussbaumer
      # Third result (all instances "fail")
57 33b4fa9f René Nussbaumer
      [
58 33b4fa9f René Nussbaumer
        [],
59 33b4fa9f René Nussbaumer
        ["foo", "bar", "baz"]
60 33b4fa9f René Nussbaumer
      ],
61 33b4fa9f René Nussbaumer
      ]
62 33b4fa9f René Nussbaumer
    bad_results = [
63 33b4fa9f René Nussbaumer
      "foobar",
64 33b4fa9f René Nussbaumer
      1234,
65 33b4fa9f René Nussbaumer
      [],
66 33b4fa9f René Nussbaumer
      [[]],
67 33b4fa9f René Nussbaumer
      [[], [], []],
68 33b4fa9f René Nussbaumer
      ]
69 33b4fa9f René Nussbaumer
70 33b4fa9f René Nussbaumer
    result_fn = iallocator.IAReqMultiInstanceAlloc.REQ_RESULT
71 33b4fa9f René Nussbaumer
72 33b4fa9f René Nussbaumer
    self.assertTrue(compat.all(map(result_fn, good_results)))
73 33b4fa9f René Nussbaumer
    self.assertFalse(compat.any(map(result_fn, bad_results)))
74 33b4fa9f René Nussbaumer
75 33b4fa9f René Nussbaumer
76 33b4fa9f René Nussbaumer
class TestIARequestBase(unittest.TestCase):
77 33b4fa9f René Nussbaumer
  def testValidateResult(self):
78 33b4fa9f René Nussbaumer
    class _StubReqBase(iallocator.IARequestBase):
79 33b4fa9f René Nussbaumer
      MODE = constants.IALLOCATOR_MODE_ALLOC
80 33b4fa9f René Nussbaumer
      REQ_RESULT = ht.TBool
81 33b4fa9f René Nussbaumer
82 33b4fa9f René Nussbaumer
    stub = _StubReqBase()
83 33b4fa9f René Nussbaumer
    stub.ValidateResult(_StubIAllocator(True), True)
84 33b4fa9f René Nussbaumer
    self.assertRaises(errors.ResultValidationError, stub.ValidateResult,
85 33b4fa9f René Nussbaumer
                      _StubIAllocator(True), "foo")
86 33b4fa9f René Nussbaumer
    stub.ValidateResult(_StubIAllocator(False), True)
87 33b4fa9f René Nussbaumer
    # We don't validate the result if the iallocation request was not successful
88 33b4fa9f René Nussbaumer
    stub.ValidateResult(_StubIAllocator(False), "foo")
89 33b4fa9f René Nussbaumer
90 33b4fa9f René Nussbaumer
91 33b4fa9f René Nussbaumer
if __name__ == "__main__":
92 33b4fa9f René Nussbaumer
  testutils.GanetiTestProgram()