#!/usr/bin/env python3 # # Copyright (C) 2020 VyOS maintainers and contributors # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 or later as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # 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 class EthernetInterfaceTest(BasicInterfaceTest.BaseTest): def setUp(self): super().setUp() self._base_path = ['interfaces', 'ethernet'] self._test_ip = True self._test_mtu = True self._test_vlan = True self._test_qinq = True self._test_ipv6 = True self._interfaces = [] # we need to filter out VLAN interfaces identified by a dot (.) # in their name - just in case! if 'TEST_ETH' in os.environ: tmp = os.environ['TEST_ETH'].split() self._interfaces = tmp else: for tmp in Section.interfaces("ethernet"): if not '.' in tmp: self._interfaces.append(tmp) def test_dhcp_disable(self): """ When interface is configured as admin down, it must be admin down even """ for interface in self._interfaces: self.session.set(self._base_path + [interface, 'disable']) for option in self._options.get(interface, []): self.session.set(self._base_path + [interface] + option.split()) # Also enable DHCP (ISC DHCP always places interface in admin up # state so we check that we do not start DHCP client. # https://phabricator.vyos.net/T2767 self.session.set(self._base_path + [interface, 'address', 'dhcp']) self.session.commit() # Validate interface state for interface in self._interfaces: with open(f'/sys/class/net/{interface}/flags', 'r') as f: flags = f.read() self.assertEqual(int(flags, 16) & 1, 0) if __name__ == '__main__': unittest.main()