def test_translate_attrs_for_netbox_vlan_no(netbox_api_base): config.load(config_data=dict( main=dict(import_vlans="no", backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({ "switchport_mode": "TRUNK", "mode": "TRUNK", "allowed_vlans": ["HQ__111", "HQ__100"] }) assert_baseline assert "tagged_vlans" not in params assert "untagged_vlan" not in params params = intf.translate_attrs_for_netbox({ "switchport_mode": "ACCESS", "mode": "ACCESS", "access_vlan": "HQ__111" }) assert_baseline assert "tagged_vlans" not in params assert "untagged_vlan" not in params
def test_translate_attrs_for_nautobot_lag_member(nautobot_api_base): parent = NautobotInterface( device_name="HQ-CORE-SW01", name="ge-0/0/4", remote_id="ea085648-5684-4362-a8dd-edfa151faaec") nautobot_api_base.add(parent) config.load(config_data=dict( main=dict(import_vlans=False, backend="nautobot"))) intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") nautobot_api_base.add(intf) params = intf.translate_attrs_for_nautobot({ "is_lag_member": True, "parent": "HQ-CORE-SW01__ge-0/0/4" }) assert_baseline assert "lag" in params assert params["lag"] == "ea085648-5684-4362-a8dd-edfa151faaec" params = intf.translate_attrs_for_nautobot({ "is_lag_member": False, "parent": "HQ-CORE-SW01__ge-0/0/4" }) assert_baseline assert "lag" in params assert params["lag"] is None
def test_translate_attrs_for_netbox_type(netbox_api_base): config.load(config_data=dict( main=dict(import_vlans=True, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({ "is_lag": True, "is_virtual": True }) assert_baseline assert params["type"] == "lag" params = intf.translate_attrs_for_netbox({ "is_lag": False, "is_virtual": True }) assert_baseline assert params["type"] == "virtual" params = intf.translate_attrs_for_netbox({ "is_lag": False, "is_virtual": False }) assert_baseline assert params["type"] == "other"
def test_translate_attrs_for_netbox_lag_member(netbox_api_base): parent = NetboxInterface(device_name="HQ-CORE-SW01", name="ge-0/0/4", remote_id=50) netbox_api_base.add(parent) config.load(config_data=dict( main=dict(import_vlans=False, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({ "is_lag_member": True, "parent": "HQ-CORE-SW01__ge-0/0/4" }) assert_baseline assert "lag" in params assert params["lag"] == 50 params = intf.translate_attrs_for_netbox({ "is_lag_member": False, "parent": "HQ-CORE-SW01__ge-0/0/4" }) assert_baseline assert "lag" in params assert params["lag"] is None
def test_cleanup_port(nornir): """Validate that we are cleaning up the port from port name.""" config.load(config_data=dict(main=dict(backend="nautobot"), network=dict(fqdns=["test.com"]))) neighbors = Neighbors() neighbors.neighbors["intfa"].append( Neighbor(hostname="devicea", port="HundredGigE0/0/0/0")) neighbors.neighbors["intfb"].append( Neighbor(hostname="deviceb", port="TenGigE0/0/0/35/3")) neighbors.neighbors["intfc"].append( Neighbor(hostname="devicec", port="Xe-0/1/2")) neighbors.neighbors["intfd"].append( Neighbor(hostname="deviced", port="Ge-0/1/3.400")) neighbors.neighbors["intfe"].append( Neighbor(hostname="devicee", port="Eth2/10")) neighbors.neighbors["intff"].append( Neighbor(hostname="deviced", port="Xle-0/1/3:400")) results = (nornir.filter(name="houston").with_processors( [GetNeighbors()]).run(task=dispatch_get_neighbors, neighbors=neighbors.dict())) result = results["houston"][0].result[0].result assert "neighbors" in result assert result["neighbors"]["intfa"][0]["port"] == "HundredGigE0/0/0/0" assert result["neighbors"]["intfb"][0]["port"] == "TenGigE0/0/0/35/3" assert result["neighbors"]["intfc"][0]["port"] == "xe-0/1/2" assert result["neighbors"]["intfd"][0]["port"] == "ge-0/1/3.400" assert result["neighbors"]["intfe"][0]["port"] == "Eth2/10" assert result["neighbors"]["intff"][0]["port"] == "xle-0/1/3:400"
def test_load_batfish_intf_no_import_vlans_lag_members(network_importer_base, site_sfo, dev_spine1): adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) config.load(config_data=dict(main=dict(import_vlans=False, backend="nautobot"))) intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=LAG_MEMBER_1) assert isinstance(intf, Interface) assert intf.access_vlan is None assert intf.allowed_vlans == []
def test_add_batfish_interface_intf_serial(network_importer_base, site_sfo, dev_spine1): adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) config.load(config_data=dict(main=dict(backend="nautobot"))) intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=SERIAL_1) assert isinstance(intf, Interface) assert not intf.is_virtual assert not intf.is_lag assert not intf.is_lag_member
def test_load_batfish_interface_intf_lag(network_importer_base, site_sfo, dev_spine1): adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) config.load(config_data=dict(main=dict(backend="nautobot"))) intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=LAG_1) assert isinstance(intf, Interface) assert not intf.is_virtual assert intf.is_lag assert not intf.is_lag_member assert intf.allowed_vlans == ["sfo__10", "sfo__11", "sfo__12", "sfo__40"]
def test_translate_attrs_for_netbox_no_attrs(netbox_api_base): config.load(config_data=dict( main=dict(import_vlans=True, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({}) assert sorted(list( params.keys())) == ["description", "device", "lag", "name", "type"] assert params["name"] == "ge-0/0/0" assert params["device"] == 29 assert params["type"] == "other" assert params["lag"] is None assert params["description"] == ""
def test_translate_attrs_for_nautobot_no_attrs(nautobot_api_base): config.load(config_data=dict( main=dict(import_vlans=True, backend="nautobot"))) intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") nautobot_api_base.add(intf) params = intf.translate_attrs_for_nautobot({}) assert sorted(list( params.keys())) == ["description", "device", "lag", "name", "type"] assert params["name"] == "ge-0/0/0" assert params["device"] == "e0633a07-c3e2-41b0-a1df-4627392acf0a" assert params["type"] == "other" assert params["lag"] is None assert params["description"] == ""
def test_load_batfish_interface_description(network_importer_base, site_sfo, dev_spine1): """Check if the description is properly processed and stripped of whitespaces.""" adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) config.load(config_data=dict(main=dict(backend="nautobot"))) data = LOOPBACK_1 data["description"] = " intf1 description " intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=data) assert isinstance(intf, Interface) assert intf.is_virtual assert intf.description == "intf1 description"
def test_base(nornir): """Validate that the processor is working as expected with standard inputs.""" config.load(config_data=dict(main=dict(backend="nautobot"))) neighbors = Neighbors() neighbors.neighbors["intfa"].append( Neighbor(hostname="devicea", port="intfa")) neighbors.neighbors["intfb"].append( Neighbor(hostname="deviceb", port="intfa")) results = (nornir.filter(name="houston").with_processors( [GetNeighbors()]).run(task=dispatch_get_neighbors, neighbors=neighbors.dict())) result = results["houston"][0].result[0].result assert "neighbors" in result assert "intfa" in result["neighbors"]
def test_load_batfish_interface_intf_ether_sub(network_importer_base, site_sfo, dev_spine1): adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) config.load(config_data=dict(main=dict(backend="nautobot"))) intf = adapter.load_batfish_interface(site=site_sfo, device=dev_spine1, intf=L3_SUB_INTF_1) assert isinstance(intf, Interface) assert intf.is_virtual assert not intf.is_lag assert not intf.is_lag_member assert intf.allowed_vlans == ["sfo__201"] assert any("sfo__201" == str(obj) for obj in adapter.get_all("vlan"))
def test_cleanup_fqdn(nornir): """Validate that we are cleaning up the FQDN from device name.""" config.load(config_data=dict(main=dict(backend="nautobot"), network=dict(fqdns=["test.com"]))) neighbors = Neighbors() neighbors.neighbors["intfa"].append( Neighbor(hostname="devicea.test.com", port="intfa")) neighbors.neighbors["intfb"].append( Neighbor(hostname="deviceb", port="intfa")) results = (nornir.filter(name="houston").with_processors( [GetNeighbors()]).run(task=dispatch_get_neighbors, neighbors=neighbors.dict())) result = results["houston"][0].result[0].result assert "neighbors" in result assert result["neighbors"]["intfa"][0]["hostname"] == "devicea"
def test_cleanup_mac_address(nornir): """Validate that we are removing neighbor with a mac address name.""" config.load(config_data=dict(main=dict(backend="nautobot"), network=dict(fqdns=["test.com"]))) neighbors = Neighbors() neighbors.neighbors["intfa"].append( Neighbor(hostname="devicea.test.com", port="intfa")) neighbors.neighbors["intfb"].append( Neighbor(hostname="f8:f2:1e:89:3c:61", port="intfa")) results = (nornir.filter(name="houston").with_processors( [GetNeighbors()]).run(task=dispatch_get_neighbors, neighbors=neighbors.dict())) result = results["houston"][0].result[0].result assert "neighbors" in result assert "intfb" not in result["neighbors"]
def test_load_batfish_ipaddress_w_ip_w_prefix_no_vlan(network_importer_base, site_sfo, dev_spine1): adapter = network_importer_base adapter.add(site_sfo) adapter.add(dev_spine1) intf1 = Interface(name="et-0/0/0", device_name=dev_spine1.name) config.load(config_data=dict( main=dict(backend="nautobot", import_ips=True, import_prefixes=True))) ipaddr = adapter.load_batfish_ip_address(site=site_sfo, device=dev_spine1, interface=intf1, address="10.10.10.1/24") prefix = Prefix(prefix="10.10.10.0/24", site_name="sfo") assert isinstance(ipaddr, IPAddress) assert adapter.get(IPAddress, identifier=ipaddr.get_unique_id()) assert adapter.get(Prefix, identifier=prefix.get_unique_id())
def test_translate_attrs_for_netbox_description(netbox_api_base): config.load(config_data=dict( main=dict(import_vlans=True, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({}) assert_baseline assert "description" in params assert params["description"] == "" params = intf.translate_attrs_for_netbox({"description": "my_description"}) assert_baseline assert params["description"] == "my_description" params = intf.translate_attrs_for_netbox({"description": None}) assert_baseline assert params["description"] == "" assert isinstance(params["description"], str)
def test_translate_attrs_for_netbox_mode(netbox_api_base): config.load(config_data=dict( main=dict(import_vlans=True, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({}) assert_baseline assert "mode" not in params params = intf.translate_attrs_for_netbox({"switchport_mode": "ACCESS"}) assert_baseline assert params["mode"] == "access" params = intf.translate_attrs_for_netbox({"switchport_mode": "TRUNK"}) assert_baseline assert params["mode"] == "tagged" params = intf.translate_attrs_for_netbox( {"switchport_mode": "NOTSUPPORTED"}) assert_baseline assert "mode" not in params
def test_translate_attrs_for_nautobot_vlan(nautobot_api_base): vlan = NautobotVlan(vid=100, site_name="HQ", remote_id="601077ce-ac88-4b36-bbc7-23d655dc3958") nautobot_api_base.add(vlan) config.load(config_data=dict( main=dict(import_vlans=True, backend="nautobot"))) intf = NautobotInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") nautobot_api_base.add(intf) params = intf.translate_attrs_for_nautobot({}) assert_baseline assert "mode" not in params params = intf.translate_attrs_for_nautobot({ "switchport_mode": "ACCESS", "mode": "ACCESS", "access_vlan": "HQ__111" }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] == "464a2de3-fd5e-4b65-a58d-e0a2a617c12e" params = intf.translate_attrs_for_nautobot({ "switchport_mode": "ACCESS", "mode": "ACCESS", "access_vlan": None }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] is None params = intf.translate_attrs_for_nautobot({ "switchport_mode": "ACCESS", "mode": "ACCESS" }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] is None params = intf.translate_attrs_for_nautobot({ "switchport_mode": "TRUNK", "mode": "TRUNK", "allowed_vlans": ["HQ__111", "HQ__100"] }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == [ "464a2de3-fd5e-4b65-a58d-e0a2a617c12e", "601077ce-ac88-4b36-bbc7-23d655dc3958" ] params = intf.translate_attrs_for_nautobot({ "switchport_mode": "TRUNK", "mode": "TRUNK" }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == [] params = intf.translate_attrs_for_nautobot({ "switchport_mode": "TRUNK", "mode": "L3_SUB_VLAN" }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == []
def test_translate_attrs_for_netbox_vlan(netbox_api_base): vlan = NetboxVlan(vid=100, site_name="HQ", remote_id=30) netbox_api_base.add(vlan) config.load(config_data=dict( main=dict(import_vlans=True, backend="netbox"))) intf = NetboxInterface(device_name="HQ-CORE-SW02", name="ge-0/0/0") netbox_api_base.add(intf) params = intf.translate_attrs_for_netbox({}) assert_baseline assert "mode" not in params params = intf.translate_attrs_for_netbox({ "switchport_mode": "ACCESS", "mode": "ACCESS", "access_vlan": "HQ__111" }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] == 23 params = intf.translate_attrs_for_netbox({ "switchport_mode": "ACCESS", "mode": "ACCESS", "access_vlan": None }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] is None params = intf.translate_attrs_for_netbox({ "switchport_mode": "ACCESS", "mode": "ACCESS" }) assert_baseline assert params["mode"] == "access" assert params["untagged_vlan"] is None params = intf.translate_attrs_for_netbox({ "switchport_mode": "TRUNK", "mode": "TRUNK", "allowed_vlans": ["HQ__111", "HQ__100"] }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == [23, 30] params = intf.translate_attrs_for_netbox({ "switchport_mode": "TRUNK", "mode": "TRUNK" }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == [] params = intf.translate_attrs_for_netbox({ "switchport_mode": "TRUNK", "mode": "L3_SUB_VLAN" }) assert_baseline assert params["mode"] == "tagged" assert params["tagged_vlans"] == []