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() |