Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.luxi_unittest.py @ 26d3fd2f

History | View | Annotate | Download (3.7 kB)

1 231db3a5 Michael Hanselmann
#!/usr/bin/python
2 231db3a5 Michael Hanselmann
#
3 231db3a5 Michael Hanselmann
4 231db3a5 Michael Hanselmann
# Copyright (C) 2010 Google Inc.
5 231db3a5 Michael Hanselmann
#
6 231db3a5 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 231db3a5 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 231db3a5 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 231db3a5 Michael Hanselmann
# (at your option) any later version.
10 231db3a5 Michael Hanselmann
#
11 231db3a5 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 231db3a5 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 231db3a5 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 231db3a5 Michael Hanselmann
# General Public License for more details.
15 231db3a5 Michael Hanselmann
#
16 231db3a5 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 231db3a5 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 231db3a5 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 231db3a5 Michael Hanselmann
# 02110-1301, USA.
20 231db3a5 Michael Hanselmann
21 231db3a5 Michael Hanselmann
22 231db3a5 Michael Hanselmann
"""Script for unittesting the luxi module"""
23 231db3a5 Michael Hanselmann
24 231db3a5 Michael Hanselmann
25 231db3a5 Michael Hanselmann
import unittest
26 231db3a5 Michael Hanselmann
27 231db3a5 Michael Hanselmann
from ganeti import luxi
28 231db3a5 Michael Hanselmann
from ganeti import serializer
29 231db3a5 Michael Hanselmann
30 231db3a5 Michael Hanselmann
import testutils
31 231db3a5 Michael Hanselmann
32 231db3a5 Michael Hanselmann
33 231db3a5 Michael Hanselmann
class TestLuxiParsing(testutils.GanetiTestCase):
34 231db3a5 Michael Hanselmann
  def testParseRequest(self):
35 231db3a5 Michael Hanselmann
    msg = serializer.DumpJson({
36 231db3a5 Michael Hanselmann
      luxi.KEY_METHOD: "foo",
37 231db3a5 Michael Hanselmann
      luxi.KEY_ARGS: ("bar", "baz", 123),
38 231db3a5 Michael Hanselmann
      })
39 231db3a5 Michael Hanselmann
40 231db3a5 Michael Hanselmann
    self.assertEqualValues(luxi.ParseRequest(msg),
41 231db3a5 Michael Hanselmann
                           ("foo", ["bar", "baz", 123]))
42 231db3a5 Michael Hanselmann
43 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseRequest,
44 231db3a5 Michael Hanselmann
                      "this\"is {invalid, ]json data")
45 231db3a5 Michael Hanselmann
46 231db3a5 Michael Hanselmann
    # No dict
47 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseRequest,
48 231db3a5 Michael Hanselmann
                      serializer.DumpJson(123))
49 231db3a5 Michael Hanselmann
50 231db3a5 Michael Hanselmann
    # Empty dict
51 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseRequest,
52 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ }))
53 231db3a5 Michael Hanselmann
54 231db3a5 Michael Hanselmann
    # No arguments
55 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseRequest,
56 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ luxi.KEY_METHOD: "foo", }))
57 231db3a5 Michael Hanselmann
58 231db3a5 Michael Hanselmann
    # No method
59 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseRequest,
60 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ luxi.KEY_ARGS: [], }))
61 231db3a5 Michael Hanselmann
62 231db3a5 Michael Hanselmann
  def testParseResponse(self):
63 231db3a5 Michael Hanselmann
    msg = serializer.DumpJson({
64 231db3a5 Michael Hanselmann
      luxi.KEY_SUCCESS: True,
65 231db3a5 Michael Hanselmann
      luxi.KEY_RESULT: None,
66 231db3a5 Michael Hanselmann
      })
67 231db3a5 Michael Hanselmann
68 231db3a5 Michael Hanselmann
    self.assertEqual(luxi.ParseResponse(msg), (True, None))
69 231db3a5 Michael Hanselmann
70 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseResponse,
71 231db3a5 Michael Hanselmann
                      "this\"is {invalid, ]json data")
72 231db3a5 Michael Hanselmann
73 231db3a5 Michael Hanselmann
    # No dict
74 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseResponse,
75 231db3a5 Michael Hanselmann
                      serializer.DumpJson(123))
76 231db3a5 Michael Hanselmann
77 231db3a5 Michael Hanselmann
    # Empty dict
78 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseResponse,
79 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ }))
80 231db3a5 Michael Hanselmann
81 231db3a5 Michael Hanselmann
    # No success
82 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseResponse,
83 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ luxi.KEY_RESULT: True, }))
84 231db3a5 Michael Hanselmann
85 231db3a5 Michael Hanselmann
    # No result
86 231db3a5 Michael Hanselmann
    self.assertRaises(luxi.ProtocolError, luxi.ParseResponse,
87 231db3a5 Michael Hanselmann
                      serializer.DumpJson({ luxi.KEY_SUCCESS: True, }))
88 231db3a5 Michael Hanselmann
89 231db3a5 Michael Hanselmann
  def testFormatResponse(self):
90 231db3a5 Michael Hanselmann
    for success, result in [(False, "error"), (True, "abc"),
91 231db3a5 Michael Hanselmann
                            (True, { "a": 123, "b": None, })]:
92 231db3a5 Michael Hanselmann
      msg = luxi.FormatResponse(success, result)
93 231db3a5 Michael Hanselmann
      msgdata = serializer.LoadJson(msg)
94 231db3a5 Michael Hanselmann
      self.assert_(luxi.KEY_SUCCESS in msgdata)
95 231db3a5 Michael Hanselmann
      self.assert_(luxi.KEY_RESULT in msgdata)
96 231db3a5 Michael Hanselmann
      self.assertEqualValues(msgdata,
97 231db3a5 Michael Hanselmann
                             { luxi.KEY_SUCCESS: success,
98 231db3a5 Michael Hanselmann
                               luxi.KEY_RESULT: result,
99 231db3a5 Michael Hanselmann
                             })
100 231db3a5 Michael Hanselmann
101 231db3a5 Michael Hanselmann
  def testFormatRequest(self):
102 231db3a5 Michael Hanselmann
    for method, args in [("a", []), ("b", [1, 2, 3])]:
103 231db3a5 Michael Hanselmann
      msg = luxi.FormatRequest(method, args)
104 231db3a5 Michael Hanselmann
      msgdata = serializer.LoadJson(msg)
105 231db3a5 Michael Hanselmann
      self.assert_(luxi.KEY_METHOD in msgdata)
106 231db3a5 Michael Hanselmann
      self.assert_(luxi.KEY_ARGS in msgdata)
107 231db3a5 Michael Hanselmann
      self.assertEqualValues(msgdata,
108 231db3a5 Michael Hanselmann
                             { luxi.KEY_METHOD: method,
109 231db3a5 Michael Hanselmann
                               luxi.KEY_ARGS: args,
110 231db3a5 Michael Hanselmann
                             })
111 231db3a5 Michael Hanselmann
112 231db3a5 Michael Hanselmann
113 231db3a5 Michael Hanselmann
if __name__ == "__main__":
114 231db3a5 Michael Hanselmann
  testutils.GanetiTestProgram()