Exemple #1
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.client_id = 'bogus'
     self.assertEqual(
         ("'bogus' is not a valid string of hexadecimal digits", ),
         cm.exception.args)
Exemple #2
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertIsNone(x.hostname)
     x.hostname = 'example.org'
     self.assertEqual('example.org', x.hostname)
     x.hostname = None
     self.assertIsNone(x.hostname)
Exemple #3
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual(False, x.fqdn_fwd)
     x.fqdn_fwd = True
     self.assertEqual(True, x.fqdn_fwd)
     x.fqdn_fwd = False
     self.assertEqual(False, x.fqdn_fwd)
Exemple #4
0
 def test_lease4_ok(self):
     h = kea.CalloutHandle(kea.CalloutManager())
     x = kea.Lease4()
     x.addr = '1.2.3.4'
     self.assertEqual(1, x.use_count)
     self.assertIsNone(h.setArgument('lease4', x))
     self.assertEqual(2, x.use_count)
     self.assertEqual('1.2.3.4', h.getArgument('lease4').addr)
Exemple #5
0
 def test_ok(self):
     x = kea.Lease4()
     self.assertIs(x, x.setContext('foo'))
     self.assertIs(x, x.setContext(2))
     self.assertIs(x, x.setContext(True))
     self.assertIs(x, x.setContext([1, 'foo']))
     self.assertIs(x, x.setContext({'foo': 'bar'}))
     self.assertIs(x, x.setContext(None))
Exemple #6
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.addr = 'bogus'
     self.assertEqual((
         "Failed to convert string to address 'bogus': Invalid argument", ),
                      cm.exception.args)
     with self.assertRaises(TypeError) as cm:
         x.addr = 0
     self.assertEqual(('The addr attribute value must be a str', ),
                      cm.exception.args)
Exemple #7
0
 def test_ok(self):
     x = kea.Lease4()
     self.assertIsNone(x.getContext())
     x.setContext(None)
     self.assertIsNone(x.getContext())
     x.setContext('foo')
     self.assertEqual('foo', x.getContext())
     x.setContext(2)
     self.assertEqual(2, x.getContext())
     x.setContext(True)
     self.assertEqual(True, x.getContext())
     x.setContext([1, 'foo'])
     self.assertEqual([1, 'foo'], x.getContext())
     x.setContext({'foo': 'bar'})
     self.assertEqual({'foo': 'bar'}, x.getContext())
Exemple #8
0
 def test_ok(self):
     x = kea.Lease4()
     x.hwaddr = '01:02:03:04:05:06'
     self.assertEqual(
         {
             'cltt': 0,
             'fqdn-fwd': False,
             'fqdn-rev': False,
             'hostname': '',
             'hw-address': '01:02:03:04:05:06',
             'ip-address': '0.0.0.0',
             'state': 0,
             'subnet-id': 0,
             'valid-lft': 0
         }, x.toElement())
     x.cltt = 3600
     x.fqdn_fwd = x.fqdn_rev = True
     x.hostname = 'example.com'
     x.addr = '192.168.0.1'
     x.state = 3
     x.subnet_id = 4
     x.valid_lft = 1800
     x.client_id = '02:03:04:05:06:07'
     self.assertEqual(
         {
             'client-id': '02:03:04:05:06:07',
             'cltt': 3600,
             'fqdn-fwd': True,
             'fqdn-rev': True,
             'hostname': 'example.com',
             'hw-address': '01:02:03:04:05:06',
             'ip-address': '192.168.0.1',
             'state': 3,
             'subnet-id': 4,
             'valid-lft': 1800
         }, x.toElement())
Exemple #9
0
 def test_ok(self):
     x = kea.Lease4()
     self.assertEqual(1, x.use_count)
Exemple #10
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.fqdn_rev = 'bogus'
     self.assertEqual(('The fqdn_rev attribute value must be a bool', ),
                      cm.exception.args)
Exemple #11
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.subnet_id = 'bogus'
     self.assertEqual(('The subnet_id attribute value must be an int', ),
                      cm.exception.args)
Exemple #12
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual(0, x.subnet_id)
     x.subnet_id = 5
     self.assertEqual(5, x.subnet_id)
Exemple #13
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual(0, x.cltt)
     x.cltt = 3600
     self.assertEqual(3600, x.cltt)
Exemple #14
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual(0, x.valid_lft)
     x.valid_lft = 3600
     self.assertEqual(3600, x.valid_lft)
Exemple #15
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual('0.0.0.0', x.addr)
     x.addr = '192.168.0.1'
     self.assertEqual('192.168.0.1', x.addr)
Exemple #16
0
 def test_empty(self):
     x = kea.Lease4()
     with self.assertRaises(RuntimeError) as cm:
         self.assertEqual({}, x.toElement())
     self.assertIsInstance(cm.exception, RuntimeError)
     self.assertEqual(("hwaddr must not be empty", ), cm.exception.args)
Exemple #17
0
def parse_lease4(args):
    lease = kea.Lease4()
    if not isinstance(args, dict):
        raise CommandError("parameters missing or is not a map")
    lease.addr = get_string_arg(args, 'ip-address')
    lease.hwaddr = get_string_arg(args, 'hw-address')
    subnet_id = get_int_arg(args, 'subnet-id', 0)
    cfg = kea.CfgMgr().getCurrentCfg()
    if subnet_id:
        subnet = cfg.getCfgSubnets4().getSubnet(subnet_id)
        if not subnet:
            raise CommandError(
                'no IPv4 subnet with subnet-id=%d currently configured' %
                subnet_id)
        if not subnet.inRange(lease.addr):
            raise CommandError(
                'address %s does not belong to subnet %s, subnet-id=%s' %
                (lease.addr, subnet.toText(), subnet_id))
    else:
        subnet = cfg.getCfgSubnets4().selectSubnet(lease.addr)
        if not subnet:
            raise CommandError(
                'subnet-id not specified and failed to find a subnet for address %s'
                % lease.addr)
        subnet_id = subnet.getID()
    lease.subnet_id = subnet_id
    client_id = get_string_arg(args, 'client-id', None)
    if client_id is not None:
        lease.client_id = client_id
    valid_lft = get_int_arg(args, 'valid-lft', None)
    if valid_lft is None:
        valid_lft = subnet.getValid()
    lease.valid_lft = valid_lft
    expire = get_int_arg(args, 'expire', None)
    if expire is not None:
        if expire <= 0:
            raise CommandError(
                'expiration time must be positive for address %s' % lease.addr)
        if expire < valid_lft:
            raise CommandError(
                'expiration time must be greater than valid lifetime for address %s'
                % lease.addr)
        cltt = expire - valid_lft
    else:
        cltt = int(time.time())
    lease.cltt = cltt
    lease.fqdn_fwd = get_bool_arg(args, 'fqdn-fwd', False)
    lease.fqdn_rev = get_bool_arg(args, 'fqdn-rev', False)
    lease.hostname = get_string_arg(args, 'hostname', None)
    if lease.hostname and (lease.fqdn_fwd or lease.fqdn_rev):
        raise CommandError(
            'no hostname specified and either forward or reverse'
            ' fqdn was set to true')
    lease.state = get_int_arg(args, 'state', 0)
    if lease.state < 0 or lease.state > kea.STATE_EXPIRED_RECLAIMED:
        raise CommandError(
            'invalid state %s: must be 0 (default), 1 (declined),'
            ' or 2 (expired-reclaimed)' % lease.state)
    ctx = get_map_arg(args, 'user-context', {})
    comment = get_string_arg(args, 'comment', None)
    if comment is not None:
        if 'comment' in ctx:
            raise CommandError(
                "duplicated comment entry '%s' in user context '%s'" %
                (comment, ctx))
        ctx['comment'] = comment
    if ctx:
        lease.setContext(ctx)
    return lease
Exemple #18
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.hostname = 3
     self.assertEqual(('The hostname attribute value must be a str', ),
                      cm.exception.args)
Exemple #19
0
 def test_badarg_count(self):
     x = kea.Lease4()
     self.assert_method_no_arguments(x.getContext)
Exemple #20
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertIsNone(x.client_id)
     x.client_id = '01:02:03:04:05:06'
     self.assertEqual('01:02:03:04:05:06', x.client_id)
Exemple #21
0
 def test_badarg_count(self):
     x = kea.Lease4()
     self.assert_method_one_arg_no_keywords(x.setContext)
Exemple #22
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertEqual(0, x.state)
     x.state = 5
     self.assertEqual(5, x.state)
Exemple #23
0
 def test_getset(self):
     x = kea.Lease4()
     self.assertIsNone(x.hwaddr)
     x.hwaddr = '01:02:03:04:05:06'
     self.assertEqual('01:02:03:04:05:06', x.hwaddr)
Exemple #24
0
 def test_badarg_count(self):
     x = kea.Lease4()
     self.assert_method_no_arguments(x.toElement)
Exemple #25
0
 def test_bad_type(self):
     x = kea.Lease4()
     with self.assertRaises(TypeError) as cm:
         x.hwaddr = 'bogus'
     self.assertEqual(("invalid format of the decoded string 'bogus'", ),
                      cm.exception.args)