Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.netutils_unittest.py @ 6760e4ed

History | View | Annotate | Download (11 kB)

1 a744b676 Manuel Franceschini
#!/usr/bin/python
2 a744b676 Manuel Franceschini
#
3 a744b676 Manuel Franceschini
4 a744b676 Manuel Franceschini
# Copyright (C) 2010 Google Inc.
5 a744b676 Manuel Franceschini
#
6 a744b676 Manuel Franceschini
# This program is free software; you can redistribute it and/or modify
7 a744b676 Manuel Franceschini
# it under the terms of the GNU General Public License as published by
8 a744b676 Manuel Franceschini
# the Free Software Foundation; either version 2 of the License, or
9 a744b676 Manuel Franceschini
# (at your option) any later version.
10 a744b676 Manuel Franceschini
#
11 a744b676 Manuel Franceschini
# This program is distributed in the hope that it will be useful, but
12 a744b676 Manuel Franceschini
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 a744b676 Manuel Franceschini
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 a744b676 Manuel Franceschini
# General Public License for more details.
15 a744b676 Manuel Franceschini
#
16 a744b676 Manuel Franceschini
# You should have received a copy of the GNU General Public License
17 a744b676 Manuel Franceschini
# along with this program; if not, write to the Free Software
18 a744b676 Manuel Franceschini
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 a744b676 Manuel Franceschini
# 02110-1301, USA.
20 a744b676 Manuel Franceschini
21 a744b676 Manuel Franceschini
22 a744b676 Manuel Franceschini
"""Script for unittesting the netutils module"""
23 a744b676 Manuel Franceschini
24 a744b676 Manuel Franceschini
import os
25 a744b676 Manuel Franceschini
import shutil
26 a744b676 Manuel Franceschini
import socket
27 a744b676 Manuel Franceschini
import tempfile
28 a744b676 Manuel Franceschini
import unittest
29 a744b676 Manuel Franceschini
30 a744b676 Manuel Franceschini
import testutils
31 a744b676 Manuel Franceschini
from ganeti import constants
32 a744b676 Manuel Franceschini
from ganeti import errors
33 a744b676 Manuel Franceschini
from ganeti import netutils
34 a744b676 Manuel Franceschini
from ganeti import serializer
35 a744b676 Manuel Franceschini
from ganeti import utils
36 a744b676 Manuel Franceschini
37 a744b676 Manuel Franceschini
38 a744b676 Manuel Franceschini
def _GetSocketCredentials(path):
39 a744b676 Manuel Franceschini
  """Connect to a Unix socket and return remote credentials.
40 a744b676 Manuel Franceschini

41 a744b676 Manuel Franceschini
  """
42 a744b676 Manuel Franceschini
  sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
43 a744b676 Manuel Franceschini
  try:
44 a744b676 Manuel Franceschini
    sock.settimeout(10)
45 a744b676 Manuel Franceschini
    sock.connect(path)
46 a744b676 Manuel Franceschini
    return netutils.GetSocketCredentials(sock)
47 a744b676 Manuel Franceschini
  finally:
48 a744b676 Manuel Franceschini
    sock.close()
49 a744b676 Manuel Franceschini
50 a744b676 Manuel Franceschini
51 a744b676 Manuel Franceschini
class TestGetSocketCredentials(unittest.TestCase):
52 a744b676 Manuel Franceschini
  def setUp(self):
53 a744b676 Manuel Franceschini
    self.tmpdir = tempfile.mkdtemp()
54 a744b676 Manuel Franceschini
    self.sockpath = utils.PathJoin(self.tmpdir, "sock")
55 a744b676 Manuel Franceschini
56 a744b676 Manuel Franceschini
    self.listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
57 a744b676 Manuel Franceschini
    self.listener.settimeout(10)
58 a744b676 Manuel Franceschini
    self.listener.bind(self.sockpath)
59 a744b676 Manuel Franceschini
    self.listener.listen(1)
60 a744b676 Manuel Franceschini
61 a744b676 Manuel Franceschini
  def tearDown(self):
62 a744b676 Manuel Franceschini
    self.listener.shutdown(socket.SHUT_RDWR)
63 a744b676 Manuel Franceschini
    self.listener.close()
64 a744b676 Manuel Franceschini
    shutil.rmtree(self.tmpdir)
65 a744b676 Manuel Franceschini
66 a744b676 Manuel Franceschini
  def test(self):
67 a744b676 Manuel Franceschini
    (c2pr, c2pw) = os.pipe()
68 a744b676 Manuel Franceschini
69 a744b676 Manuel Franceschini
    # Start child process
70 a744b676 Manuel Franceschini
    child = os.fork()
71 a744b676 Manuel Franceschini
    if child == 0:
72 a744b676 Manuel Franceschini
      try:
73 a744b676 Manuel Franceschini
        data = serializer.DumpJson(_GetSocketCredentials(self.sockpath))
74 a744b676 Manuel Franceschini
75 a744b676 Manuel Franceschini
        os.write(c2pw, data)
76 a744b676 Manuel Franceschini
        os.close(c2pw)
77 a744b676 Manuel Franceschini
78 a744b676 Manuel Franceschini
        os._exit(0)
79 a744b676 Manuel Franceschini
      finally:
80 a744b676 Manuel Franceschini
        os._exit(1)
81 a744b676 Manuel Franceschini
82 a744b676 Manuel Franceschini
    os.close(c2pw)
83 a744b676 Manuel Franceschini
84 a744b676 Manuel Franceschini
    # Wait for one connection
85 a744b676 Manuel Franceschini
    (conn, _) = self.listener.accept()
86 a744b676 Manuel Franceschini
    conn.recv(1)
87 a744b676 Manuel Franceschini
    conn.close()
88 a744b676 Manuel Franceschini
89 a744b676 Manuel Franceschini
    # Wait for result
90 a744b676 Manuel Franceschini
    result = os.read(c2pr, 4096)
91 a744b676 Manuel Franceschini
    os.close(c2pr)
92 a744b676 Manuel Franceschini
93 a744b676 Manuel Franceschini
    # Check child's exit code
94 a744b676 Manuel Franceschini
    (_, status) = os.waitpid(child, 0)
95 a744b676 Manuel Franceschini
    self.assertFalse(os.WIFSIGNALED(status))
96 a744b676 Manuel Franceschini
    self.assertEqual(os.WEXITSTATUS(status), 0)
97 a744b676 Manuel Franceschini
98 a744b676 Manuel Franceschini
    # Check result
99 a744b676 Manuel Franceschini
    (pid, uid, gid) = serializer.LoadJson(result)
100 a744b676 Manuel Franceschini
    self.assertEqual(pid, os.getpid())
101 a744b676 Manuel Franceschini
    self.assertEqual(uid, os.getuid())
102 a744b676 Manuel Franceschini
    self.assertEqual(gid, os.getgid())
103 a744b676 Manuel Franceschini
104 a744b676 Manuel Franceschini
105 a744b676 Manuel Franceschini
class TestHostInfo(unittest.TestCase):
106 a744b676 Manuel Franceschini
  """Testing case for HostInfo"""
107 a744b676 Manuel Franceschini
108 a744b676 Manuel Franceschini
  def testUppercase(self):
109 a744b676 Manuel Franceschini
    data = "AbC.example.com"
110 a744b676 Manuel Franceschini
    self.failUnlessEqual(netutils.HostInfo.NormalizeName(data), data.lower())
111 a744b676 Manuel Franceschini
112 a744b676 Manuel Franceschini
  def testTooLongName(self):
113 a744b676 Manuel Franceschini
    data = "a.b." + "c" * 255
114 a744b676 Manuel Franceschini
    self.failUnlessRaises(errors.OpPrereqError,
115 a744b676 Manuel Franceschini
                          netutils.HostInfo.NormalizeName, data)
116 a744b676 Manuel Franceschini
117 a744b676 Manuel Franceschini
  def testTrailingDot(self):
118 a744b676 Manuel Franceschini
    data = "a.b.c"
119 a744b676 Manuel Franceschini
    self.failUnlessEqual(netutils.HostInfo.NormalizeName(data + "."), data)
120 a744b676 Manuel Franceschini
121 a744b676 Manuel Franceschini
  def testInvalidName(self):
122 a744b676 Manuel Franceschini
    data = [
123 a744b676 Manuel Franceschini
      "a b",
124 a744b676 Manuel Franceschini
      "a/b",
125 a744b676 Manuel Franceschini
      ".a.b",
126 a744b676 Manuel Franceschini
      "a..b",
127 a744b676 Manuel Franceschini
      ]
128 a744b676 Manuel Franceschini
    for value in data:
129 a744b676 Manuel Franceschini
      self.failUnlessRaises(errors.OpPrereqError,
130 a744b676 Manuel Franceschini
                            netutils.HostInfo.NormalizeName, value)
131 a744b676 Manuel Franceschini
132 a744b676 Manuel Franceschini
  def testValidName(self):
133 a744b676 Manuel Franceschini
    data = [
134 a744b676 Manuel Franceschini
      "a.b",
135 a744b676 Manuel Franceschini
      "a-b",
136 a744b676 Manuel Franceschini
      "a_b",
137 a744b676 Manuel Franceschini
      "a.b.c",
138 a744b676 Manuel Franceschini
      ]
139 a744b676 Manuel Franceschini
    for value in data:
140 a744b676 Manuel Franceschini
      netutils.HostInfo.NormalizeName(value)
141 a744b676 Manuel Franceschini
142 a744b676 Manuel Franceschini
143 a744b676 Manuel Franceschini
class TestIsValidIP4(unittest.TestCase):
144 a744b676 Manuel Franceschini
  def test(self):
145 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP4("127.0.0.1"))
146 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP4("0.0.0.0"))
147 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP4("255.255.255.255"))
148 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP4("0"))
149 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP4("1"))
150 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP4("1.1.1"))
151 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP4("255.255.255.256"))
152 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP4("::1"))
153 a744b676 Manuel Franceschini
154 a744b676 Manuel Franceschini
155 a744b676 Manuel Franceschini
class TestIsValidIP6(unittest.TestCase):
156 a744b676 Manuel Franceschini
  def test(self):
157 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP6("::"))
158 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP6("::1"))
159 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP6("1" + (":1" * 7)))
160 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP6("ffff" + (":ffff" * 7)))
161 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("0"))
162 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6(":1"))
163 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("f" + (":f" * 6)))
164 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("fffg" + (":ffff" * 7)))
165 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("fffff" + (":ffff" * 7)))
166 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("1" + (":1" * 8)))
167 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP6("127.0.0.1"))
168 a744b676 Manuel Franceschini
169 a744b676 Manuel Franceschini
170 a744b676 Manuel Franceschini
class TestIsValidIP(unittest.TestCase):
171 a744b676 Manuel Franceschini
  def test(self):
172 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP("0.0.0.0"))
173 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP("127.0.0.1"))
174 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP("::"))
175 a744b676 Manuel Franceschini
    self.assert_(netutils.IsValidIP("::1"))
176 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP("0"))
177 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP("1.1.1.256"))
178 a744b676 Manuel Franceschini
    self.assertFalse(netutils.IsValidIP("a:g::1"))
179 a744b676 Manuel Franceschini
180 a744b676 Manuel Franceschini
181 a744b676 Manuel Franceschini
class TestGetAddressFamily(unittest.TestCase):
182 a744b676 Manuel Franceschini
  def test(self):
183 a744b676 Manuel Franceschini
    self.assertEqual(netutils.GetAddressFamily("127.0.0.1"), socket.AF_INET)
184 a744b676 Manuel Franceschini
    self.assertEqual(netutils.GetAddressFamily("10.2.0.127"), socket.AF_INET)
185 a744b676 Manuel Franceschini
    self.assertEqual(netutils.GetAddressFamily("::1"), socket.AF_INET6)
186 a744b676 Manuel Franceschini
    self.assertEqual(netutils.GetAddressFamily("fe80::a00:27ff:fe08:5048"),
187 a744b676 Manuel Franceschini
                     socket.AF_INET6)
188 a744b676 Manuel Franceschini
    self.assertRaises(errors.GenericError, netutils.GetAddressFamily, "0")
189 a744b676 Manuel Franceschini
190 a744b676 Manuel Franceschini
191 a744b676 Manuel Franceschini
class _BaseTcpPingTest:
192 a744b676 Manuel Franceschini
  """Base class for TcpPing tests against listen(2)ing port"""
193 a744b676 Manuel Franceschini
  family = None
194 a744b676 Manuel Franceschini
  address = None
195 a744b676 Manuel Franceschini
196 a744b676 Manuel Franceschini
  def setUp(self):
197 a744b676 Manuel Franceschini
    self.listener = socket.socket(self.family, socket.SOCK_STREAM)
198 a744b676 Manuel Franceschini
    self.listener.bind((self.address, 0))
199 a744b676 Manuel Franceschini
    self.listenerport = self.listener.getsockname()[1]
200 a744b676 Manuel Franceschini
    self.listener.listen(1)
201 a744b676 Manuel Franceschini
202 a744b676 Manuel Franceschini
  def tearDown(self):
203 a744b676 Manuel Franceschini
    self.listener.shutdown(socket.SHUT_RDWR)
204 a744b676 Manuel Franceschini
    del self.listener
205 a744b676 Manuel Franceschini
    del self.listenerport
206 a744b676 Manuel Franceschini
207 a744b676 Manuel Franceschini
  def testTcpPingToLocalHostAccept(self):
208 a744b676 Manuel Franceschini
    self.assert_(netutils.TcpPing(self.address,
209 a744b676 Manuel Franceschini
                                  self.listenerport,
210 a744b676 Manuel Franceschini
                                  timeout=constants.TCP_PING_TIMEOUT,
211 a744b676 Manuel Franceschini
                                  live_port_needed=True,
212 a744b676 Manuel Franceschini
                                  source=self.address,
213 a744b676 Manuel Franceschini
                                  ),
214 a744b676 Manuel Franceschini
                 "failed to connect to test listener")
215 a744b676 Manuel Franceschini
216 a744b676 Manuel Franceschini
    self.assert_(netutils.TcpPing(self.address, self.listenerport,
217 a744b676 Manuel Franceschini
                                  timeout=constants.TCP_PING_TIMEOUT,
218 a744b676 Manuel Franceschini
                                  live_port_needed=True),
219 a744b676 Manuel Franceschini
                 "failed to connect to test listener (no source)")
220 a744b676 Manuel Franceschini
221 a744b676 Manuel Franceschini
222 a744b676 Manuel Franceschini
class TestIP4TcpPing(unittest.TestCase, _BaseTcpPingTest):
223 a744b676 Manuel Franceschini
  """Testcase for IPv4 TCP version of ping - against listen(2)ing port"""
224 a744b676 Manuel Franceschini
  family = socket.AF_INET
225 a744b676 Manuel Franceschini
  address = constants.IP4_ADDRESS_LOCALHOST
226 a744b676 Manuel Franceschini
227 a744b676 Manuel Franceschini
  def setUp(self):
228 a744b676 Manuel Franceschini
    unittest.TestCase.setUp(self)
229 a744b676 Manuel Franceschini
    _BaseTcpPingTest.setUp(self)
230 a744b676 Manuel Franceschini
231 a744b676 Manuel Franceschini
  def tearDown(self):
232 a744b676 Manuel Franceschini
    unittest.TestCase.tearDown(self)
233 a744b676 Manuel Franceschini
    _BaseTcpPingTest.tearDown(self)
234 a744b676 Manuel Franceschini
235 a744b676 Manuel Franceschini
236 a744b676 Manuel Franceschini
class TestIP6TcpPing(unittest.TestCase, _BaseTcpPingTest):
237 a744b676 Manuel Franceschini
  """Testcase for IPv6 TCP version of ping - against listen(2)ing port"""
238 a744b676 Manuel Franceschini
  family = socket.AF_INET6
239 a744b676 Manuel Franceschini
  address = constants.IP6_ADDRESS_LOCALHOST
240 a744b676 Manuel Franceschini
241 a744b676 Manuel Franceschini
  def setUp(self):
242 a744b676 Manuel Franceschini
    unittest.TestCase.setUp(self)
243 a744b676 Manuel Franceschini
    _BaseTcpPingTest.setUp(self)
244 a744b676 Manuel Franceschini
245 a744b676 Manuel Franceschini
  def tearDown(self):
246 a744b676 Manuel Franceschini
    unittest.TestCase.tearDown(self)
247 a744b676 Manuel Franceschini
    _BaseTcpPingTest.tearDown(self)
248 a744b676 Manuel Franceschini
249 a744b676 Manuel Franceschini
250 a744b676 Manuel Franceschini
class _BaseTcpPingDeafTest:
251 a744b676 Manuel Franceschini
  """Base class for TcpPing tests against non listen(2)ing port"""
252 a744b676 Manuel Franceschini
  family = None
253 a744b676 Manuel Franceschini
  address = None
254 a744b676 Manuel Franceschini
255 a744b676 Manuel Franceschini
  def setUp(self):
256 a744b676 Manuel Franceschini
    self.deaflistener = socket.socket(self.family, socket.SOCK_STREAM)
257 a744b676 Manuel Franceschini
    self.deaflistener.bind((self.address, 0))
258 a744b676 Manuel Franceschini
    self.deaflistenerport = self.deaflistener.getsockname()[1]
259 a744b676 Manuel Franceschini
260 a744b676 Manuel Franceschini
  def tearDown(self):
261 a744b676 Manuel Franceschini
    del self.deaflistener
262 a744b676 Manuel Franceschini
    del self.deaflistenerport
263 a744b676 Manuel Franceschini
264 a744b676 Manuel Franceschini
  def testTcpPingToLocalHostAcceptDeaf(self):
265 a744b676 Manuel Franceschini
    self.assertFalse(netutils.TcpPing(self.address,
266 a744b676 Manuel Franceschini
                                      self.deaflistenerport,
267 a744b676 Manuel Franceschini
                                      timeout=constants.TCP_PING_TIMEOUT,
268 a744b676 Manuel Franceschini
                                      live_port_needed=True,
269 a744b676 Manuel Franceschini
                                      source=self.address,
270 a744b676 Manuel Franceschini
                                      ), # need successful connect(2)
271 a744b676 Manuel Franceschini
                     "successfully connected to deaf listener")
272 a744b676 Manuel Franceschini
273 a744b676 Manuel Franceschini
    self.assertFalse(netutils.TcpPing(self.address,
274 a744b676 Manuel Franceschini
                                      self.deaflistenerport,
275 a744b676 Manuel Franceschini
                                      timeout=constants.TCP_PING_TIMEOUT,
276 a744b676 Manuel Franceschini
                                      live_port_needed=True,
277 a744b676 Manuel Franceschini
                                      ), # need successful connect(2)
278 a744b676 Manuel Franceschini
                     "successfully connected to deaf listener (no source)")
279 a744b676 Manuel Franceschini
280 a744b676 Manuel Franceschini
  def testTcpPingToLocalHostNoAccept(self):
281 a744b676 Manuel Franceschini
    self.assert_(netutils.TcpPing(self.address,
282 a744b676 Manuel Franceschini
                                  self.deaflistenerport,
283 a744b676 Manuel Franceschini
                                  timeout=constants.TCP_PING_TIMEOUT,
284 a744b676 Manuel Franceschini
                                  live_port_needed=False,
285 a744b676 Manuel Franceschini
                                  source=self.address,
286 a744b676 Manuel Franceschini
                                  ), # ECONNREFUSED is OK
287 a744b676 Manuel Franceschini
                 "failed to ping alive host on deaf port")
288 a744b676 Manuel Franceschini
289 a744b676 Manuel Franceschini
    self.assert_(netutils.TcpPing(self.address,
290 a744b676 Manuel Franceschini
                                  self.deaflistenerport,
291 a744b676 Manuel Franceschini
                                  timeout=constants.TCP_PING_TIMEOUT,
292 a744b676 Manuel Franceschini
                                  live_port_needed=False,
293 a744b676 Manuel Franceschini
                                  ), # ECONNREFUSED is OK
294 a744b676 Manuel Franceschini
                 "failed to ping alive host on deaf port (no source)")
295 a744b676 Manuel Franceschini
296 a744b676 Manuel Franceschini
297 a744b676 Manuel Franceschini
class TestIP4TcpPingDeaf(unittest.TestCase, _BaseTcpPingDeafTest):
298 a744b676 Manuel Franceschini
  """Testcase for IPv4 TCP version of ping - against non listen(2)ing port"""
299 a744b676 Manuel Franceschini
  family = socket.AF_INET
300 a744b676 Manuel Franceschini
  address = constants.IP4_ADDRESS_LOCALHOST
301 a744b676 Manuel Franceschini
302 a744b676 Manuel Franceschini
  def setUp(self):
303 a744b676 Manuel Franceschini
    self.deaflistener = socket.socket(self.family, socket.SOCK_STREAM)
304 a744b676 Manuel Franceschini
    self.deaflistener.bind((self.address, 0))
305 a744b676 Manuel Franceschini
    self.deaflistenerport = self.deaflistener.getsockname()[1]
306 a744b676 Manuel Franceschini
307 a744b676 Manuel Franceschini
  def tearDown(self):
308 a744b676 Manuel Franceschini
    del self.deaflistener
309 a744b676 Manuel Franceschini
    del self.deaflistenerport
310 a744b676 Manuel Franceschini
311 a744b676 Manuel Franceschini
312 a744b676 Manuel Franceschini
class TestIP6TcpPingDeaf(unittest.TestCase, _BaseTcpPingDeafTest):
313 a744b676 Manuel Franceschini
  """Testcase for IPv6 TCP version of ping - against non listen(2)ing port"""
314 a744b676 Manuel Franceschini
  family = socket.AF_INET6
315 a744b676 Manuel Franceschini
  address = constants.IP6_ADDRESS_LOCALHOST
316 a744b676 Manuel Franceschini
317 a744b676 Manuel Franceschini
  def setUp(self):
318 a744b676 Manuel Franceschini
    unittest.TestCase.setUp(self)
319 a744b676 Manuel Franceschini
    _BaseTcpPingDeafTest.setUp(self)
320 a744b676 Manuel Franceschini
321 a744b676 Manuel Franceschini
  def tearDown(self):
322 a744b676 Manuel Franceschini
    unittest.TestCase.tearDown(self)
323 a744b676 Manuel Franceschini
    _BaseTcpPingDeafTest.tearDown(self)
324 a744b676 Manuel Franceschini
325 a744b676 Manuel Franceschini
326 a744b676 Manuel Franceschini
class TestOwnIpAddress(unittest.TestCase):
327 a744b676 Manuel Franceschini
  """Testcase for OwnIpAddress"""
328 a744b676 Manuel Franceschini
329 a744b676 Manuel Franceschini
  def testOwnLoopback(self):
330 a744b676 Manuel Franceschini
    """check having the loopback ip"""
331 a744b676 Manuel Franceschini
    self.failUnless(netutils.OwnIpAddress(constants.IP4_ADDRESS_LOCALHOST),
332 a744b676 Manuel Franceschini
                    "Should own the loopback address")
333 a744b676 Manuel Franceschini
334 a744b676 Manuel Franceschini
  def testNowOwnAddress(self):
335 a744b676 Manuel Franceschini
    """check that I don't own an address"""
336 a744b676 Manuel Franceschini
337 a744b676 Manuel Franceschini
    # Network 192.0.2.0/24 is reserved for test/documentation as per
338 926feaf1 Manuel Franceschini
    # RFC 5737, so we *should* not have an address of this range... if
339 a744b676 Manuel Franceschini
    # this fails, we should extend the test to multiple addresses
340 a744b676 Manuel Franceschini
    DST_IP = "192.0.2.1"
341 a744b676 Manuel Franceschini
    self.failIf(netutils.OwnIpAddress(DST_IP),
342 a744b676 Manuel Franceschini
                "Should not own IP address %s" % DST_IP)
343 a744b676 Manuel Franceschini
344 a744b676 Manuel Franceschini
345 a744b676 Manuel Franceschini
if __name__ == "__main__":
346 a744b676 Manuel Franceschini
  testutils.GanetiTestProgram()