def test_requests(self): """Request a slot""" s = SlotsProvider(10) self.assertEqual(s.request("eth1", "192.168.1.1"), 0) self.assertEqual(s.request("eth1", "192.168.1.2"), 1) self.assertEqual(s.request("eth1", "192.168.1.3"), 2) self.assertEqual(s.request("eth3", "192.168.1.4"), 0) self.assertEqual(s.request("eth3", "192.168.1.5"), 1) self.assertEqual(s.get("192.168.1.5"), 1)
def test_no_free_slots(self): """Request too much slots""" s = SlotsProvider(10) for i in range(10): s.request("eth1", "192.168.1.%d" % i) s.request("eth2", "192.168.2.1") with self.assertRaises(RuntimeError): s.request("eth1", "192.168.1.10") s.release("192.168.1.5") self.assertEqual(s.request("eth1", "192.168.1.10"), 5)
def test_releases(self): """Release slots""" s = SlotsProvider(10) s.request("eth1", "192.168.1.1") s.request("eth1", "192.168.1.2") s.request("eth1", "192.168.1.3") s.request("eth2", "192.168.1.4") s.request("eth2", "192.168.1.5") self.assertEqual(s.release("192.168.1.1"), 0) self.assertEqual(s.release("192.168.1.3"), 2) self.assertEqual(s.release("192.168.1.5"), 1)
def test_bogus_requests_releases(self): """Requests twice or release twice""" s = SlotsProvider(10) s.request("eth1", "192.168.1.10") with self.assertRaises(ValueError): s.request("eth1", "192.168.1.10") self.assertEqual(s.request("eth1", "192.168.1.11"), 1) s.release("192.168.1.10") with self.assertRaises(ValueError): s.release("192.168.1.10") with self.assertRaises(ValueError): s.get("192.168.1.10")
def test_requests_releases_ipv6(self): """Request and release slots, with IPv6""" s = SlotsProvider(10) s.request("eth1", "192.168.1.1") s.request("eth1", "2001:db8::2") s.request("eth1", "192.168.1.3") s.request("eth2", "2001:db8::4") s.request("eth2", "2001:db8::5") s.release("192.168.1.1") s.release("192.168.1.3") s.release("2001:db8::5") self.assertEqual(s.request("eth2", "192.168.1.1"), 1) self.assertEqual(s.request("eth1", "2001:db8::5"), 0) self.assertEqual(s.request("eth1", "192.168.1.3"), 2)