mirror of
https://github.com/virt-manager/virt-manager.git
synced 2024-12-24 21:34:47 +03:00
57e86259d8
This was the way the API had been heading, this just formalizes it.
221 lines
7.2 KiB
Python
221 lines
7.2 KiB
Python
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# 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, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
# MA 02110-1301 USA.
|
|
|
|
import os
|
|
import unittest
|
|
import logging
|
|
|
|
import virtinst.Interface
|
|
from virtinst.Interface import (Interface, InterfaceProtocol,
|
|
InterfaceProtocolIPAddress)
|
|
from tests import utils
|
|
|
|
conn = utils.open_testdriver()
|
|
datadir = "tests/interface-xml"
|
|
|
|
vlan_iface = conn.interfaceLookupByName("vlaneth1")
|
|
bond_iface = conn.interfaceLookupByName("bond-brbond")
|
|
eth_iface1 = conn.interfaceLookupByName("eth0")
|
|
eth_iface2 = conn.interfaceLookupByName("eth1")
|
|
eth_iface3 = conn.interfaceLookupByName("eth2")
|
|
br_iface = conn.interfaceLookupByName("brempty")
|
|
|
|
|
|
class TestInterfaces(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
pass
|
|
|
|
def build_interface(self, interface_type, name):
|
|
iclass = Interface.interface_class_for_type(interface_type)
|
|
iobj = iclass(conn, name)
|
|
|
|
return iobj
|
|
|
|
def set_general_params(self, iface_obj):
|
|
iface_obj.mtu = 1501
|
|
iface_obj.macaddr = "AA:AA:AA:AA:AA:AA"
|
|
iface_obj.start_mode = Interface.INTERFACE_START_MODE_ONBOOT
|
|
iface_obj.protocols = [virtinst.Interface.InterfaceProtocolIPv4()]
|
|
|
|
def add_child_interfaces(self, iface_obj):
|
|
if iface_obj.object_type == Interface.INTERFACE_TYPE_BRIDGE:
|
|
iface_obj.interfaces.append(vlan_iface)
|
|
iface_obj.interfaces.append(bond_iface)
|
|
iface_obj.interfaces.append(eth_iface1)
|
|
elif iface_obj.object_type == Interface.INTERFACE_TYPE_BOND:
|
|
iface_obj.interfaces.append(eth_iface1)
|
|
iface_obj.interfaces.append(eth_iface2)
|
|
iface_obj.interfaces.append(eth_iface3)
|
|
|
|
def define_xml(self, obj, compare=True):
|
|
xml = obj.get_xml_config()
|
|
logging.debug("Defining interface XML:\n%s", xml)
|
|
|
|
if compare:
|
|
filename = os.path.join(datadir, obj.name + ".xml")
|
|
utils.diff_compare(xml, filename)
|
|
|
|
iface = obj.install()
|
|
|
|
newxml = iface.XMLDesc(0)
|
|
logging.debug("Defined XML:\n%s", newxml)
|
|
|
|
iface.undefine()
|
|
|
|
# Bridge tests
|
|
def testBridgeInterface(self):
|
|
filename = "bridge"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_BRIDGE,
|
|
"test-%s" % filename)
|
|
self.add_child_interfaces(obj)
|
|
|
|
obj.stp = False
|
|
obj.delay = "7"
|
|
|
|
self.define_xml(obj)
|
|
|
|
def testBridgeInterfaceIP(self):
|
|
filename = "bridge-ip"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_BRIDGE,
|
|
"test-%s" % filename)
|
|
self.add_child_interfaces(obj)
|
|
|
|
# IPv4 proto
|
|
iface_ip1 = InterfaceProtocolIPAddress("129.63.1.2")
|
|
iface_ip2 = InterfaceProtocolIPAddress("255.255.255.0")
|
|
iface_proto1 = InterfaceProtocol.protocol_class_for_family(
|
|
InterfaceProtocol.INTERFACE_PROTOCOL_FAMILY_IPV4)()
|
|
iface_proto1.ips = [iface_ip1, iface_ip2]
|
|
iface_proto1.gateway = "1.2.3.4"
|
|
iface_proto1.dhcp = True
|
|
iface_proto1.dhcp_peerdns = True
|
|
|
|
# IPv6 proto
|
|
iface_ip3 = InterfaceProtocolIPAddress("fe99::215:58ff:fe6e:5",
|
|
prefix="32")
|
|
iface_ip4 = InterfaceProtocolIPAddress("fe80::215:58ff:fe6e:5",
|
|
prefix="64")
|
|
iface_proto2 = InterfaceProtocol.protocol_class_for_family(
|
|
InterfaceProtocol.INTERFACE_PROTOCOL_FAMILY_IPV6)()
|
|
|
|
iface_proto2.ips = [iface_ip3, iface_ip4]
|
|
iface_proto2.gateway = "1.2.3.4"
|
|
iface_proto2.dhcp = True
|
|
iface_proto2.dhcp_peerdns = True
|
|
iface_proto2.autoconf = True
|
|
|
|
obj.protocols = [iface_proto1, iface_proto2]
|
|
|
|
self.define_xml(obj)
|
|
|
|
# Bond tests
|
|
def testBondInterface(self):
|
|
filename = "bond"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_BOND,
|
|
"test-%s" % filename)
|
|
self.add_child_interfaces(obj)
|
|
self.set_general_params(obj)
|
|
|
|
self.define_xml(obj)
|
|
|
|
def testBondInterfaceARP(self):
|
|
filename = "bond-arp"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_BOND,
|
|
"test-%s" % filename)
|
|
self.add_child_interfaces(obj)
|
|
self.set_general_params(obj)
|
|
|
|
obj.monitor_mode = "arpmon"
|
|
obj.arp_interval = 100
|
|
obj.arp_target = "192.168.100.200"
|
|
obj.arp_validate_mode = "backup"
|
|
|
|
self.define_xml(obj)
|
|
|
|
def testBondInterfaceMII(self):
|
|
filename = "bond-mii"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_BOND,
|
|
"test-%s" % filename)
|
|
self.add_child_interfaces(obj)
|
|
self.set_general_params(obj)
|
|
|
|
obj.monitor_mode = "miimon"
|
|
obj.mii_frequency = "123"
|
|
obj.mii_updelay = "12"
|
|
obj.mii_downdelay = "34"
|
|
obj.mii_carrier_mode = "netif"
|
|
|
|
self.define_xml(obj)
|
|
|
|
# Ethernet tests
|
|
def testEthernetInterface(self):
|
|
filename = "ethernet"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_ETHERNET,
|
|
"test-%s" % filename)
|
|
self.define_xml(obj)
|
|
|
|
def testEthernetManyParam(self):
|
|
filename = "ethernet-params"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_ETHERNET,
|
|
"test-%s" % filename)
|
|
|
|
obj.mtu = 1234
|
|
obj.mac = "AA:BB:FF:FF:BB:AA"
|
|
obj.start_mode = Interface.INTERFACE_START_MODE_HOTPLUG
|
|
|
|
self.define_xml(obj)
|
|
|
|
# VLAN tests
|
|
def testVLANInterface(self):
|
|
filename = "vlan"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_VLAN,
|
|
"test-%s" % filename)
|
|
|
|
obj.tag = "123"
|
|
obj.parent_interface = eth_iface3
|
|
|
|
self.define_xml(obj)
|
|
|
|
def testVLANInterfaceBusted(self):
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_VLAN,
|
|
"vlan1")
|
|
|
|
try:
|
|
self.define_xml(obj, compare=False)
|
|
assert(False)
|
|
except ValueError:
|
|
pass
|
|
except:
|
|
assert(False)
|
|
|
|
# protocol_xml test
|
|
def testEthernetProtocolInterface(self):
|
|
filename = "ethernet-copy-proto"
|
|
obj = self.build_interface(Interface.INTERFACE_TYPE_ETHERNET,
|
|
"test-%s" % filename)
|
|
|
|
protoxml = (" <protocol family='ipv6'>\n"
|
|
" <dhcp/>\n"
|
|
" </protocol>\n")
|
|
obj.protocol_xml = protoxml
|
|
|
|
self.define_xml(obj)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|