普通文本  |  73行  |  2.23 KB

# 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()