From 511e5aac08e84864dd9c7c1f7992bdbc7d613d47 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Fri, 17 Jul 2020 22:06:45 +0200 Subject: bond: verify member interfaces are properly enslaved --- scripts/cli/test_interfaces_bonding.py | 35 ++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'scripts/cli/test_interfaces_bonding.py') diff --git a/scripts/cli/test_interfaces_bonding.py b/scripts/cli/test_interfaces_bonding.py index bfadc4a9d..b4251fa15 100755 --- a/scripts/cli/test_interfaces_bonding.py +++ b/scripts/cli/test_interfaces_bonding.py @@ -14,46 +14,49 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import os import unittest from base_interfaces_test import BasicInterfaceTest from vyos.ifconfig import Section from vyos.configsession import ConfigSessionError +from vyos.util import read_file class BondingInterfaceTest(BasicInterfaceTest.BaseTest): def setUp(self): super().setUp() self._base_path = ['interfaces', 'bonding'] - self._test_mtu = True self._interfaces = ['bond0'] + self._test_mtu = True + self._test_vlan = True + self._test_qinq = True - def test_add_remove_member(self): + def test_add_member(self): members = [] # we need to filter out VLAN interfaces identified by a dot (.) # in their name - just in case! - for tmp in Section.interfaces("ethernet"): - if not '.' in tmp: - members.append(tmp) - - for intf in self._interfaces: + if 'TEST_ETH' in os.environ: + members = os.environ['TEST_ETH'].split() + else: + for tmp in Section.interfaces("ethernet"): + if not '.' in tmp: + members.append(tmp) + + for interface in self._interfaces: + base = self._base_path + [interface] for member in members: # We can not enslave an interface when there is an address # assigned - take care here - or find them dynamically if a user # runs vyos-smoketest on his production device? - self.session.set(self._base_path + [intf, 'member', 'interface', member]) + self.session.set(base + ['member', 'interface', member]) self.session.commit() - # check validate() - we can only add existing interfaces - self.session.set(self._base_path + [intf, 'member', 'interface', 'eth99']) - with self.assertRaises(ConfigSessionError): - self.session.commit() - - # check if member deletion works as expected - self.session.delete(self._base_path + [intf, 'member']) - self.session.commit() + for interface in self._interfaces: + slaves = read_file(f'/sys/class/net/{interface}/bonding/slaves').split() + self.assertListEqual(slaves, members) if __name__ == '__main__': unittest.main() -- cgit v1.2.3