Try to fix locking unittests
[ganeti-local] / test / ganeti.serializer_unittest.py
1 #!/usr/bin/python
2 #
3
4 # Copyright (C) 2006, 2007, 2008 Google Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 # 0.0510-1301, USA.
20
21
22 """Script for unittesting the serializer module"""
23
24
25 import unittest
26
27 from ganeti import serializer
28 from ganeti import errors
29
30
31 class SimplejsonMock(object):
32   def dumps(self, data, indent=None):
33     return repr(data)
34
35   def loads(self, data):
36     return eval(data)
37
38
39 class TestSerializer(unittest.TestCase):
40   """Serializer tests"""
41
42   _TESTDATA = [
43     "test",
44     255,
45     [1, 2, 3],
46     (1, 2, 3),
47     { 1: 2, "foo": "bar", },
48     ]
49
50   def setUp(self):
51     self._orig_simplejson = serializer.simplejson
52     serializer.simplejson = SimplejsonMock()
53
54   def tearDown(self):
55     serializer.simplejson = self._orig_simplejson
56
57   def testGeneric(self):
58     return self._TestSerializer(serializer.Dump, serializer.Load)
59
60   def testJson(self):
61     return self._TestSerializer(serializer.DumpJson, serializer.LoadJson)
62
63   def testSignedMessage(self):
64     LoadSigned = serializer.LoadSigned
65     DumpSigned = serializer.DumpSigned
66
67     for data in self._TESTDATA:
68       self.assertEqual(LoadSigned(DumpSigned(data, "mykey"), "mykey"),
69                        (data, ''))
70       self.assertEqual(LoadSigned(
71                          DumpSigned(data, "myprivatekey", "mysalt"),
72                          "myprivatekey"), (data, "mysalt"))
73     self.assertRaises(errors.SignatureError, serializer.LoadSigned,
74                       serializer.DumpSigned("test", "myprivatekey"),
75                       "myotherkey")
76
77   def _TestSerializer(self, dump_fn, load_fn):
78     for data in self._TESTDATA:
79       self.failUnless(dump_fn(data).endswith("\n"))
80       self.failUnlessEqual(load_fn(dump_fn(data)), data)
81
82
83 if __name__ == '__main__':
84   unittest.main()