From 1f07f7eadfae760ed59a2b5b086b60a48590f1b9 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 20 Mar 2022 22:17:41 +0000 Subject: [PATCH] Add unit tests for bondethernet --- unittest/test_bondethernet.yaml | 24 ++++++++++++++++++++++++ validator/bondethernet.py | 13 +++++++++++++ validator/interface.py | 13 ------------- validator/test_bondethernet.py | 14 ++++++++++++++ 4 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 unittest/test_bondethernet.yaml create mode 100644 validator/test_bondethernet.py diff --git a/unittest/test_bondethernet.yaml b/unittest/test_bondethernet.yaml new file mode 100644 index 0000000..7086f1d --- /dev/null +++ b/unittest/test_bondethernet.yaml @@ -0,0 +1,24 @@ +bondethernets: + BondEthernet0: + interfaces: [ GigabitEthernet1/0/0, GigabitEthernet1/0/1 ] + +interfaces: + GigabitEthernet1/0/0: + mtu: 3000 + GigabitEthernet1/0/1: + mtu: 3000 + + GigabitEthernet2/0/0: + mtu: 3000 + sub-interfaces: + 100: + mtu: 2000 + + BondEthernet0: + mtu: 3000 + lcp: "be012345678" + addresses: [ 192.0.2.1/29, 2001:db8::1/64 ] + sub-interfaces: + 100: + mtu: 2000 + addresses: [ 192.0.2.9/29, 2001:db8:1::1/64 ] diff --git a/validator/bondethernet.py b/validator/bondethernet.py index 7588a3a..d78f536 100644 --- a/validator/bondethernet.py +++ b/validator/bondethernet.py @@ -29,6 +29,19 @@ def get_by_name(yaml, ifname): return None +def is_bond_member(yaml, ifname): + """ Returns True if this interface is a member of a BondEthernet """ + if not 'bondethernets' in yaml: + return False + + for bond, iface in yaml['bondethernets'].items(): + if not 'interfaces' in iface: + continue + if ifname in iface['interfaces']: + return True + return False + + def validate_bondethernets(yaml): result = True msgs = [] diff --git a/validator/interface.py b/validator/interface.py index b2368f4..1185890 100644 --- a/validator/interface.py +++ b/validator/interface.py @@ -80,19 +80,6 @@ def has_address(yaml, ifname): return 'addresses' in iface -def is_bond_member(yaml, ifname): - """ Returns True if this interface is a member of a BondEthernet """ - if not 'bondethernets' in yaml: - return False - - for bond, iface in yaml['bondethernets'].items(): - if not 'interfaces' in iface: - continue - if ifname in iface['interfaces']: - return True - return False - - def get_bridge_interfaces(yaml): """ Returns a list of all interfaces that are bridgedomain members """ diff --git a/validator/test_bondethernet.py b/validator/test_bondethernet.py new file mode 100644 index 0000000..41ce2d1 --- /dev/null +++ b/validator/test_bondethernet.py @@ -0,0 +1,14 @@ +import unittest +import yaml +import validator.bondethernet as bondethernet + +class TestBondEthernetMethods(unittest.TestCase): + def setUp(self): + with open("unittest/test_bondethernet.yaml", "r") as f: + self.cfg = yaml.load(f, Loader = yaml.FullLoader) + + def test_members(self): + self.assertTrue(bondethernet.is_bond_member(self.cfg, "GigabitEthernet1/0/0")) + self.assertTrue(bondethernet.is_bond_member(self.cfg, "GigabitEthernet1/0/1")) + self.assertFalse(bondethernet.is_bond_member(self.cfg, "GigabitEthernet2/0/0")) + self.assertFalse(bondethernet.is_bond_member(self.cfg, "GigabitEthernet2/0/0.100"))