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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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)
Exemplo n.º 9
0
    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])
Exemplo n.º 10
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 ")
Exemplo n.º 11
0
 def test_lease_empty(self):
     lease = Lease()
     self.assertEqual(str(lease), "=== ")