コード例 #1
0
ファイル: tests.py プロジェクト: unixian97/pymatryoshka
 def setUp(self):
     self.vnet = VirtualNetwork(vni=0xF0F1F2,
                                macttl=self.MAC_TTL,
                                mactablesize=100)
コード例 #2
0
ファイル: tests.py プロジェクト: karlpilkington/pymatryoshka
 def setUp(self):
     self.vnet = VirtualNetwork(vni=0xF0F1F2, macttl=self.MAC_TTL,
                                mactablesize=100)
コード例 #3
0
ファイル: tests.py プロジェクト: unixian97/pymatryoshka
class VirtualNetworkTestCase(unittest.TestCase):
    MAC_TABLE_SIZE = 100
    MAC_TTL = 0.1

    def setUp(self):
        self.vnet = VirtualNetwork(vni=0xF0F1F2,
                                   macttl=self.MAC_TTL,
                                   mactablesize=100)

    def test_learn_mac(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        mac2 = "05:04:03:02:01:00"
        vtep2 = IP("::1")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        self.assertTrue(self.vnet.learn(mac2, vtep2))
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        self.assertEqual(self.vnet.lookup(mac2), vtep2)

    def test_lookup_unknown_mac(self):
        mac1 = "00:01:02:0A:0B:0C"
        self.assertIsNone(self.vnet.lookup(mac1))

    def test_lookup_expired_mac(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        time.sleep(self.vnet.macttl)
        self.assertIsNone(self.vnet.lookup(mac1))

    def test_relearn_mac_updates_ttl(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        vtep2 = IP("127.0.0.2")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        # Sleep just until the mac entry is about to expire
        time.sleep(self.vnet.macttl - 0.01)
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        self.assertFalse(self.vnet.learn(mac1, vtep2))
        # Make sure the ttl timer gets updated
        time.sleep(self.vnet.macttl - 0.01)
        self.assertEqual(self.vnet.lookup(mac1), vtep2)

    def _fill_mac_table(self, prefix, cnt):
        # Fill the MAC table so it's ready to overflow
        cur = len(self.vnet._macs)
        self.assertLessEqual(cur, cnt)
        for i in xrange(0, cnt - cur):
            m = "%s:%02X" % (prefix, i)
            self.assertTrue(self.vnet.learn(m, IP("127.0.0.1")))
        self.assertEqual(len(self.vnet._macs), cnt)

    def test_hit_mac_count_limit(self):
        """Test mac table detects overflow when size limit is reached"""
        self._fill_mac_table("DE:AD:BA:BE:00", self.MAC_TABLE_SIZE)
        m = "DE:AD:BA:BE:00:%02X" % (self.MAC_TABLE_SIZE + 1)
        self.assertRaises(MemoryError, self.vnet.learn, m, IP("127.0.0.1"))
        # Wait for the entries to expire
        time.sleep(self.vnet.macttl)
        self.assertTrue(self.vnet.learn(m, IP("127.0.0.1")))

    def test_gc(self):
        """Test gc only collects stale entries"""
        # Fill half the table
        self._fill_mac_table("DE:AD:BA:BE:00", self.MAC_TABLE_SIZE / 2)
        time.sleep(self.vnet.macttl - 0.01)
        # Make sure the entries are not collected
        self.vnet.gc()
        self.assertEqual(len(self.vnet._macs), self.MAC_TABLE_SIZE / 2)
        # Fill up table completely, and wait for the first half to expire
        self._fill_mac_table("DE:AD:BA:BE:01", self.MAC_TABLE_SIZE)
        time.sleep(self.vnet.macttl - 0.01)
        self.vnet.gc()
        self.assertEqual(len(self.vnet._macs), self.MAC_TABLE_SIZE / 2)
        # Then wait for the remaining entries to expire
        time.sleep(0.01)
        self.vnet.gc()
        self.assertFalse(len(self.vnet._macs))
コード例 #4
0
ファイル: tests.py プロジェクト: karlpilkington/pymatryoshka
class VirtualNetworkTestCase(unittest.TestCase):
    MAC_TABLE_SIZE = 100
    MAC_TTL = 0.1

    def setUp(self):
        self.vnet = VirtualNetwork(vni=0xF0F1F2, macttl=self.MAC_TTL,
                                   mactablesize=100)

    def test_learn_mac(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        mac2 = "05:04:03:02:01:00"
        vtep2 = IP("::1")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        self.assertTrue(self.vnet.learn(mac2, vtep2))
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        self.assertEqual(self.vnet.lookup(mac2), vtep2)

    def test_lookup_unknown_mac(self):
        mac1 = "00:01:02:0A:0B:0C"
        self.assertIsNone(self.vnet.lookup(mac1))

    def test_lookup_expired_mac(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        time.sleep(self.vnet.macttl)
        self.assertIsNone(self.vnet.lookup(mac1))

    def test_relearn_mac_updates_ttl(self):
        mac1 = "00:01:02:03:04:05"
        vtep1 = IP("127.0.0.1")
        vtep2 = IP("127.0.0.2")
        self.assertTrue(self.vnet.learn(mac1, vtep1))
        # Sleep just until the mac entry is about to expire
        time.sleep(self.vnet.macttl - 0.01)
        self.assertEqual(self.vnet.lookup(mac1), vtep1)
        self.assertFalse(self.vnet.learn(mac1, vtep2))
        # Make sure the ttl timer gets updated
        time.sleep(self.vnet.macttl - 0.01)
        self.assertEqual(self.vnet.lookup(mac1), vtep2)

    def _fill_mac_table(self, prefix, cnt):
        # Fill the MAC table so it's ready to overflow
        cur = len(self.vnet._macs)
        self.assertLessEqual(cur, cnt)
        for i in xrange(0, cnt - cur):
            m = "%s:%02X" % (prefix, i)
            self.assertTrue(self.vnet.learn(m, IP("127.0.0.1")))
        self.assertEqual(len(self.vnet._macs), cnt)

    def test_hit_mac_count_limit(self):
        """Test mac table detects overflow when size limit is reached"""
        self._fill_mac_table("DE:AD:BA:BE:00", self.MAC_TABLE_SIZE)
        m = "DE:AD:BA:BE:00:%02X" % (self.MAC_TABLE_SIZE + 1)
        self.assertRaises(MemoryError, self.vnet.learn, m, IP("127.0.0.1"))
        # Wait for the entries to expire
        time.sleep(self.vnet.macttl)
        self.assertTrue(self.vnet.learn(m, IP("127.0.0.1")))

    def test_gc(self):
        """Test gc only collects stale entries"""
        # Fill half the table
        self._fill_mac_table("DE:AD:BA:BE:00", self.MAC_TABLE_SIZE / 2)
        time.sleep(self.vnet.macttl - 0.01)
        # Make sure the entries are not collected
        self.vnet.gc()
        self.assertEqual(len(self.vnet._macs), self.MAC_TABLE_SIZE / 2)
        # Fill up table completely, and wait for the first half to expire
        self._fill_mac_table("DE:AD:BA:BE:01", self.MAC_TABLE_SIZE)
        time.sleep(self.vnet.macttl - 0.01)
        self.vnet.gc()
        self.assertEqual(len(self.vnet._macs), self.MAC_TABLE_SIZE / 2)
        # Then wait for the remaining entries to expire
        time.sleep(0.01)
        self.vnet.gc()
        self.assertFalse(len(self.vnet._macs))