"""Author: Sandeep Belgavi. Routing, admission and accounting tests.""" import unittest from pattern_13 import Router class RouterTests(unittest.TestCase): def test_capability_floor(self): r = Router(budget=2) self.assertEqual(r.admit('1', 2, 100), 'budget_denied') self.assertEqual(r.remaining, 2) def test_cheapest_eligible_route(self): r = Router() self.assertEqual(r.admit('1', 1, 100), 'fast') self.assertEqual(r.remaining, 5) def test_overload_no_charge(self): r = Router() r.admit('1', 1, 100) self.assertEqual(r.admit('2', 1, 100), 'overloaded') self.assertEqual(r.remaining, 5) def test_expired_no_reservation(self): r = Router() self.assertEqual(r.admit('1', 1, 0), 'expired') self.assertEqual(r.remaining, 7) def test_settlement_refunds_unused_units(self): r = Router() r.admit('1', 2, 100) r.settle('1', 3) self.assertEqual(r.remaining, 4) self.assertEqual(r.active, {}) def test_duplicate_cannot_double_charge(self): r = Router() r.admit('1', 1, 100) with self.assertRaises(ValueError): r.admit('1', 1, 100) self.assertEqual(r.remaining, 5) def test_bad_charge_retains_reservation(self): r = Router() r.admit('1', 1, 100) with self.assertRaises(ValueError): r.settle('1', 3) self.assertIn('1', r.active) self.assertEqual(r.remaining, 5) def test_double_settlement_rejected(self): r = Router() r.admit('1', 1, 100) r.settle('1', 1) with self.assertRaises(KeyError): r.settle('1', 1) self.assertEqual(r.remaining, 6) if __name__ == '__main__': unittest.main()