Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.tools.ensure_dirs_unittest.py @ cd3b4ff4

History | View | Annotate | Download (2.6 kB)

1 0d2bf835 René Nussbaumer
#!/usr/bin/python
2 0d2bf835 René Nussbaumer
#
3 0d2bf835 René Nussbaumer
4 0d2bf835 René Nussbaumer
# Copyright (C) 2011 Google Inc.
5 0d2bf835 René Nussbaumer
#
6 0d2bf835 René Nussbaumer
# This program is free software; you can redistribute it and/or modify
7 0d2bf835 René Nussbaumer
# it under the terms of the GNU General Public License as published by
8 0d2bf835 René Nussbaumer
# the Free Software Foundation; either version 2 of the License, or
9 0d2bf835 René Nussbaumer
# (at your option) any later version.
10 0d2bf835 René Nussbaumer
#
11 0d2bf835 René Nussbaumer
# This program is distributed in the hope that it will be useful, but
12 0d2bf835 René Nussbaumer
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 0d2bf835 René Nussbaumer
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 0d2bf835 René Nussbaumer
# General Public License for more details.
15 0d2bf835 René Nussbaumer
#
16 0d2bf835 René Nussbaumer
# You should have received a copy of the GNU General Public License
17 0d2bf835 René Nussbaumer
# along with this program; if not, write to the Free Software
18 0d2bf835 René Nussbaumer
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 0d2bf835 René Nussbaumer
# 02110-1301, USA.
20 0d2bf835 René Nussbaumer
21 0d2bf835 René Nussbaumer
22 0d2bf835 René Nussbaumer
"""Script for testing ganeti.tools.ensure_dirs"""
23 0d2bf835 René Nussbaumer
24 0d2bf835 René Nussbaumer
import unittest
25 0d2bf835 René Nussbaumer
import os.path
26 0d2bf835 René Nussbaumer
27 e37f47d3 Michael Hanselmann
from ganeti import utils
28 0d2bf835 René Nussbaumer
from ganeti.tools import ensure_dirs
29 0d2bf835 René Nussbaumer
30 0d2bf835 René Nussbaumer
import testutils
31 0d2bf835 René Nussbaumer
32 0d2bf835 René Nussbaumer
33 e37f47d3 Michael Hanselmann
class TestGetPaths(unittest.TestCase):
34 e37f47d3 Michael Hanselmann
  def testEntryOrder(self):
35 0d2bf835 René Nussbaumer
    paths = [(path[0], path[1]) for path in ensure_dirs.GetPaths()]
36 0d2bf835 René Nussbaumer
37 e37f47d3 Michael Hanselmann
    # Directories for which permissions have been set
38 e37f47d3 Michael Hanselmann
    seen = set()
39 e37f47d3 Michael Hanselmann
40 e37f47d3 Michael Hanselmann
    # Current directory (changes when an entry of type C{DIR} or C{QUEUE_DIR}
41 e37f47d3 Michael Hanselmann
    # is encountered)
42 e37f47d3 Michael Hanselmann
    current_dir = None
43 e37f47d3 Michael Hanselmann
44 e37f47d3 Michael Hanselmann
    for (path, pathtype) in paths:
45 0d2bf835 René Nussbaumer
      self.assertTrue(pathtype in ensure_dirs.ALL_TYPES)
46 e37f47d3 Michael Hanselmann
      self.assertTrue(utils.IsNormAbsPath(path),
47 e37f47d3 Michael Hanselmann
                      msg=("Path '%s' is not absolute and/or normalized" %
48 e37f47d3 Michael Hanselmann
                           path))
49 e37f47d3 Michael Hanselmann
50 0d2bf835 René Nussbaumer
      dirname = os.path.dirname(path)
51 e37f47d3 Michael Hanselmann
52 e37f47d3 Michael Hanselmann
      if pathtype == ensure_dirs.DIR:
53 e37f47d3 Michael Hanselmann
        self.assertFalse(path in seen,
54 e37f47d3 Michael Hanselmann
                         msg=("Directory '%s' was seen before" % path))
55 e37f47d3 Michael Hanselmann
        current_dir = path
56 e37f47d3 Michael Hanselmann
        seen.add(path)
57 e37f47d3 Michael Hanselmann
58 e37f47d3 Michael Hanselmann
      elif pathtype == ensure_dirs.QUEUE_DIR:
59 e37f47d3 Michael Hanselmann
        self.assertTrue(dirname in seen,
60 e37f47d3 Michael Hanselmann
                        msg=("Queue directory '%s' was not seen before" %
61 e37f47d3 Michael Hanselmann
                             path))
62 e37f47d3 Michael Hanselmann
        current_dir = path
63 e37f47d3 Michael Hanselmann
64 e37f47d3 Michael Hanselmann
      elif pathtype == ensure_dirs.FILE:
65 e37f47d3 Michael Hanselmann
        self.assertFalse(current_dir is None)
66 e37f47d3 Michael Hanselmann
        self.assertTrue(dirname in seen,
67 e37f47d3 Michael Hanselmann
                        msg=("Directory '%s' of path '%s' has not been seen"
68 e37f47d3 Michael Hanselmann
                             " yet" % (dirname, path)))
69 e37f47d3 Michael Hanselmann
        self.assertTrue((utils.IsBelowDir(current_dir, path) and
70 e37f47d3 Michael Hanselmann
                         current_dir == dirname),
71 e37f47d3 Michael Hanselmann
                        msg=("File '%s' not below current directory '%s'" %
72 e37f47d3 Michael Hanselmann
                             (path, current_dir)))
73 e37f47d3 Michael Hanselmann
74 e37f47d3 Michael Hanselmann
      else:
75 e37f47d3 Michael Hanselmann
        self.fail("Unknown path type '%s'" % (pathtype, ))
76 0d2bf835 René Nussbaumer
77 0d2bf835 René Nussbaumer
78 0d2bf835 René Nussbaumer
if __name__ == "__main__":
79 0d2bf835 René Nussbaumer
  testutils.GanetiTestProgram()