From 527b1ca95b09e16735e98ac9c9edc3b00238096c Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 13 Mar 2022 18:55:00 +0000 Subject: [PATCH] Add a set of bridgedomain unit tests, including a fully formed correct one. Fix one bug found along the way! --- unittest/correct-bridgedomain.yaml | 48 ++++++++++++++++++++++++++++++ unittest/error-bridgedomain1.yaml | 19 ++++++++++++ unittest/error-bridgedomain2.yaml | 20 +++++++++++++ unittest/error-bridgedomain3.yaml | 22 ++++++++++++++ unittest/error-bridgedomain4.yaml | 21 +++++++++++++ validator/interface.py | 2 +- 6 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 unittest/correct-bridgedomain.yaml create mode 100644 unittest/error-bridgedomain1.yaml create mode 100644 unittest/error-bridgedomain2.yaml create mode 100644 unittest/error-bridgedomain3.yaml create mode 100644 unittest/error-bridgedomain4.yaml diff --git a/unittest/correct-bridgedomain.yaml b/unittest/correct-bridgedomain.yaml new file mode 100644 index 0000000..16b09cf --- /dev/null +++ b/unittest/correct-bridgedomain.yaml @@ -0,0 +1,48 @@ +test: + description: "A few correct examples of well formed bridgedomains" + errors: + count: 0 +--- +bondethernets: + BondEthernet0: + interfaces: [ GigabitEthernet3/0/0, GigabitEthernet3/0/1 ] + +interfaces: + GigabitEthernet1/0/0: + mtu: 3000 + GigabitEthernet1/0/1: + mtu: 3000 + + GigabitEthernet2/0/0: + mtu: 9000 + sub-interfaces: + 100: + mtu: 2000 + GigabitEthernet2/0/1: + mtu: 9000 + sub-interfaces: + 100: + mtu: 2000 + + GigabitEthernet3/0/0: + mtu: 9000 + GigabitEthernet3/0/1: + mtu: 9000 + + BondEthernet0: + mtu: 3000 + sub-interfaces: + 100: + mtu: 2000 + +bridgedomains: + bd10: + description: "Bridge Domain 10" + mtu: 3000 + interfaces: [ GigabitEthernet1/0/0, GigabitEthernet1/0/1, BondEthernet0 ] + bd11: + description: "Bridge Domain 11" + mtu: 2000 + interfaces: [ GigabitEthernet2/0/0.100, GigabitEthernet2/0/1.100, BondEthernet0.100 ] + lcp: "bvi11" + addresses: [ 192.0.2.1/24, 2001:db8::1/64 ] diff --git a/unittest/error-bridgedomain1.yaml b/unittest/error-bridgedomain1.yaml new file mode 100644 index 0000000..4f65a89 --- /dev/null +++ b/unittest/error-bridgedomain1.yaml @@ -0,0 +1,19 @@ +test: + description: "Interfaces put into the bridge, must exist as phy or sub-interface" + errors: + expected: + - "bridgedomain .* member .* doesn't exist" + count: 2 +--- +interfaces: + GigabitEthernet1/0/0: + description: "This is the wrong interface, the bridge has Gi1/0/1, not Gi1/0/0" + GigabitEthernet2/0/0: + sub-interfaces: + 101: + description: "This is the wrong interface, the bridge has Gi2/0/0.100, not Gi2/0/0.101" + +bridgedomains: + bd10: + description: "Bridge Domain 10" + interfaces: [ GigabitEthernet1/0/1, GigabitEthernet2/0/0.100 ] diff --git a/unittest/error-bridgedomain2.yaml b/unittest/error-bridgedomain2.yaml new file mode 100644 index 0000000..8248641 --- /dev/null +++ b/unittest/error-bridgedomain2.yaml @@ -0,0 +1,20 @@ +test: + description: "Interfaces put into the bridge, can't be L3 (so cannot have an LCP)" + errors: + expected: + - "bridgedomain .* member .* has an LCP" + count: 3 +--- +interfaces: + GigabitEthernet1/0/0: + lcp: "e1-0-0" + GigabitEthernet2/0/0: + lcp: "e2-0-0" + sub-interfaces: + 101: + lcp: "v101" + +bridgedomains: + bd10: + description: "Bridge Domain 10" + interfaces: [ GigabitEthernet1/0/0, GigabitEthernet2/0/0, GigabitEthernet2/0/0.101 ] diff --git a/unittest/error-bridgedomain3.yaml b/unittest/error-bridgedomain3.yaml new file mode 100644 index 0000000..6a08b71 --- /dev/null +++ b/unittest/error-bridgedomain3.yaml @@ -0,0 +1,22 @@ +test: + description: "Interfaces put into the bridge, can't be L3 (so cannot have an address)" + errors: + expected: + - "interface .* has adddress.* but no LCP" + - "sub-interface .* has address.* but .* does not have LCP" + - "bridgedomain .* member .* has an address" + count: 6 +--- +interfaces: + GigabitEthernet1/0/0: + addresses: [ 192.0.2.1/29 ] + GigabitEthernet2/0/0: + addresses: [ 192.0.2.9/29 ] + sub-interfaces: + 101: + addresses: [ 192.0.2.17/29 ] + +bridgedomains: + bd10: + description: "Bridge Domain 10" + interfaces: [ GigabitEthernet1/0/0, GigabitEthernet2/0/0, GigabitEthernet2/0/0.101 ] diff --git a/unittest/error-bridgedomain4.yaml b/unittest/error-bridgedomain4.yaml new file mode 100644 index 0000000..30b37ed --- /dev/null +++ b/unittest/error-bridgedomain4.yaml @@ -0,0 +1,21 @@ +test: + description: "In a BridgeDomain, all members must have the same MTU as the bridge itself" + errors: + expected: + - "bridgedomain .* member .* has MTU (2000|3000|500), while bridge has 1500" + count: 3 +--- +interfaces: + GigabitEthernet1/0/0: + mtu: 2000 + GigabitEthernet2/0/0: + mtu: 3000 + sub-interfaces: + 101: + mtu: 500 + +bridgedomains: + bd10: + description: "Bridge Domain 10" + mtu: 1500 + interfaces: [ GigabitEthernet1/0/0, GigabitEthernet2/0/0, GigabitEthernet2/0/0.101 ] diff --git a/validator/interface.py b/validator/interface.py index b30525f..cccf976 100644 --- a/validator/interface.py +++ b/validator/interface.py @@ -215,7 +215,7 @@ def get_lcp(yaml, ifname): return iface['lcp'] if not is_l3(yaml, ifname): return None - if not 'lcp' in parent_iface: + if parent_iface and not 'lcp' in parent_iface: return None if not 'encapsulation' in iface: if not '.' in ifname: