Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.qlang_unittest.py @ 8572f1fe

History | View | Annotate | Download (2.6 kB)

1 a123dc19 Michael Hanselmann
#!/usr/bin/python
2 a123dc19 Michael Hanselmann
#
3 a123dc19 Michael Hanselmann
4 a123dc19 Michael Hanselmann
# Copyright (C) 2010 Google Inc.
5 a123dc19 Michael Hanselmann
#
6 a123dc19 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 a123dc19 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 a123dc19 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 a123dc19 Michael Hanselmann
# (at your option) any later version.
10 a123dc19 Michael Hanselmann
#
11 a123dc19 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 a123dc19 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 a123dc19 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 a123dc19 Michael Hanselmann
# General Public License for more details.
15 a123dc19 Michael Hanselmann
#
16 a123dc19 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 a123dc19 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 a123dc19 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 a123dc19 Michael Hanselmann
# 02110-1301, USA.
20 a123dc19 Michael Hanselmann
21 a123dc19 Michael Hanselmann
22 a123dc19 Michael Hanselmann
"""Script for testing ganeti.qlang"""
23 a123dc19 Michael Hanselmann
24 a123dc19 Michael Hanselmann
import unittest
25 a123dc19 Michael Hanselmann
26 a123dc19 Michael Hanselmann
from ganeti import utils
27 a123dc19 Michael Hanselmann
from ganeti import errors
28 a123dc19 Michael Hanselmann
from ganeti import qlang
29 a123dc19 Michael Hanselmann
30 a123dc19 Michael Hanselmann
import testutils
31 a123dc19 Michael Hanselmann
32 a123dc19 Michael Hanselmann
33 a123dc19 Michael Hanselmann
class TestReadSimpleFilter(unittest.TestCase):
34 a123dc19 Michael Hanselmann
  def _Test(self, filter_, expected):
35 a123dc19 Michael Hanselmann
    self.assertEqual(qlang.ReadSimpleFilter("name", filter_), expected)
36 a123dc19 Michael Hanselmann
37 a123dc19 Michael Hanselmann
  def test(self):
38 a123dc19 Michael Hanselmann
    self._Test(None, [])
39 a123dc19 Michael Hanselmann
    self._Test(["|", ["=", "name", "xyz"]], ["xyz"])
40 a123dc19 Michael Hanselmann
41 a123dc19 Michael Hanselmann
    for i in [1, 3, 10, 25, 140]:
42 a123dc19 Michael Hanselmann
      self._Test(["|"] + [["=", "name", "node%s" % j] for j in range(i)],
43 a123dc19 Michael Hanselmann
                 ["node%s" % j for j in range(i)])
44 a123dc19 Michael Hanselmann
45 a123dc19 Michael Hanselmann
  def testErrors(self):
46 a123dc19 Michael Hanselmann
    for i in [123, True, False, "", "Hello World", "a==b",
47 a123dc19 Michael Hanselmann
              [], ["x"], ["x", "y", "z"], ["|"],
48 a123dc19 Michael Hanselmann
              ["|", ["="]], ["|", "x"], ["|", 123],
49 a123dc19 Michael Hanselmann
              ["|", ["=", "otherfield", "xyz"]],
50 a123dc19 Michael Hanselmann
              ["|", ["=", "name", "xyz"], "abc"],
51 a123dc19 Michael Hanselmann
              ["|", ["=", "name", "xyz", "too", "long"]],
52 a123dc19 Michael Hanselmann
              ["|", ["=", "name", []]],
53 a123dc19 Michael Hanselmann
              ["|", ["=", "name", 999]],
54 a123dc19 Michael Hanselmann
              ["|", ["=", "name", "abc"], ["=", "otherfield", "xyz"]]]:
55 a123dc19 Michael Hanselmann
      self.assertRaises(errors.ParameterError, qlang.ReadSimpleFilter,
56 a123dc19 Michael Hanselmann
                        "name", i)
57 a123dc19 Michael Hanselmann
58 a123dc19 Michael Hanselmann
59 60cba7f8 Michael Hanselmann
class TestMakeSimpleFilter(unittest.TestCase):
60 60cba7f8 Michael Hanselmann
  def _Test(self, field, names, expected, parse_exp=None):
61 60cba7f8 Michael Hanselmann
    if parse_exp is None:
62 60cba7f8 Michael Hanselmann
      parse_exp = names
63 60cba7f8 Michael Hanselmann
64 60cba7f8 Michael Hanselmann
    filter_ = qlang.MakeSimpleFilter(field, names)
65 60cba7f8 Michael Hanselmann
    self.assertEqual(filter_, expected)
66 60cba7f8 Michael Hanselmann
    self.assertEqual(qlang.ReadSimpleFilter(field, filter_), parse_exp)
67 60cba7f8 Michael Hanselmann
68 60cba7f8 Michael Hanselmann
  def test(self):
69 60cba7f8 Michael Hanselmann
    self._Test("name", None, None, parse_exp=[])
70 60cba7f8 Michael Hanselmann
    self._Test("name", [], None)
71 60cba7f8 Michael Hanselmann
    self._Test("name", ["node1.example.com"],
72 60cba7f8 Michael Hanselmann
               ["|", ["=", "name", "node1.example.com"]])
73 60cba7f8 Michael Hanselmann
    self._Test("xyz", ["a", "b", "c"],
74 60cba7f8 Michael Hanselmann
               ["|", ["=", "xyz", "a"], ["=", "xyz", "b"], ["=", "xyz", "c"]])
75 60cba7f8 Michael Hanselmann
76 60cba7f8 Michael Hanselmann
77 a123dc19 Michael Hanselmann
if __name__ == "__main__":
78 a123dc19 Michael Hanselmann
  testutils.GanetiTestProgram()