master
go 127 lines 4.53 KB
Raw
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 TestSortedTopologyPortNeighbors_NormalizesAndOrders(t *testing.T) {
12 neighbors := map[string]topologyPortNeighborStatus{
13 "b": {
14 Protocol: " CDP ",
15 RemoteDevice: " switch-b ",
16 RemotePort: " Gi0/2 ",
17 RemoteIP: " 10.0.0.2 ",
18 RemoteChassisID: "00:11:22:33:44:55",
19 RemoteCapabilities: []string{"router", "bridge", "router"},
20 },
21 "a": {
22 Protocol: " lldp ",
23 RemoteDevice: " switch-a ",
24 RemotePort: " Gi0/1 ",
25 RemoteIP: " 10.0.0.1 ",
26 RemoteChassisID: " aa:bb:cc:dd:ee:ff ",
27 RemoteCapabilities: []string{"bridge", "router", "bridge"},
28 },
29 "empty": {},
30 }
31
32 sorted := sortedTopologyPortNeighbors(neighbors)
33 require.Len(t, sorted, 2)
34
35 require.Equal(t, "cdp", sorted[0].Protocol)
36 require.Equal(t, "switch-b", sorted[0].RemoteDevice)
37 require.Equal(t, "Gi0/2", sorted[0].RemotePort)
38 require.Equal(t, "10.0.0.2", sorted[0].RemoteIP)
39 require.Equal(t, "00:11:22:33:44:55", sorted[0].RemoteChassisID)
40 require.Equal(t, []string{"bridge", "router"}, sorted[0].RemoteCapabilities)
41
42 require.Equal(t, "lldp", sorted[1].Protocol)
43 require.Equal(t, "switch-a", sorted[1].RemoteDevice)
44 require.Equal(t, "Gi0/1", sorted[1].RemotePort)
45 require.Equal(t, "10.0.0.1", sorted[1].RemoteIP)
46 require.Equal(t, "aa:bb:cc:dd:ee:ff", sorted[1].RemoteChassisID)
47 require.Equal(t, []string{"bridge", "router"}, sorted[1].RemoteCapabilities)
48 }
49
50 func TestBuildTopologyDevicePortStatusAttributes_RendersOptionalFields(t *testing.T) {
51 status := topologyDevicePortStatus{
52 IfIndex: 7,
53 IfName: "Gi0/7",
54 IfDescr: "Uplink",
55 IfAlias: "core",
56 MAC: "00:11:22:33:44:55",
57 SpeedBps: 1000000000,
58 LastChange: 12345,
59 Duplex: "full",
60 InterfaceType: "ethernetCsmacd",
61 AdminStatus: "up",
62 OperStatus: "up",
63 LinkMode: "trunk",
64 ModeConfidence: "high",
65 ModeSources: []string{"fdb", "stp"},
66 VLANIDs: []string{"100", "200"},
67 VLANs: []map[string]any{
68 {"vlan_id": "100", "tagged": true},
69 {"vlan_id": "200", "tagged": true, "vlan_name": "servers"},
70 },
71 TopologyRole: "switch_facing",
72 RoleConfidence: "high",
73 RoleSources: []string{"peer_link", "bridge_link"},
74 FDBMACCount: 3,
75 STPState: "forwarding",
76 Neighbors: []topologyPortNeighborStatus{
77 {
78 Protocol: "lldp",
79 RemoteDevice: "switch-b",
80 RemotePort: "Gi0/1",
81 RemoteIP: "10.0.0.2",
82 RemoteChassisID: "aa:bb:cc:dd:ee:ff",
83 RemoteCapabilities: []string{"bridge", "router"},
84 },
85 },
86 }
87
88 attrs := buildTopologyDevicePortStatusAttributes(status)
89 require.Equal(t, 7, attrs["if_index"])
90 require.Equal(t, "Gi0/7", attrs["if_name"])
91 require.Equal(t, "Uplink", attrs["if_descr"])
92 require.Equal(t, "core", attrs["if_alias"])
93 require.Equal(t, "00:11:22:33:44:55", attrs["mac"])
94 require.Equal(t, int64(1000000000), attrs["speed"])
95 require.Equal(t, int64(12345), attrs["last_change"])
96 require.Equal(t, "full", attrs["duplex"])
97 require.Equal(t, "trunk", attrs["link_mode"])
98 require.Equal(t, "high", attrs["link_mode_confidence"])
99 require.Equal(t, []string{"fdb", "stp"}, attrs["link_mode_sources"])
100 require.Equal(t, []string{"100", "200"}, attrs["vlan_ids"])
101 require.Equal(t, "switch_facing", attrs["topology_role"])
102 require.Equal(t, "high", attrs["topology_role_confidence"])
103 require.Equal(t, []string{"peer_link", "bridge_link"}, attrs["topology_role_sources"])
104 require.Equal(t, 3, attrs["fdb_mac_count"])
105 require.Equal(t, "forwarding", attrs["stp_state"])
106 require.Equal(t, "up", attrs["admin_status"])
107 require.Equal(t, "up", attrs["oper_status"])
108 require.Equal(t, "ethernetCsmacd", attrs["if_type"])
109
110 neighbors, ok := attrs["neighbors"].([]map[string]any)
111 require.True(t, ok)
112 require.Len(t, neighbors, 1)
113 require.Equal(t, "lldp", neighbors[0]["protocol"])
114 require.Equal(t, "switch-b", neighbors[0]["remote_device"])
115 require.Equal(t, "Gi0/1", neighbors[0]["remote_port"])
116 require.Equal(t, "10.0.0.2", neighbors[0]["remote_ip"])
117 require.Equal(t, "aa:bb:cc:dd:ee:ff", neighbors[0]["remote_chassis_id"])
118 require.Equal(t, []string{"bridge", "router"}, neighbors[0]["remote_capabilities"])
119
120 vlans, ok := attrs["vlans"].([]map[string]any)
121 require.True(t, ok)
122 require.Len(t, vlans, 2)
123 require.Equal(t, "100", vlans[0]["vlan_id"])
124 require.Equal(t, true, vlans[0]["tagged"])
125 require.Equal(t, "200", vlans[1]["vlan_id"])
126 require.Equal(t, "servers", vlans[1]["vlan_name"])
127 }