Home | History | Annotate | Download | only in py
      1 # Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import unittest
      6 
      7 from lansim import tuntap
      8 
      9 
     10 class TunTapTest(unittest.TestCase):
     11     """Unit tests for the TunTap class."""
     12 
     13     def testCreateTapDevice(self):
     14         """Tests creation of a TAP device and its attributes."""
     15         tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d")
     16 
     17         self.assertEqual(tap.mode, tuntap.IFF_TAP)
     18 
     19         # Interface name respects the provided format.
     20         self.assertTrue(hasattr(tap, 'name'))
     21         self.assertTrue(tap.name.startswith('faketap'))
     22 
     23         # MTU is set for the interface.
     24         self.assertTrue(hasattr(tap, 'mtu'))
     25         self.assertTrue(tap.mtu)
     26 
     27 
     28     def testCreateTunDevice(self):
     29         """Tests creation of a TAP device and its attributes."""
     30         tun = tuntap.TunTap(tuntap.IFF_TUN, name="faketun%d")
     31         self.assertEqual(tun.mode, tuntap.IFF_TUN)
     32 
     33 
     34     def testTapDeviceHWAddr(self):
     35         """Tests that we can get and set the HW address of a TAP device."""
     36         tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d")
     37         family, addr = tap.get_hwaddr()
     38         self.assertEqual(family, 1) # Ethernet address
     39 
     40         # Select a different hwaddr.
     41         addr = addr[:-2] + ('11' if addr[-2:] != '11' else '22')
     42 
     43         new_family, new_addr = tap.set_hwaddr(addr)
     44         self.assertEqual(new_family, 1)
     45         self.assertEqual(new_addr, addr)
     46 
     47         new_family, new_addr = tap.get_hwaddr()
     48         self.assertEqual(new_family, 1)
     49         self.assertEqual(new_addr, addr)
     50 
     51 
     52     def testTapDeviceUpDown(self):
     53         """Tests if it is possible to bring up and down the interface."""
     54         tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d")
     55         # Set the IP address to a safe value:
     56         tap.set_addr('169.254.10.1')
     57         self.assertEqual(tap.addr, '169.254.10.1')
     58         tap.set_addr('0.0.0.0')
     59 
     60         self.assertFalse(tap.is_up())
     61         tap.up()
     62         self.assertTrue(tap.is_up())
     63         # Checks that calling up() twice is harmless.
     64         tap.up()
     65         self.assertTrue(tap.is_up())
     66         tap.down()
     67         self.assertFalse(tap.is_up())
     68 
     69 
     70 if __name__ == '__main__':
     71     unittest.main()
     72 
     73