diff --git a/unittest/test_loopback.yaml b/unittest/test_loopback.yaml new file mode 100644 index 0000000..2030dfb --- /dev/null +++ b/unittest/test_loopback.yaml @@ -0,0 +1,12 @@ +loopbacks: + loop0: + description: "Loopback, no config" + loop1: + description: "Loopback, both LCP and address" + mtu: 2000 + lcp: "loop56789012345" + addresses: [ 192.0.2.1/29, 2001:db8::1/64 ] + loop2: + description: "Loopback, invalid because it has an address but no LCP" + mtu: 2000 + addresses: [ 192.0.2.9/29, 2001:db8:1::1/64 ] diff --git a/validator/loopback.py b/validator/loopback.py index 32330eb..eee97af 100644 --- a/validator/loopback.py +++ b/validator/loopback.py @@ -19,6 +19,14 @@ class NullHandler(logging.Handler): def emit(self, record): pass +def get_loopbacks(yaml): + """ Return a list of all loopbacks. """ + ret = [] + if 'loopbacks' in yaml: + for ifname, iface in yaml['loopbacks'].items(): + ret.append(ifname) + return ret + def get_by_name(yaml, ifname): """ Return the loopback by name, if it exists. Return None otherwise. """ try: @@ -26,7 +34,7 @@ def get_by_name(yaml, ifname): return ifname, yaml['loopbacks'][ifname] except: pass - return None + return None, None def validate_loopbacks(yaml): diff --git a/validator/test_loopback.py b/validator/test_loopback.py new file mode 100644 index 0000000..2ec6ae3 --- /dev/null +++ b/validator/test_loopback.py @@ -0,0 +1,26 @@ +import unittest +import yaml +import validator.loopback as loopback + +class TestLoopbackMethods(unittest.TestCase): + def setUp(self): + with open("unittest/test_loopback.yaml", "r") as f: + self.cfg = yaml.load(f, Loader = yaml.FullLoader) + + def test_get_by_name(self): + ifname, iface = loopback.get_by_name(self.cfg, "loop1") + self.assertIsNotNone(iface) + self.assertEqual("loop1", ifname) + self.assertEqual(iface['mtu'], 2000) + + ifname, iface = loopback.get_by_name(self.cfg, "loop-noexist") + self.assertIsNone(ifname) + self.assertIsNone(iface) + + def test_enumerators(self): + ifs = loopback.get_loopbacks(self.cfg) + self.assertEqual(len(ifs), 3) + self.assertIn("loop0", ifs) + self.assertIn("loop1", ifs) + self.assertIn("loop2", ifs) + self.assertNotIn("loop-noexist", ifs)