def leases(self): leases = [] if len(self.nvram['static_leases']) > 0: for l in self.nvram['static_leases'].split(' '): lease = Lease() if lease.fromStr(l): leases += [lease] elif len(l) > 1: raise Exception("Couldn't parse lease: %s" % l) return leases
def test_read_leases(self): leaseObjectArray = readLeases("lease_config.json") leaseDicts = { "user1": { "hostname": "host1", "mac_address": "00:28:f8:43:f6:11", "ip_address": "192.168.35.44", "lease_time": "300" }, "user3": { "hostname": "host3", "mac_address": "00:28:f8:43:f6:11", "ip_address": "192.168.235.88", "lease_time": "500" }, "user2": { "hostname": "host2", "mac_address": "00:28:f8:43:f6:11", "ip_address": "192.168.135.66", "lease_time": "500" } } shouldBe = [] for user in sorted(leaseDicts): leaseDict = leaseDicts[user] shouldBe.append(Lease(leaseDict)) for leaseObjA, leaseObjB in zip(leaseObjectArray, shouldBe): self.assertEqual(leaseObjA.mac_address, leaseObjB.mac_address) self.assertEqual(leaseObjA.hostname, leaseObjB.hostname) self.assertEqual(leaseObjA.ip_address, leaseObjB.ip_address) self.assertEqual(leaseObjA.lease_time, leaseObjB.lease_time)
def get_lease(self, now, addr, client_id, routers, f=None): """Gets an existing matching lease or creates a new one if addr is None. Raises KeyError in case of failure.""" if addr is None: addr = (self.hosts() - set(self.leases.keys())).pop() elif not self.subnet.overlaps(IPv4Network(addr)): raise KeyError("Address not managed by this block") try: lease = self.leases[addr] except KeyError: lease = Lease() lease.addr = addr lease.client_id = client_id lease.routers = routers self.leases[addr] = lease if f: f(now, lease) if lease.client_id != client_id: raise KeyError("client_id does not match lease") lease.renew(now) return lease
def __init__(self, data_loader, checkpoint_dir, load_checkpoint_func, save_checkpoint_func, synthetic_data=False, write_on_close=True, verbose=True): if not isinstance(data_loader, Iterable): raise ValueError('Data is of uniterable ' 'type %s' % (type(data_loader))) else: self._data_loader = data_loader self._write_on_close = write_on_close atexit.register(self._close_file_handler) if self._write_on_close: atexit.register(self._write_info) self._verbose = verbose self._load_checkpoint_func = load_checkpoint_func self._save_checkpoint_func = save_checkpoint_func self._job_id = int(os.environ['GAVEL_JOB_ID']) self._worker_id = int(os.environ['GAVEL_WORKER_ID']) self._round_id = int(os.environ['GAVEL_ROUND_ID']) self._sched_addr = os.environ['GAVEL_SCHED_ADDR'] self._sched_port = int(os.environ['GAVEL_SCHED_PORT']) self._lock_file = os.path.join(checkpoint_dir, '.gavel.lock') self._lock = FileLock(self._lock_file) self._gavel_dir = os.path.join(checkpoint_dir, '.gavel') self._round_dir = \ os.path.join(self._gavel_dir, 'round={0}'.format(self._round_id)) self._worker_dir = \ os.path.join(self._round_dir, 'worker={0}'.format(self._worker_id)) with self._lock: if not os.path.isdir(self._gavel_dir): os.mkdir(self._gavel_dir) if not os.path.isdir(self._round_dir): os.mkdir(self._round_dir) self._log_file = os.path.join(self._round_dir, 'worker={0}.log'.format(self._worker_id)) self._init_logger() self._rpc_client = \ iterator_client.IteratorRpcClient(self._job_id, self._worker_id, self._sched_addr, self._sched_port, self._logger) self._steps = 0 self._duration = 0 self._synthetic_data = synthetic_data self._done = False if self._synthetic_data: self._initial_val = None self._lease = Lease(0, 0) self._update_lease(init=True) self._write_info() self._prev_time = None
def test_lease_tostr(self): leaseDict = { "hostname": "host1", "mac_address": "aa:bb:f8:43:f6:dd", "ip_address": "192.168.235.88", "lease_time": "500" } lease = Lease(leaseDict) self.assertEqual(str(lease), "AA:BB:F8:43:F6:DD=host1=192.168.235.88=500 ")
def readLeases(leaseSettingsFile): with open(leaseSettingsFile) as f: leasesFileJson = json.load(f) lease_entries = leasesFileJson['static_leases'] static_leases = [] for static_lease in sorted(lease_entries): lease_dict = lease_entries[static_lease] static_leases.append(Lease(lease_dict)) return static_leases
def test_leases(self): from ddwrtnvram import readNvram, writeNvram from nvramlogging import getTestLogger logger = getTestLogger() nvram = readNvram('./test/static.lease.23.bin', logger) router = Router(nvram) leases = router.leases self.assertEqual(len(leases), 2) self.assertEqual(leases[0].hostname, "raspberrypi") self.assertEqual(leases[1].hostname, "raspberrypi2") from lease import Lease printerLease = Lease({ "hostname": "printer", "mac_address": "aa:bb:f8:43:f6:dd", "ip_address": "192.168.235.88", "lease_time": "500" }) router.addLease(printerLease) leases = router.leases self.assertEqual(len(leases), 3) self.assertEqual(router.nvram['static_leasenum'], '3') self.assertEqual(leases[0].hostname, "printer") self.assertEqual(leases[1].hostname, "raspberrypi") self.assertEqual(leases[2].hostname, "raspberrypi2") self.assertEqual( router.leasesStr(), "AA:BB:F8:43:F6:DD=printer=192.168.235.88=500 B8:27:EB:5E:9C:C0=raspberrypi=192.168.23.41=3600 B8:27:EB:5E:9C:C1=raspberrypi2=192.168.23.42=3601 " ) # now write, read and then retest writeNvram('./test/test.static.leases.router.bin', router.nvram, logger) nvram = readNvram('./test/test.static.leases.router.bin', logger) router = Router(nvram) leases = router.leases self.assertEqual(len(leases), 3) self.assertEqual(router.nvram['static_leasenum'], '3') self.assertEqual(leases[1].hostname, "raspberrypi") self.assertEqual(leases[2].hostname, "raspberrypi2") self.assertEqual(leases[0].hostname, "printer")
def test_leases_router(self): logger = getTestLogger() nvram = readNvram("./test/static.lease.23.bin", logger) router = Router(nvram) s = router.leasesStr() shouldBe = 'B8:27:EB:5E:9C:C0=raspberrypi=192.168.23.41=3600 B8:27:EB:5E:9C:C1=raspberrypi2=192.168.23.42=3601 ' self.assertEqual(s, shouldBe) self.assertEqual(s, router.nvram['static_leases']) self.assertEqual(router.nvram['static_leasenum'], '2') leaseDict = { "hostname": "Host1", "mac_address": "aa:bb:f8:43:f6:dd", "ip_address": "192.168.235.88", "lease_time": "500" } lease = Lease(leaseDict) router.addLease(lease) self.assertEqual(len(router.leases), 3) self.assertEqual(router.nvram['static_leasenum'], '3') s = router.leasesStr() shouldBe = "AA:BB:F8:43:F6:DD=host1=192.168.235.88=500 B8:27:EB:5E:9C:C0=raspberrypi=192.168.23.41=3600 B8:27:EB:5E:9C:C1=raspberrypi2=192.168.23.42=3601 " self.assertEqual(s, shouldBe)
def test_lease_valid(self): lease = Lease() s = "aa:bb:f8:43:f6:dd=host1=192.168.235.88=500" lease.fromStr(s) self.assertTrue(lease.isValid()[0]) s = "rr:bb:f8:43:f6:dd=host1=192.168.235.88=500" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "aa:bb:f8:43:f6:dd=,..#$dhost1=192.168.235.88=500" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "aa:bb:f8:43:f6:dd=host1=192168.235.88=500" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "aa:bb:f8:43:f6:dd=host1=192.168.235.88=-1" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "aa:bb:f8:43:f6:dd=host1=192.168.235.88=2600000" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "===" lease.fromStr(s) self.assertFalse(lease.isValid()[0]) s = "AA:BB:CC:DD:EE:FF===" lease.fromStr(s) self.assertFalse(lease.isValid()[0])
def test_lease_from_str(self): lease = Lease() s = "aa:bb:f8:43:f6:dd=host1=192.168.235.88=500" lease.fromStr(s) self.assertEqual(str(lease), "AA:BB:F8:43:F6:DD=host1=192.168.235.88=500 ")
def test_lease_empty(self): lease = Lease() self.assertEqual(str(lease), "=== ")