# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import unittest from lansim import tuntap class TunTapTest(unittest.TestCase): """Unit tests for the TunTap class.""" def testCreateTapDevice(self): """Tests creation of a TAP device and its attributes.""" tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d") self.assertEqual(tap.mode, tuntap.IFF_TAP) # Interface name respects the provided format. self.assertTrue(hasattr(tap, 'name')) self.assertTrue(tap.name.startswith('faketap')) # MTU is set for the interface. self.assertTrue(hasattr(tap, 'mtu')) self.assertTrue(tap.mtu) def testCreateTunDevice(self): """Tests creation of a TAP device and its attributes.""" tun = tuntap.TunTap(tuntap.IFF_TUN, name="faketun%d") self.assertEqual(tun.mode, tuntap.IFF_TUN) def testTapDeviceHWAddr(self): """Tests that we can get and set the HW address of a TAP device.""" tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d") family, addr = tap.get_hwaddr() self.assertEqual(family, 1) # Ethernet address # Select a different hwaddr. addr = addr[:-2] + ('11' if addr[-2:] != '11' else '22') new_family, new_addr = tap.set_hwaddr(addr) self.assertEqual(new_family, 1) self.assertEqual(new_addr, addr) new_family, new_addr = tap.get_hwaddr() self.assertEqual(new_family, 1) self.assertEqual(new_addr, addr) def testTapDeviceUpDown(self): """Tests if it is possible to bring up and down the interface.""" tap = tuntap.TunTap(tuntap.IFF_TAP, name="faketap%d") # Set the IP address to a safe value: tap.set_addr('169.254.10.1') self.assertEqual(tap.addr, '169.254.10.1') tap.set_addr('0.0.0.0') self.assertFalse(tap.is_up()) tap.up() self.assertTrue(tap.is_up()) # Checks that calling up() twice is harmless. tap.up() self.assertTrue(tap.is_up()) tap.down() self.assertFalse(tap.is_up()) if __name__ == '__main__': unittest.main()