from swsscommon import swsscommon
import os
import re
import time
import json
import pytest

def test_DefaultRoute(dvs, testlog):

    dvs.copy_file("/etc/frr/", "bgp/files/default_route/bgpd.conf")
    dvs.runcmd("supervisorctl start bgpd")
    dvs.runcmd("ip addr add 10.10.10.0/31 dev Ethernet0")
    dvs.runcmd("config interface startup Ethernet0")
    dvs.runcmd("ip route del 0.0.0.0/0")
    dvs.runcmd("vtysh -c \"confgure terminal\" -c \"ip route 0.0.0.0/0 via 172.17.0.1 200\"")

    dvs.servers[0].runcmd("ip addr add 10.10.10.1/31 dev eth0")
    dvs.servers[0].runcmd("ifconfig eth0 up")

    time.sleep(5)

    print(dvs.runcmd("supervisorctl status"))

    p = dvs.servers[0].runcmd_async("exabgp -d bgp/files/default_route/default_route.conf")

    time.sleep(10)

    (exit_code, output) = dvs.runcmd(["redis-cli", "hgetall", "ROUTE_TABLE:0.0.0.0/0"])
    print(exit_code, output)

    # make sure 10.10.10.1 is the correct next hop for default route
    assert "10.10.10.1" in output

    # insert default route for table default
    dvs.runcmd("ip route add default via 172.17.0.1 table default")

    (exit_code, output) = dvs.runcmd(["redis-cli", "hgetall", "ROUTE_TABLE:0.0.0.0/0"])
    print(exit_code, output)

    time.sleep(10)
    # make sure 10.10.10.1 is still the correct next hop for default route
    assert "10.10.10.1" in output

    p.terminate()
    p = p.wait()