Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.jstore_unittest.py @ d01e51a5

History | View | Annotate | Download (3.2 kB)

1 6f1aa78d Michael Hanselmann
#!/usr/bin/python
2 6f1aa78d Michael Hanselmann
#
3 6f1aa78d Michael Hanselmann
4 6f1aa78d Michael Hanselmann
# Copyright (C) 2012 Google Inc.
5 6f1aa78d Michael Hanselmann
#
6 6f1aa78d Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 6f1aa78d Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 6f1aa78d Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 6f1aa78d Michael Hanselmann
# (at your option) any later version.
10 6f1aa78d Michael Hanselmann
#
11 6f1aa78d Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 6f1aa78d Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 6f1aa78d Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 6f1aa78d Michael Hanselmann
# General Public License for more details.
15 6f1aa78d Michael Hanselmann
#
16 6f1aa78d Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 6f1aa78d Michael Hanselmann
# along with this program; if not, write to the Free Software
18 6f1aa78d Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 6f1aa78d Michael Hanselmann
# 02110-1301, USA.
20 6f1aa78d Michael Hanselmann
21 6f1aa78d Michael Hanselmann
22 6f1aa78d Michael Hanselmann
"""Script for testing ganeti.jstore"""
23 6f1aa78d Michael Hanselmann
24 6f1aa78d Michael Hanselmann
import re
25 6f1aa78d Michael Hanselmann
import unittest
26 6f1aa78d Michael Hanselmann
import random
27 6f1aa78d Michael Hanselmann
28 6f1aa78d Michael Hanselmann
from ganeti import constants
29 6f1aa78d Michael Hanselmann
from ganeti import utils
30 6f1aa78d Michael Hanselmann
from ganeti import compat
31 6f1aa78d Michael Hanselmann
from ganeti import errors
32 6f1aa78d Michael Hanselmann
from ganeti import jstore
33 6f1aa78d Michael Hanselmann
34 6f1aa78d Michael Hanselmann
import testutils
35 6f1aa78d Michael Hanselmann
36 6f1aa78d Michael Hanselmann
37 6f1aa78d Michael Hanselmann
class TestFormatJobID(testutils.GanetiTestCase):
38 6f1aa78d Michael Hanselmann
  def test(self):
39 76b62028 Iustin Pop
    self.assertEqual(jstore.FormatJobID(0), 0)
40 76b62028 Iustin Pop
    self.assertEqual(jstore.FormatJobID(30498), 30498)
41 6f1aa78d Michael Hanselmann
    self.assertEqual(jstore.FormatJobID(319472592764518609),
42 76b62028 Iustin Pop
                     319472592764518609)
43 6f1aa78d Michael Hanselmann
44 6f1aa78d Michael Hanselmann
  def testErrors(self):
45 6f1aa78d Michael Hanselmann
    for i in [-1, -2288, -9667, -0.205641, 0.0, 0.1, 13041.4472, "", "Hello",
46 6f1aa78d Michael Hanselmann
              [], [1], {}]:
47 6f1aa78d Michael Hanselmann
      self.assertRaises(errors.ProgrammerError, jstore.FormatJobID, i)
48 6f1aa78d Michael Hanselmann
49 6f1aa78d Michael Hanselmann
50 6f1aa78d Michael Hanselmann
class TestGetArchiveDirectory(testutils.GanetiTestCase):
51 6f1aa78d Michael Hanselmann
  def test(self):
52 6f1aa78d Michael Hanselmann
    tests = [
53 6f1aa78d Michael Hanselmann
      ("0", [0, 1, 3343, 9712, 9999]),
54 6f1aa78d Michael Hanselmann
      ("1", [10000, 13188, 19999]),
55 6f1aa78d Michael Hanselmann
      ("29", [290000, 296041, 298796, 299999]),
56 6f1aa78d Michael Hanselmann
      ("30", [300000, 309384]),
57 6f1aa78d Michael Hanselmann
      ]
58 6f1aa78d Michael Hanselmann
59 6f1aa78d Michael Hanselmann
    for (exp, job_ids) in tests:
60 6f1aa78d Michael Hanselmann
      for job_id in job_ids:
61 6f1aa78d Michael Hanselmann
        fmt_id = jstore.FormatJobID(job_id)
62 6f1aa78d Michael Hanselmann
        self.assertEqual(jstore.GetArchiveDirectory(fmt_id), exp)
63 6f1aa78d Michael Hanselmann
        self.assertEqual(jstore.ParseJobId(fmt_id), job_id)
64 6f1aa78d Michael Hanselmann
65 6f1aa78d Michael Hanselmann
  def testErrors(self):
66 6f1aa78d Michael Hanselmann
    self.assertRaises(errors.ParameterError, jstore.GetArchiveDirectory, None)
67 6f1aa78d Michael Hanselmann
    self.assertRaises(errors.ParameterError, jstore.GetArchiveDirectory, "foo")
68 6f1aa78d Michael Hanselmann
69 6f1aa78d Michael Hanselmann
70 6f1aa78d Michael Hanselmann
class TestParseJobId(testutils.GanetiTestCase):
71 6f1aa78d Michael Hanselmann
  def test(self):
72 6f1aa78d Michael Hanselmann
    self.assertEqual(jstore.ParseJobId(29981), 29981)
73 6f1aa78d Michael Hanselmann
    self.assertEqual(jstore.ParseJobId("12918"), 12918)
74 6f1aa78d Michael Hanselmann
75 6f1aa78d Michael Hanselmann
  def testErrors(self):
76 6f1aa78d Michael Hanselmann
    self.assertRaises(errors.ParameterError, jstore.ParseJobId, "")
77 6f1aa78d Michael Hanselmann
    self.assertRaises(errors.ParameterError, jstore.ParseJobId, "MXXI")
78 6f1aa78d Michael Hanselmann
    self.assertRaises(errors.ParameterError, jstore.ParseJobId, [])
79 6f1aa78d Michael Hanselmann
80 6f1aa78d Michael Hanselmann
81 4fdedd09 Michael Hanselmann
class TestReadNumericFile(testutils.GanetiTestCase):
82 4fdedd09 Michael Hanselmann
  def testNonExistingFile(self):
83 4fdedd09 Michael Hanselmann
    result = jstore._ReadNumericFile("/tmp/this/file/does/not/exist")
84 4fdedd09 Michael Hanselmann
    self.assertTrue(result is None)
85 4fdedd09 Michael Hanselmann
86 4fdedd09 Michael Hanselmann
  def testValidFile(self):
87 4fdedd09 Michael Hanselmann
    tmpfile = self._CreateTempFile()
88 4fdedd09 Michael Hanselmann
89 4fdedd09 Michael Hanselmann
    for (data, exp) in [("123", 123), ("0\n", 0)]:
90 4fdedd09 Michael Hanselmann
      utils.WriteFile(tmpfile, data=data)
91 4fdedd09 Michael Hanselmann
      result = jstore._ReadNumericFile(tmpfile)
92 4fdedd09 Michael Hanselmann
      self.assertEqual(result, exp)
93 4fdedd09 Michael Hanselmann
94 4fdedd09 Michael Hanselmann
  def testInvalidContent(self):
95 4fdedd09 Michael Hanselmann
    tmpfile = self._CreateTempFile()
96 4fdedd09 Michael Hanselmann
    utils.WriteFile(tmpfile, data="{wrong content")
97 4fdedd09 Michael Hanselmann
    self.assertRaises(errors.JobQueueError, jstore._ReadNumericFile, tmpfile)
98 4fdedd09 Michael Hanselmann
99 4fdedd09 Michael Hanselmann
100 6f1aa78d Michael Hanselmann
if __name__ == "__main__":
101 6f1aa78d Michael Hanselmann
  testutils.GanetiTestProgram()