Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.vcluster_unittest.py @ 1a2eb2dc

History | View | Annotate | Download (8.7 kB)

1 05e733b4 Michael Hanselmann
#!/usr/bin/python
2 05e733b4 Michael Hanselmann
#
3 05e733b4 Michael Hanselmann
4 05e733b4 Michael Hanselmann
# Copyright (C) 2012 Google Inc.
5 05e733b4 Michael Hanselmann
#
6 05e733b4 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 05e733b4 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 05e733b4 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 05e733b4 Michael Hanselmann
# (at your option) any later version.
10 05e733b4 Michael Hanselmann
#
11 05e733b4 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 05e733b4 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 05e733b4 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 05e733b4 Michael Hanselmann
# General Public License for more details.
15 05e733b4 Michael Hanselmann
#
16 05e733b4 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 05e733b4 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 05e733b4 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 05e733b4 Michael Hanselmann
# 02110-1301, USA.
20 05e733b4 Michael Hanselmann
21 05e733b4 Michael Hanselmann
22 05e733b4 Michael Hanselmann
"""Script for testing ganeti.vcluster"""
23 05e733b4 Michael Hanselmann
24 05e733b4 Michael Hanselmann
import os
25 05e733b4 Michael Hanselmann
import unittest
26 05e733b4 Michael Hanselmann
27 05e733b4 Michael Hanselmann
from ganeti import utils
28 05e733b4 Michael Hanselmann
from ganeti import compat
29 05e733b4 Michael Hanselmann
from ganeti import vcluster
30 fe4f6dca Michael Hanselmann
from ganeti import pathutils
31 05e733b4 Michael Hanselmann
32 05e733b4 Michael Hanselmann
import testutils
33 05e733b4 Michael Hanselmann
34 05e733b4 Michael Hanselmann
35 05e733b4 Michael Hanselmann
_ENV_DOES_NOT_EXIST = "GANETI_TEST_DOES_NOT_EXIST"
36 05e733b4 Michael Hanselmann
_ENV_TEST = "GANETI_TESTVAR"
37 05e733b4 Michael Hanselmann
38 05e733b4 Michael Hanselmann
39 05e733b4 Michael Hanselmann
class _EnvVarTest(testutils.GanetiTestCase):
40 05e733b4 Michael Hanselmann
  def setUp(self):
41 05e733b4 Michael Hanselmann
    testutils.GanetiTestCase.setUp(self)
42 05e733b4 Michael Hanselmann
43 05e733b4 Michael Hanselmann
    os.environ.pop(_ENV_DOES_NOT_EXIST, None)
44 05e733b4 Michael Hanselmann
    os.environ.pop(_ENV_TEST, None)
45 05e733b4 Michael Hanselmann
46 05e733b4 Michael Hanselmann
47 05e733b4 Michael Hanselmann
class TestGetRootDirectory(_EnvVarTest):
48 05e733b4 Michael Hanselmann
  def test(self):
49 05e733b4 Michael Hanselmann
    assert os.getenv(_ENV_TEST) is None
50 05e733b4 Michael Hanselmann
51 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetRootDirectory(_ENV_DOES_NOT_EXIST), "")
52 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetRootDirectory(_ENV_TEST), "")
53 05e733b4 Michael Hanselmann
54 05e733b4 Michael Hanselmann
    # Absolute path
55 05e733b4 Michael Hanselmann
    os.environ[_ENV_TEST] = "/tmp/xy11"
56 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetRootDirectory(_ENV_TEST), "/tmp/xy11")
57 05e733b4 Michael Hanselmann
58 05e733b4 Michael Hanselmann
    # Relative path
59 05e733b4 Michael Hanselmann
    os.environ[_ENV_TEST] = "foobar"
60 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._GetRootDirectory, _ENV_TEST)
61 05e733b4 Michael Hanselmann
62 05e733b4 Michael Hanselmann
63 05e733b4 Michael Hanselmann
64 05e733b4 Michael Hanselmann
class TestGetHostname(_EnvVarTest):
65 05e733b4 Michael Hanselmann
  def test(self):
66 05e733b4 Michael Hanselmann
    assert os.getenv(_ENV_TEST) is None
67 05e733b4 Michael Hanselmann
68 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetRootDirectory(_ENV_DOES_NOT_EXIST), "")
69 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetRootDirectory(_ENV_TEST), "")
70 05e733b4 Michael Hanselmann
71 05e733b4 Michael Hanselmann
    os.environ[_ENV_TEST] = "some.host.example.com"
72 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._GetHostname(_ENV_TEST), "some.host.example.com")
73 05e733b4 Michael Hanselmann
74 05e733b4 Michael Hanselmann
75 05e733b4 Michael Hanselmann
class TestCheckHostname(_EnvVarTest):
76 05e733b4 Michael Hanselmann
  def test(self):
77 05e733b4 Michael Hanselmann
    for i in ["/", "/tmp"]:
78 05e733b4 Michael Hanselmann
      self.assertRaises(RuntimeError, vcluster._CheckHostname, i)
79 05e733b4 Michael Hanselmann
80 05e733b4 Michael Hanselmann
81 05e733b4 Michael Hanselmann
class TestPreparePaths(_EnvVarTest):
82 05e733b4 Michael Hanselmann
  def testInvalidParameters(self):
83 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._PreparePaths,
84 05e733b4 Michael Hanselmann
                      None, "host.example.com")
85 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._PreparePaths,
86 05e733b4 Michael Hanselmann
                      "/tmp/", "")
87 05e733b4 Michael Hanselmann
88 05e733b4 Michael Hanselmann
  def testNonNormalizedRootDir(self):
89 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster._PreparePaths,
90 05e733b4 Michael Hanselmann
                      "/tmp////xyz//", "host.example.com")
91 05e733b4 Michael Hanselmann
92 05e733b4 Michael Hanselmann
  def testInvalidHostname(self):
93 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._PreparePaths, "/tmp", "/")
94 05e733b4 Michael Hanselmann
95 05e733b4 Michael Hanselmann
  def testPathHostnameMismatch(self):
96 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._PreparePaths,
97 05e733b4 Michael Hanselmann
                      "/tmp/host.example.com", "server.example.com")
98 05e733b4 Michael Hanselmann
99 05e733b4 Michael Hanselmann
  def testNoVirtCluster(self):
100 05e733b4 Michael Hanselmann
    for i in ["", None]:
101 05e733b4 Michael Hanselmann
      self.assertEqual(vcluster._PreparePaths(i, i), ("", "", None))
102 05e733b4 Michael Hanselmann
103 05e733b4 Michael Hanselmann
  def testVirtCluster(self):
104 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster._PreparePaths("/tmp/host.example.com",
105 05e733b4 Michael Hanselmann
                                            "host.example.com"),
106 05e733b4 Michael Hanselmann
                     ("/tmp", "/tmp/host.example.com", "host.example.com"))
107 05e733b4 Michael Hanselmann
108 05e733b4 Michael Hanselmann
109 05e733b4 Michael Hanselmann
class TestMakeNodeRoot(unittest.TestCase):
110 05e733b4 Michael Hanselmann
  def test(self):
111 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._MakeNodeRoot, "/tmp", "/")
112 05e733b4 Michael Hanselmann
113 05e733b4 Michael Hanselmann
    for i in ["/tmp", "/tmp/", "/tmp///"]:
114 05e733b4 Michael Hanselmann
      self.assertEqual(vcluster._MakeNodeRoot(i, "other.example.com"),
115 05e733b4 Michael Hanselmann
                       "/tmp/other.example.com")
116 05e733b4 Michael Hanselmann
117 05e733b4 Michael Hanselmann
118 05e733b4 Michael Hanselmann
class TestEnvironmentForHost(unittest.TestCase):
119 05e733b4 Michael Hanselmann
  def test(self):
120 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster.EnvironmentForHost("host.example.com",
121 05e733b4 Michael Hanselmann
                                                 _basedir=None),
122 05e733b4 Michael Hanselmann
                     {})
123 05e733b4 Michael Hanselmann
    for i in ["host.example.com", "other.example.com"]:
124 05e733b4 Michael Hanselmann
      self.assertEqual(vcluster.EnvironmentForHost(i, _basedir="/tmp"), {
125 05e733b4 Michael Hanselmann
        vcluster._ROOTDIR_ENVNAME: "/tmp/%s" % i,
126 05e733b4 Michael Hanselmann
        vcluster._HOSTNAME_ENVNAME: i,
127 05e733b4 Michael Hanselmann
        })
128 05e733b4 Michael Hanselmann
129 05e733b4 Michael Hanselmann
130 05e733b4 Michael Hanselmann
class TestExchangeNodeRoot(unittest.TestCase):
131 05e733b4 Michael Hanselmann
  def test(self):
132 05e733b4 Michael Hanselmann
    result = vcluster.ExchangeNodeRoot("node1.example.com", "/tmp/file",
133 05e733b4 Michael Hanselmann
                                       _basedir=None, _noderoot=None)
134 05e733b4 Michael Hanselmann
    self.assertEqual(result, "/tmp/file")
135 05e733b4 Michael Hanselmann
136 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster.ExchangeNodeRoot,
137 05e733b4 Michael Hanselmann
                      "node1.example.com", "/tmp/node1.example.com",
138 05e733b4 Michael Hanselmann
                      _basedir="/tmp",
139 05e733b4 Michael Hanselmann
                      _noderoot="/tmp/nodeZZ.example.com")
140 05e733b4 Michael Hanselmann
141 05e733b4 Michael Hanselmann
    result = vcluster.ExchangeNodeRoot("node2.example.com",
142 05e733b4 Michael Hanselmann
                                       "/tmp/node1.example.com/file",
143 05e733b4 Michael Hanselmann
                                       _basedir="/tmp",
144 05e733b4 Michael Hanselmann
                                       _noderoot="/tmp/node1.example.com")
145 05e733b4 Michael Hanselmann
    self.assertEqual(result, "/tmp/node2.example.com/file")
146 05e733b4 Michael Hanselmann
147 05e733b4 Michael Hanselmann
148 05e733b4 Michael Hanselmann
class TestAddNodePrefix(unittest.TestCase):
149 05e733b4 Michael Hanselmann
  def testRelativePath(self):
150 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster.AddNodePrefix,
151 05e733b4 Michael Hanselmann
                      "foobar", _noderoot=None)
152 05e733b4 Michael Hanselmann
153 05e733b4 Michael Hanselmann
  def testRelativeNodeRoot(self):
154 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster.AddNodePrefix,
155 05e733b4 Michael Hanselmann
                      "/tmp", _noderoot="foobar")
156 05e733b4 Michael Hanselmann
157 05e733b4 Michael Hanselmann
  def test(self):
158 05e733b4 Michael Hanselmann
    path = vcluster.AddNodePrefix("/file/path",
159 05e733b4 Michael Hanselmann
                                  _noderoot="/tmp/node1.example.com/")
160 05e733b4 Michael Hanselmann
    self.assertEqual(path, "/tmp/node1.example.com/file/path")
161 05e733b4 Michael Hanselmann
162 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster.AddNodePrefix("/file/path", _noderoot=""),
163 05e733b4 Michael Hanselmann
                     "/file/path")
164 05e733b4 Michael Hanselmann
165 05e733b4 Michael Hanselmann
166 05e733b4 Michael Hanselmann
class TestRemoveNodePrefix(unittest.TestCase):
167 05e733b4 Michael Hanselmann
  def testRelativePath(self):
168 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster._RemoveNodePrefix,
169 05e733b4 Michael Hanselmann
                      "foobar", _noderoot=None)
170 05e733b4 Michael Hanselmann
171 05e733b4 Michael Hanselmann
  def testOutsideNodeRoot(self):
172 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._RemoveNodePrefix,
173 05e733b4 Michael Hanselmann
                      "/file/path", _noderoot="/tmp/node1.example.com")
174 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster._RemoveNodePrefix,
175 05e733b4 Michael Hanselmann
                      "/tmp/xyzfile", _noderoot="/tmp/xyz")
176 05e733b4 Michael Hanselmann
177 05e733b4 Michael Hanselmann
  def test(self):
178 05e733b4 Michael Hanselmann
    path = vcluster._RemoveNodePrefix("/tmp/node1.example.com/file/path",
179 05e733b4 Michael Hanselmann
                                      _noderoot="/tmp/node1.example.com")
180 05e733b4 Michael Hanselmann
    self.assertEqual(path, "/file/path")
181 05e733b4 Michael Hanselmann
182 05e733b4 Michael Hanselmann
    path = vcluster._RemoveNodePrefix("/file/path", _noderoot=None)
183 05e733b4 Michael Hanselmann
    self.assertEqual(path, "/file/path")
184 05e733b4 Michael Hanselmann
185 05e733b4 Michael Hanselmann
186 05e733b4 Michael Hanselmann
class TestMakeVirtualPath(unittest.TestCase):
187 05e733b4 Michael Hanselmann
  def testRelativePath(self):
188 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster.MakeVirtualPath,
189 05e733b4 Michael Hanselmann
                      "foobar", _noderoot=None)
190 05e733b4 Michael Hanselmann
191 05e733b4 Michael Hanselmann
  def testOutsideNodeRoot(self):
192 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster.MakeVirtualPath,
193 05e733b4 Michael Hanselmann
                      "/file/path", _noderoot="/tmp/node1.example.com")
194 05e733b4 Michael Hanselmann
195 05e733b4 Michael Hanselmann
  def testWithNodeRoot(self):
196 05e733b4 Michael Hanselmann
    path = vcluster.MakeVirtualPath("/tmp/node1.example.com/tmp/file",
197 05e733b4 Michael Hanselmann
                                    _noderoot="/tmp/node1.example.com")
198 05e733b4 Michael Hanselmann
    self.assertEqual(path, "%s/tmp/file" % vcluster._VIRT_PATH_PREFIX)
199 05e733b4 Michael Hanselmann
200 05e733b4 Michael Hanselmann
  def testNormal(self):
201 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster.MakeVirtualPath("/tmp/file", _noderoot=None),
202 05e733b4 Michael Hanselmann
                     "/tmp/file")
203 05e733b4 Michael Hanselmann
204 fe4f6dca Michael Hanselmann
  def testWhitelisted(self):
205 fe4f6dca Michael Hanselmann
    mvp = vcluster.MakeVirtualPath
206 fe4f6dca Michael Hanselmann
    for path in vcluster._VPATH_WHITELIST:
207 fe4f6dca Michael Hanselmann
      self.assertEqual(mvp(path), path)
208 fe4f6dca Michael Hanselmann
      self.assertEqual(mvp(path, _noderoot=None), path)
209 fe4f6dca Michael Hanselmann
      self.assertEqual(mvp(path, _noderoot="/tmp"), path)
210 fe4f6dca Michael Hanselmann
211 05e733b4 Michael Hanselmann
212 05e733b4 Michael Hanselmann
class TestLocalizeVirtualPath(unittest.TestCase):
213 05e733b4 Michael Hanselmann
  def testWrongPrefix(self):
214 05e733b4 Michael Hanselmann
    self.assertRaises(RuntimeError, vcluster.LocalizeVirtualPath,
215 05e733b4 Michael Hanselmann
                      "/tmp/some/path", _noderoot="/tmp/node1.example.com")
216 05e733b4 Michael Hanselmann
217 05e733b4 Michael Hanselmann
  def testCorrectPrefixRelativePath(self):
218 05e733b4 Michael Hanselmann
    self.assertRaises(AssertionError, vcluster.LocalizeVirtualPath,
219 05e733b4 Michael Hanselmann
                      vcluster._VIRT_PATH_PREFIX + "foobar",
220 05e733b4 Michael Hanselmann
                      _noderoot="/tmp/node1.example.com")
221 05e733b4 Michael Hanselmann
222 05e733b4 Michael Hanselmann
  def testWithNodeRoot(self):
223 05e733b4 Michael Hanselmann
    lvp = vcluster.LocalizeVirtualPath
224 05e733b4 Michael Hanselmann
225 05e733b4 Michael Hanselmann
    virtpath1 = "%s/tmp/file" % vcluster._VIRT_PATH_PREFIX
226 05e733b4 Michael Hanselmann
    virtpath2 = "%s////tmp////file" % vcluster._VIRT_PATH_PREFIX
227 05e733b4 Michael Hanselmann
228 05e733b4 Michael Hanselmann
    for i in [virtpath1, virtpath2]:
229 05e733b4 Michael Hanselmann
      result = lvp(i, _noderoot="/tmp/node1.example.com")
230 05e733b4 Michael Hanselmann
      self.assertEqual(result, "/tmp/node1.example.com/tmp/file")
231 05e733b4 Michael Hanselmann
232 05e733b4 Michael Hanselmann
  def testNormal(self):
233 05e733b4 Michael Hanselmann
    self.assertEqual(vcluster.LocalizeVirtualPath("/tmp/file", _noderoot=None),
234 05e733b4 Michael Hanselmann
                     "/tmp/file")
235 05e733b4 Michael Hanselmann
236 fe4f6dca Michael Hanselmann
  def testWhitelisted(self):
237 fe4f6dca Michael Hanselmann
    lvp = vcluster.LocalizeVirtualPath
238 fe4f6dca Michael Hanselmann
    for path in vcluster._VPATH_WHITELIST:
239 fe4f6dca Michael Hanselmann
      self.assertEqual(lvp(path), path)
240 fe4f6dca Michael Hanselmann
      self.assertEqual(lvp(path, _noderoot=None), path)
241 fe4f6dca Michael Hanselmann
      self.assertEqual(lvp(path, _noderoot="/tmp"), path)
242 fe4f6dca Michael Hanselmann
243 05e733b4 Michael Hanselmann
244 05e733b4 Michael Hanselmann
class TestVirtualPathPrefix(unittest.TestCase):
245 05e733b4 Michael Hanselmann
  def test(self):
246 05e733b4 Michael Hanselmann
    self.assertTrue(os.path.isabs(vcluster._VIRT_PATH_PREFIX))
247 05e733b4 Michael Hanselmann
    self.assertEqual(os.path.normcase(vcluster._VIRT_PATH_PREFIX),
248 05e733b4 Michael Hanselmann
                     vcluster._VIRT_PATH_PREFIX)
249 05e733b4 Michael Hanselmann
250 05e733b4 Michael Hanselmann
251 05e733b4 Michael Hanselmann
if __name__ == "__main__":
252 05e733b4 Michael Hanselmann
  testutils.GanetiTestProgram()