#!/usr/bin/env python3
"""DHCP Basic

This is a very basic DHCP test that requests an IPv4 lease
from a DHCP server and checks that the lease is set on the
interface.

"""

import infamy, infamy.dhcp
import infamy.iface as iface
from infamy.util import until

with infamy.Test() as test:
    ADDRESS = '10.0.0.42'

    with test.step("Initialize"):
        env = infamy.Env()
        client = env.attach("client", "mgmt")
        _, host = env.ltop.xlate("host", "data")

    with infamy.IsolatedMacVlan(host) as netns:
        netns.addip("10.0.0.1")
        with infamy.dhcp.Server(netns, ip=ADDRESS):
            _, port = env.ltop.xlate("client", "data")
            config = {
                "interfaces": {
                    "interface": [{
                        "name": f"{port}",
                        "ipv4": {
                            "infix-dhcp-client:dhcp": {}
                        }
                    }]
                }
            }
            client.put_config_dict("ietf-interfaces", config)

            with test.step("Verify client lease for 10.0.0.42"):
                until(lambda: iface.address_exist(client, port, ADDRESS))

    test.succeed()
