| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | package l2topology |
| 4 | |
| 5 | import ( |
| 6 | "testing" |
| 7 | |
| 8 | "github.com/stretchr/testify/require" |
| 9 | ) |
| 10 | |
| 11 | func TestCSVToTopologySet_NormalizesAndDeduplicates(t *testing.T) { |
| 12 | set := csvToTopologySet(" LLDP, cdp , , lldp, STP ") |
| 13 | require.Equal(t, map[string]struct{}{ |
| 14 | "lldp": {}, |
| 15 | "cdp": {}, |
| 16 | "stp": {}, |
| 17 | }, set) |
| 18 | } |
| 19 | |
| 20 | func TestCanonicalAddrType_PrefersIPFamilyAndFallsBack(t *testing.T) { |
| 21 | require.Equal(t, "ipv4", canonicalAddrType("", "10.0.0.1")) |
| 22 | require.Equal(t, "ipv6", canonicalAddrType("ipv4", "2001:db8::1")) |
| 23 | require.Equal(t, "other", canonicalAddrType(" Other ", "not-an-ip")) |
| 24 | require.Equal(t, "", canonicalAddrType("", "not-an-ip")) |
| 25 | } |
| 26 | |
| 27 | func TestCanonicalARPProtocol_DefaultsToARP(t *testing.T) { |
| 28 | require.Equal(t, "arp", canonicalARPProtocol("")) |
| 29 | require.Equal(t, "arp", canonicalARPProtocol(" ARP ")) |
| 30 | require.Equal(t, "nd", canonicalARPProtocol(" ND ")) |
| 31 | require.Equal(t, "arp", canonicalARPProtocol("bogus")) |
| 32 | } |
| 33 | |
| 34 | func TestDeriveRemoteDeviceID_PreferenceOrder(t *testing.T) { |
| 35 | require.Equal(t, "switch-a", deriveRemoteDeviceID("Switch-A.", "00:11:22:33:44:55", "10.0.0.1", "fallback")) |
| 36 | require.Equal(t, "chassis-001122334455", deriveRemoteDeviceID("", "00:11:22:33:44:55", "10.0.0.1", "fallback")) |
| 37 | require.Equal(t, "ip-2001-db8--1", deriveRemoteDeviceID("", "", "2001:db8::1", "fallback")) |
| 38 | require.Equal(t, "fallback-host", deriveRemoteDeviceID("", "", "", "Fallback-Host.")) |
| 39 | require.Equal(t, "discovered-unknown", deriveRemoteDeviceID("", "", "", "")) |
| 40 | } |
| 41 | |
| 42 | func TestCanonicalToken_Strips0xPrefix(t *testing.T) { |
| 43 | require.Equal(t, "001122334455", canonicalToken("0x00:11:22:33:44:55")) |
| 44 | require.Equal(t, "001122334455", canonicalToken("00:11:22:33:44:55")) |
| 45 | require.Equal(t, deriveRemoteDeviceID("", "0x00:11:22:33:44:55", "", ""), deriveRemoteDeviceID("", "00:11:22:33:44:55", "", "")) |
| 46 | } |
| 47 | |
| 48 | func TestNormalizeLLDPPortHelpers_NormalizeBySubtype(t *testing.T) { |
| 49 | require.Equal(t, "001122334455", normalizeLLDPPortIDForMatch("00:11:22:33:44:55", "macAddress")) |
| 50 | require.Equal(t, "10.0.0.1", normalizeLLDPPortIDForMatch("0a000001", "networkAddress")) |
| 51 | require.Equal(t, "Gi0/1", normalizeLLDPPortIDForMatch(" Gi0/1 ", "interfaceName")) |
| 52 | require.Equal(t, "mac", normalizeLLDPPortSubtypeForMatch("3")) |
| 53 | require.Equal(t, "network", normalizeLLDPPortSubtypeForMatch("networkAddress")) |
| 54 | require.Equal(t, "local", normalizeLLDPPortSubtypeForMatch(" local ")) |
| 55 | } |
| 56 | |
| 57 | func TestNormalizeLLDPChassisAndMACToken(t *testing.T) { |
| 58 | require.Equal(t, "10.0.0.1", normalizeLLDPChassisForMatch("0a000001")) |
| 59 | require.Equal(t, "001122334455", normalizeLLDPChassisForMatch("00:11:22:33:44:55")) |
| 60 | require.Equal(t, "switch-a", normalizeLLDPChassisForMatch("switch-a")) |
| 61 | require.Equal(t, "001122334455", canonicalLLDPMACToken("0x001122334455")) |
| 62 | require.Equal(t, "", canonicalLLDPMACToken("001122")) |
| 63 | } |
| 64 | |
| 65 | func TestCanonicalBridgeAddr_RejectsAllZeroMAC(t *testing.T) { |
| 66 | require.Equal(t, "00:11:22:33:44:55", canonicalBridgeAddr("00:00:00:00:00:00", "00:11:22:33:44:55")) |
| 67 | require.Equal(t, "", canonicalBridgeAddr("00:00:00:00:00:00", "00:00:00:00:00:00")) |
| 68 | } |