Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.rapi.testutils_unittest.py @ 346c3037

History | View | Annotate | Download (5.3 kB)

1 a85f23fa Michael Hanselmann
#!/usr/bin/python
2 a85f23fa Michael Hanselmann
#
3 a85f23fa Michael Hanselmann
4 a85f23fa Michael Hanselmann
# Copyright (C) 2012 Google Inc.
5 a85f23fa Michael Hanselmann
#
6 a85f23fa Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 a85f23fa Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 a85f23fa Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 a85f23fa Michael Hanselmann
# (at your option) any later version.
10 a85f23fa Michael Hanselmann
#
11 a85f23fa Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 a85f23fa Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 a85f23fa Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 a85f23fa Michael Hanselmann
# General Public License for more details.
15 a85f23fa Michael Hanselmann
#
16 a85f23fa Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 a85f23fa Michael Hanselmann
# along with this program; if not, write to the Free Software
18 a85f23fa Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 a85f23fa Michael Hanselmann
# 02110-1301, USA.
20 a85f23fa Michael Hanselmann
21 a85f23fa Michael Hanselmann
22 a85f23fa Michael Hanselmann
"""Script for testing ganeti.rapi.testutils"""
23 a85f23fa Michael Hanselmann
24 a85f23fa Michael Hanselmann
import unittest
25 a85f23fa Michael Hanselmann
26 a85f23fa Michael Hanselmann
from ganeti import compat
27 a85f23fa Michael Hanselmann
from ganeti import constants
28 a85f23fa Michael Hanselmann
from ganeti import errors
29 a85f23fa Michael Hanselmann
from ganeti import opcodes
30 1afa108c Michael Hanselmann
from ganeti import luxi
31 a85f23fa Michael Hanselmann
from ganeti import rapi
32 1afa108c Michael Hanselmann
from ganeti import utils
33 a85f23fa Michael Hanselmann
34 a85f23fa Michael Hanselmann
import ganeti.rapi.testutils
35 1afa108c Michael Hanselmann
import ganeti.rapi.client
36 a85f23fa Michael Hanselmann
37 a85f23fa Michael Hanselmann
import testutils
38 a85f23fa Michael Hanselmann
39 a85f23fa Michael Hanselmann
40 b8028dcf Michael Hanselmann
KNOWN_UNUSED_LUXI = compat.UniqueFrozenset([
41 1afa108c Michael Hanselmann
  luxi.REQ_SUBMIT_MANY_JOBS,
42 346c3037 Klaus Aehlig
  luxi.REQ_SUBMIT_JOB_TO_DRAINED_QUEUE,
43 1afa108c Michael Hanselmann
  luxi.REQ_ARCHIVE_JOB,
44 83c046a2 Iustin Pop
  luxi.REQ_AUTO_ARCHIVE_JOBS,
45 f63ffb37 Michael Hanselmann
  luxi.REQ_CHANGE_JOB_PRIORITY,
46 1afa108c Michael Hanselmann
  luxi.REQ_QUERY_EXPORTS,
47 1afa108c Michael Hanselmann
  luxi.REQ_QUERY_CONFIG_VALUES,
48 238cfd3a Klaus Aehlig
  luxi.REQ_QUERY_NETWORKS,
49 1afa108c Michael Hanselmann
  luxi.REQ_QUERY_TAGS,
50 83c046a2 Iustin Pop
  luxi.REQ_SET_DRAIN_FLAG,
51 1afa108c Michael Hanselmann
  luxi.REQ_SET_WATCHER_PAUSE,
52 1afa108c Michael Hanselmann
  ])
53 1afa108c Michael Hanselmann
54 1afa108c Michael Hanselmann
55 1afa108c Michael Hanselmann
# Global variable for storing used LUXI calls
56 1afa108c Michael Hanselmann
_used_luxi_calls = None
57 1afa108c Michael Hanselmann
58 1afa108c Michael Hanselmann
59 a85f23fa Michael Hanselmann
class TestHideInternalErrors(unittest.TestCase):
60 a85f23fa Michael Hanselmann
  def test(self):
61 a85f23fa Michael Hanselmann
    def inner():
62 a85f23fa Michael Hanselmann
      raise errors.GenericError("error")
63 a85f23fa Michael Hanselmann
64 a85f23fa Michael Hanselmann
    fn = rapi.testutils._HideInternalErrors(inner)
65 a85f23fa Michael Hanselmann
66 a85f23fa Michael Hanselmann
    self.assertRaises(rapi.testutils.VerificationError, fn)
67 a85f23fa Michael Hanselmann
68 a85f23fa Michael Hanselmann
69 a85f23fa Michael Hanselmann
class TestVerifyOpInput(unittest.TestCase):
70 a85f23fa Michael Hanselmann
  def testUnknownOpId(self):
71 a85f23fa Michael Hanselmann
    voi = rapi.testutils.VerifyOpInput
72 a85f23fa Michael Hanselmann
73 a85f23fa Michael Hanselmann
    self.assertRaises(rapi.testutils.VerificationError, voi, "UNK_OP_ID", None)
74 a85f23fa Michael Hanselmann
75 a85f23fa Michael Hanselmann
  def testUnknownParameter(self):
76 a85f23fa Michael Hanselmann
    voi = rapi.testutils.VerifyOpInput
77 a85f23fa Michael Hanselmann
78 a85f23fa Michael Hanselmann
    self.assertRaises(rapi.testutils.VerificationError, voi,
79 a85f23fa Michael Hanselmann
      opcodes.OpClusterRename.OP_ID, {
80 a85f23fa Michael Hanselmann
      "unk": "unk",
81 a85f23fa Michael Hanselmann
      })
82 a85f23fa Michael Hanselmann
83 a85f23fa Michael Hanselmann
  def testWrongParameterValue(self):
84 a85f23fa Michael Hanselmann
    voi = rapi.testutils.VerifyOpInput
85 a85f23fa Michael Hanselmann
    self.assertRaises(rapi.testutils.VerificationError, voi,
86 a85f23fa Michael Hanselmann
      opcodes.OpClusterRename.OP_ID, {
87 a85f23fa Michael Hanselmann
      "name": object(),
88 a85f23fa Michael Hanselmann
      })
89 a85f23fa Michael Hanselmann
90 a85f23fa Michael Hanselmann
  def testSuccess(self):
91 a85f23fa Michael Hanselmann
    voi = rapi.testutils.VerifyOpInput
92 a85f23fa Michael Hanselmann
    voi(opcodes.OpClusterRename.OP_ID, {
93 a85f23fa Michael Hanselmann
      "name": "new-name.example.com",
94 a85f23fa Michael Hanselmann
      })
95 a85f23fa Michael Hanselmann
96 a85f23fa Michael Hanselmann
97 a85f23fa Michael Hanselmann
class TestVerifyOpResult(unittest.TestCase):
98 a85f23fa Michael Hanselmann
  def testSuccess(self):
99 a85f23fa Michael Hanselmann
    vor = rapi.testutils.VerifyOpResult
100 a85f23fa Michael Hanselmann
101 a85f23fa Michael Hanselmann
    vor(opcodes.OpClusterVerify.OP_ID, {
102 a85f23fa Michael Hanselmann
      constants.JOB_IDS_KEY: [
103 a85f23fa Michael Hanselmann
        (False, "error message"),
104 a85f23fa Michael Hanselmann
        ],
105 a85f23fa Michael Hanselmann
      })
106 a85f23fa Michael Hanselmann
107 a85f23fa Michael Hanselmann
  def testWrongResult(self):
108 a85f23fa Michael Hanselmann
    vor = rapi.testutils.VerifyOpResult
109 a85f23fa Michael Hanselmann
110 a85f23fa Michael Hanselmann
    self.assertRaises(rapi.testutils.VerificationError, vor,
111 a85f23fa Michael Hanselmann
      opcodes.OpClusterVerify.OP_ID, [])
112 a85f23fa Michael Hanselmann
113 a85f23fa Michael Hanselmann
  def testNoResultCheck(self):
114 a85f23fa Michael Hanselmann
    vor = rapi.testutils.VerifyOpResult
115 a85f23fa Michael Hanselmann
116 a85f23fa Michael Hanselmann
    vor(opcodes.OpTestDummy.OP_ID, None)
117 a85f23fa Michael Hanselmann
118 a85f23fa Michael Hanselmann
119 1afa108c Michael Hanselmann
class TestInputTestClient(unittest.TestCase):
120 1afa108c Michael Hanselmann
  def setUp(self):
121 1afa108c Michael Hanselmann
    self.cl = rapi.testutils.InputTestClient()
122 1afa108c Michael Hanselmann
123 1afa108c Michael Hanselmann
  def tearDown(self):
124 1afa108c Michael Hanselmann
    _used_luxi_calls.update(self.cl._GetLuxiCalls())
125 1afa108c Michael Hanselmann
126 1afa108c Michael Hanselmann
  def testGetInfo(self):
127 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.GetInfo() is NotImplemented)
128 1afa108c Michael Hanselmann
129 1afa108c Michael Hanselmann
  def testPrepareExport(self):
130 1afa108c Michael Hanselmann
    result = self.cl.PrepareExport("inst1.example.com",
131 1afa108c Michael Hanselmann
                                   constants.EXPORT_MODE_LOCAL)
132 1afa108c Michael Hanselmann
    self.assertTrue(result is NotImplemented)
133 59e67682 Iustin Pop
    self.assertRaises(rapi.testutils.VerificationError, self.cl.PrepareExport,
134 1afa108c Michael Hanselmann
                      "inst1.example.com", "###invalid###")
135 1afa108c Michael Hanselmann
136 1afa108c Michael Hanselmann
  def testGetJobs(self):
137 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.GetJobs() is NotImplemented)
138 1afa108c Michael Hanselmann
139 1afa108c Michael Hanselmann
  def testQuery(self):
140 1afa108c Michael Hanselmann
    result = self.cl.Query(constants.QR_NODE, ["name"])
141 1afa108c Michael Hanselmann
    self.assertTrue(result is NotImplemented)
142 1afa108c Michael Hanselmann
143 1afa108c Michael Hanselmann
  def testQueryFields(self):
144 1afa108c Michael Hanselmann
    result = self.cl.QueryFields(constants.QR_INSTANCE)
145 1afa108c Michael Hanselmann
    self.assertTrue(result is NotImplemented)
146 1afa108c Michael Hanselmann
147 1afa108c Michael Hanselmann
  def testCancelJob(self):
148 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.CancelJob("1") is NotImplemented)
149 1afa108c Michael Hanselmann
150 1afa108c Michael Hanselmann
  def testGetNodes(self):
151 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.GetNodes() is NotImplemented)
152 1afa108c Michael Hanselmann
153 1afa108c Michael Hanselmann
  def testGetInstances(self):
154 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.GetInstances() is NotImplemented)
155 1afa108c Michael Hanselmann
156 1afa108c Michael Hanselmann
  def testGetGroups(self):
157 1afa108c Michael Hanselmann
    self.assertTrue(self.cl.GetGroups() is NotImplemented)
158 1afa108c Michael Hanselmann
159 1afa108c Michael Hanselmann
  def testWaitForJobChange(self):
160 1afa108c Michael Hanselmann
    result = self.cl.WaitForJobChange("1", ["id"], None, None)
161 1afa108c Michael Hanselmann
    self.assertTrue(result is NotImplemented)
162 1afa108c Michael Hanselmann
163 1afa108c Michael Hanselmann
164 1afa108c Michael Hanselmann
class CustomTestRunner(unittest.TextTestRunner):
165 1afa108c Michael Hanselmann
  def run(self, *args):
166 1afa108c Michael Hanselmann
    global _used_luxi_calls
167 1afa108c Michael Hanselmann
    assert _used_luxi_calls is None
168 1afa108c Michael Hanselmann
169 1afa108c Michael Hanselmann
    diff = (KNOWN_UNUSED_LUXI - luxi.REQ_ALL)
170 1afa108c Michael Hanselmann
    assert not diff, "Non-existing LUXI calls listed as unused: %s" % diff
171 1afa108c Michael Hanselmann
172 1afa108c Michael Hanselmann
    _used_luxi_calls = set()
173 1afa108c Michael Hanselmann
    try:
174 1afa108c Michael Hanselmann
      # Run actual tests
175 1afa108c Michael Hanselmann
      result = unittest.TextTestRunner.run(self, *args)
176 1afa108c Michael Hanselmann
177 1afa108c Michael Hanselmann
      diff = _used_luxi_calls & KNOWN_UNUSED_LUXI
178 1afa108c Michael Hanselmann
      if diff:
179 1afa108c Michael Hanselmann
        raise AssertionError("LUXI methods marked as unused were called: %s" %
180 1afa108c Michael Hanselmann
                             utils.CommaJoin(diff))
181 1afa108c Michael Hanselmann
182 1afa108c Michael Hanselmann
      diff = (luxi.REQ_ALL - KNOWN_UNUSED_LUXI - _used_luxi_calls)
183 1afa108c Michael Hanselmann
      if diff:
184 1afa108c Michael Hanselmann
        raise AssertionError("The following LUXI methods were not used: %s" %
185 1afa108c Michael Hanselmann
                             utils.CommaJoin(diff))
186 1afa108c Michael Hanselmann
    finally:
187 1afa108c Michael Hanselmann
      # Reset global variable
188 1afa108c Michael Hanselmann
      _used_luxi_calls = None
189 1afa108c Michael Hanselmann
190 1afa108c Michael Hanselmann
    return result
191 1afa108c Michael Hanselmann
192 1afa108c Michael Hanselmann
193 a85f23fa Michael Hanselmann
if __name__ == "__main__":
194 1afa108c Michael Hanselmann
  testutils.GanetiTestProgram(testRunner=CustomTestRunner)