Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.rapi.baserlib_unittest.py @ 9a3cc7ae

History | View | Annotate | Download (2.7 kB)

1 cfaeaaf7 Michael Hanselmann
#!/usr/bin/python
2 cfaeaaf7 Michael Hanselmann
#
3 cfaeaaf7 Michael Hanselmann
4 cfaeaaf7 Michael Hanselmann
# Copyright (C) 2011 Google Inc.
5 cfaeaaf7 Michael Hanselmann
#
6 cfaeaaf7 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 cfaeaaf7 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 cfaeaaf7 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 cfaeaaf7 Michael Hanselmann
# (at your option) any later version.
10 cfaeaaf7 Michael Hanselmann
#
11 cfaeaaf7 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 cfaeaaf7 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 cfaeaaf7 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 cfaeaaf7 Michael Hanselmann
# General Public License for more details.
15 cfaeaaf7 Michael Hanselmann
#
16 cfaeaaf7 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 cfaeaaf7 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 cfaeaaf7 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 cfaeaaf7 Michael Hanselmann
# 02110-1301, USA.
20 cfaeaaf7 Michael Hanselmann
21 cfaeaaf7 Michael Hanselmann
22 cfaeaaf7 Michael Hanselmann
"""Script for testing ganeti.rapi.baserlib"""
23 cfaeaaf7 Michael Hanselmann
24 cfaeaaf7 Michael Hanselmann
import unittest
25 cfaeaaf7 Michael Hanselmann
26 cfaeaaf7 Michael Hanselmann
from ganeti import errors
27 cfaeaaf7 Michael Hanselmann
from ganeti import opcodes
28 cfaeaaf7 Michael Hanselmann
from ganeti import ht
29 cfaeaaf7 Michael Hanselmann
from ganeti import http
30 cfaeaaf7 Michael Hanselmann
from ganeti.rapi import baserlib
31 cfaeaaf7 Michael Hanselmann
32 cfaeaaf7 Michael Hanselmann
import testutils
33 cfaeaaf7 Michael Hanselmann
34 cfaeaaf7 Michael Hanselmann
35 cfaeaaf7 Michael Hanselmann
class TestFillOpcode(unittest.TestCase):
36 cfaeaaf7 Michael Hanselmann
  class _TestOp(opcodes.OpCode):
37 cfaeaaf7 Michael Hanselmann
    OP_ID = "RAPI_TEST_OP"
38 cfaeaaf7 Michael Hanselmann
    OP_PARAMS = [
39 cfaeaaf7 Michael Hanselmann
      ("test", None, ht.TMaybeString),
40 cfaeaaf7 Michael Hanselmann
      ]
41 cfaeaaf7 Michael Hanselmann
42 cfaeaaf7 Michael Hanselmann
  def test(self):
43 cfaeaaf7 Michael Hanselmann
    for static in [None, {}]:
44 cfaeaaf7 Michael Hanselmann
      op = baserlib.FillOpcode(self._TestOp, {}, static)
45 cfaeaaf7 Michael Hanselmann
      self.assertTrue(isinstance(op, self._TestOp))
46 cfaeaaf7 Michael Hanselmann
      self.assertFalse(hasattr(op, "test"))
47 cfaeaaf7 Michael Hanselmann
48 cfaeaaf7 Michael Hanselmann
  def testStatic(self):
49 cfaeaaf7 Michael Hanselmann
    op = baserlib.FillOpcode(self._TestOp, {}, {"test": "abc"})
50 cfaeaaf7 Michael Hanselmann
    self.assertTrue(isinstance(op, self._TestOp))
51 cfaeaaf7 Michael Hanselmann
    self.assertEqual(op.test, "abc")
52 cfaeaaf7 Michael Hanselmann
53 cfaeaaf7 Michael Hanselmann
    # Overwrite static parameter
54 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
55 cfaeaaf7 Michael Hanselmann
                      self._TestOp, {"test": 123}, {"test": "abc"})
56 cfaeaaf7 Michael Hanselmann
57 cfaeaaf7 Michael Hanselmann
  def testType(self):
58 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
59 cfaeaaf7 Michael Hanselmann
                      self._TestOp, {"test": [1, 2, 3]}, {})
60 cfaeaaf7 Michael Hanselmann
61 cfaeaaf7 Michael Hanselmann
  def testStaticType(self):
62 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
63 cfaeaaf7 Michael Hanselmann
                      self._TestOp, {}, {"test": [1, 2, 3]})
64 cfaeaaf7 Michael Hanselmann
65 cfaeaaf7 Michael Hanselmann
  def testUnicode(self):
66 cfaeaaf7 Michael Hanselmann
    op = baserlib.FillOpcode(self._TestOp, {u"test": "abc"}, {})
67 cfaeaaf7 Michael Hanselmann
    self.assertTrue(isinstance(op, self._TestOp))
68 cfaeaaf7 Michael Hanselmann
    self.assertEqual(op.test, "abc")
69 cfaeaaf7 Michael Hanselmann
70 cfaeaaf7 Michael Hanselmann
    op = baserlib.FillOpcode(self._TestOp, {}, {u"test": "abc"})
71 cfaeaaf7 Michael Hanselmann
    self.assertTrue(isinstance(op, self._TestOp))
72 cfaeaaf7 Michael Hanselmann
    self.assertEqual(op.test, "abc")
73 cfaeaaf7 Michael Hanselmann
74 cfaeaaf7 Michael Hanselmann
  def testUnknownParameter(self):
75 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
76 cfaeaaf7 Michael Hanselmann
                      self._TestOp, {"othervalue": 123}, None)
77 cfaeaaf7 Michael Hanselmann
78 cfaeaaf7 Michael Hanselmann
  def testInvalidBody(self):
79 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
80 cfaeaaf7 Michael Hanselmann
                      self._TestOp, "", None)
81 cfaeaaf7 Michael Hanselmann
    self.assertRaises(http.HttpBadRequest, baserlib.FillOpcode,
82 cfaeaaf7 Michael Hanselmann
                      self._TestOp, range(10), None)
83 cfaeaaf7 Michael Hanselmann
84 cfaeaaf7 Michael Hanselmann
85 cfaeaaf7 Michael Hanselmann
if __name__ == "__main__":
86 cfaeaaf7 Michael Hanselmann
  testutils.GanetiTestProgram()