diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-07-17 22:06:45 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-07-17 22:06:56 +0200 |
commit | 511e5aac08e84864dd9c7c1f7992bdbc7d613d47 (patch) | |
tree | e24ab515e8982fb387304cdbabc9569ce9547703 /scripts | |
parent | ded73c194266ee0121b2c4c06dcd78fed0758f81 (diff) | |
download | vyos-1x-511e5aac08e84864dd9c7c1f7992bdbc7d613d47.tar.gz vyos-1x-511e5aac08e84864dd9c7c1f7992bdbc7d613d47.zip |
bond: verify member interfaces are properly enslaved
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/cli/test_interfaces_bonding.py | 35 |
1 files changed, 19 insertions, 16 deletions
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 <http://www.gnu.org/licenses/>. +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() |