390 lines
15 KiB
Python
390 lines
15 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
import mock
|
||
|
import os
|
||
|
|
||
|
class NetworkTest(mock.TestCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
self.setupModules(['_isys', 'block', 'logging', 'ConfigParser'])
|
||
|
self.fs = mock.DiskIO()
|
||
|
|
||
|
self.OK = 22
|
||
|
self.SYSCONFIGDIR = "/tmp/etc/sysconfig"
|
||
|
self.NETSCRIPTSDIR = "%s/network-scripts" % (self.SYSCONFIGDIR)
|
||
|
self.NETWORKCONFFILE = '%s/network' % self.SYSCONFIGDIR
|
||
|
self.IFCFGLOG = '/tmp/ifcfg.log'
|
||
|
self.DEFAULT_HOSTNAME = 'localhost.localdomain'
|
||
|
|
||
|
self.CONT = "DEVICE=eth0\nHWADDR=00:11:22:50:55:50\nTYPE=Ethernet\nBOOTPROTO=dhcp\n"
|
||
|
self.DEVICE = 'eth0'
|
||
|
self.DEV_FILE = self.NETSCRIPTSDIR + '/ifcfg-eth0'
|
||
|
self.DEV_KEY_FILE = self.NETSCRIPTSDIR + '/keys-eth0'
|
||
|
self.fs.open(self.DEV_FILE, 'w').write(self.CONT)
|
||
|
|
||
|
import pyanaconda
|
||
|
pyanaconda.anaconda_log = mock.Mock()
|
||
|
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.socket = mock.Mock()
|
||
|
pyanaconda.network.socket.gethostname.return_value = self.DEFAULT_HOSTNAME
|
||
|
pyanaconda.network.open = self.fs.open
|
||
|
pyanaconda.simpleconfig.open = self.fs.open
|
||
|
pyanaconda.network.sysconfigDir = self.SYSCONFIGDIR
|
||
|
pyanaconda.network.netscriptsDir = self.NETSCRIPTSDIR
|
||
|
pyanaconda.network.networkConfFile = self.NETWORKCONFFILE
|
||
|
pyanaconda.network.ifcfgLogFile = self.IFCFGLOG
|
||
|
self.fs.open(self.IFCFGLOG, 'w')
|
||
|
|
||
|
# Network mock
|
||
|
pyanaconda.network.Network.update = mock.Mock()
|
||
|
self.setNMControlledDevices_backup = pyanaconda.network.Network.setNMControlledDevices
|
||
|
pyanaconda.network.Network.setNMControlledDevices = mock.Mock()
|
||
|
pyanaconda.network.Network.netdevices = {}
|
||
|
|
||
|
def tearDown(self):
|
||
|
self.tearDownModules()
|
||
|
|
||
|
def sanity_check_hostname_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
(valid, err) = pyanaconda.network.sanityCheckHostname('desktop')
|
||
|
self.assertTrue(valid)
|
||
|
|
||
|
def sanity_check_hostname_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
(valid, err) = pyanaconda.network.sanityCheckHostname('')
|
||
|
self.assertFalse(valid)
|
||
|
|
||
|
def sanity_check_hostname_3_test(self):
|
||
|
import pyanaconda.network
|
||
|
(valid, err) = pyanaconda.network.sanityCheckHostname('c'*256)
|
||
|
self.assertFalse(valid)
|
||
|
|
||
|
def sanity_check_hostname_4_test(self):
|
||
|
import pyanaconda.network
|
||
|
(valid, err) = pyanaconda.network.sanityCheckHostname('_asf')
|
||
|
self.assertFalse(valid)
|
||
|
|
||
|
def sanity_check_hostname_5_test(self):
|
||
|
import pyanaconda.network
|
||
|
(valid, err) = pyanaconda.network.sanityCheckHostname('a?f')
|
||
|
self.assertFalse(valid)
|
||
|
|
||
|
def get_default_hostname_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
HOSTNAME = 'host1'
|
||
|
pyanaconda.network.getActiveNetDevs = mock.Mock(return_value=['dev'])
|
||
|
pyanaconda.network.isys = mock.Mock()
|
||
|
pyanaconda.network.isys.getIPAddresses.return_value = ['10.0.0.1']
|
||
|
pyanaconda.network.socket = mock.Mock()
|
||
|
pyanaconda.network.socket.gethostbyaddr.return_value = [HOSTNAME, '', '']
|
||
|
|
||
|
ret = pyanaconda.network.getDefaultHostname(mock.Mock())
|
||
|
self.assertEqual(ret, HOSTNAME)
|
||
|
|
||
|
def get_default_hostname_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
HOSTNAME = 'host2'
|
||
|
pyanaconda.network.getActiveNetDevs = mock.Mock(return_value=[])
|
||
|
pyanaconda.network.isys = mock.Mock()
|
||
|
pyanaconda.network.socket = mock.Mock()
|
||
|
anaconda = mock.Mock()
|
||
|
anaconda.network.hostname = HOSTNAME
|
||
|
|
||
|
ret = pyanaconda.network.getDefaultHostname(anaconda)
|
||
|
self.assertEqual(ret, HOSTNAME)
|
||
|
|
||
|
def get_default_hostname_3_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
HOSTNAME = 'host3'
|
||
|
pyanaconda.network.getActiveNetDevs = mock.Mock(return_value=[])
|
||
|
pyanaconda.network.isys = mock.Mock()
|
||
|
pyanaconda.network.socket = mock.Mock()
|
||
|
pyanaconda.network.socket.gethostname.return_value = HOSTNAME
|
||
|
anaconda = mock.Mock()
|
||
|
anaconda.network.hostname = ''
|
||
|
|
||
|
ret = pyanaconda.network.getDefaultHostname(anaconda)
|
||
|
self.assertEqual(ret, HOSTNAME)
|
||
|
|
||
|
def get_default_hostname_4_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
pyanaconda.network.getActiveNetDevs = mock.Mock(return_value=[])
|
||
|
pyanaconda.network.isys = mock.Mock()
|
||
|
pyanaconda.network.socket = mock.Mock()
|
||
|
pyanaconda.network.socket.gethostname.return_value = ''
|
||
|
anaconda = mock.Mock()
|
||
|
anaconda.network.hostname = ''
|
||
|
|
||
|
ret = pyanaconda.network.getDefaultHostname(anaconda)
|
||
|
self.assertEqual(ret, self.DEFAULT_HOSTNAME)
|
||
|
|
||
|
def sanity_check_ip_string_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
IPADDR = '10.0.0.5'
|
||
|
pyanaconda.network.sanityCheckIPString(IPADDR)
|
||
|
|
||
|
def sanity_check_ip_string_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
IPADDR = "ff06:0:0:0:0:0:0:c3"
|
||
|
pyanaconda.network.sanityCheckIPString(IPADDR)
|
||
|
|
||
|
def sanity_check_ip_string_3_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
IPADDR = "ff06:.:.:0:0:0:0:c3"
|
||
|
self.assertRaises(pyanaconda.network.IPError,
|
||
|
pyanaconda.network.sanityCheckIPString, IPADDR)
|
||
|
|
||
|
def sanity_check_ip_string_4_test(self):
|
||
|
import pyanaconda.network
|
||
|
import socket
|
||
|
pyanaconda.network.socket.error = socket.error
|
||
|
pyanaconda.network.socket.inet_pton = mock.Mock(side_effect=socket.error)
|
||
|
|
||
|
IPADDR = "1.8.64.512"
|
||
|
self.assertRaises(pyanaconda.network.IPError,
|
||
|
pyanaconda.network.sanityCheckIPString, IPADDR)
|
||
|
|
||
|
def sanity_check_ip_string_5_test(self):
|
||
|
import pyanaconda.network
|
||
|
import socket
|
||
|
pyanaconda.network.socket.error = socket.error
|
||
|
pyanaconda.network.socket.inet_pton = mock.Mock(side_effect=socket.error)
|
||
|
|
||
|
IPADDR = "top.secret.address"
|
||
|
self.assertRaises(pyanaconda.network.IPError,
|
||
|
pyanaconda.network.sanityCheckIPString, IPADDR)
|
||
|
|
||
|
def has_active_net_dev_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
pyanaconda.network.dbus = mock.Mock()
|
||
|
pyanaconda.network.dbus.Interface().Get.return_value = \
|
||
|
pyanaconda.network.isys.NM_STATE_CONNECTED_GLOBAL
|
||
|
|
||
|
ret = pyanaconda.network.hasActiveNetDev()
|
||
|
self.assertTrue(ret)
|
||
|
self.assertTrue(pyanaconda.network.dbus.Interface().Get.called)
|
||
|
|
||
|
def has_active_net_dev_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
pyanaconda.network.dbus = mock.Mock(side_effect=Exception)
|
||
|
|
||
|
ret = pyanaconda.network.hasActiveNetDev()
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def has_active_net_dev_3_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
pyanaconda.network.dbus = mock.Mock()
|
||
|
pyanaconda.network.dbus.Interface().Get.return_value = self.OK
|
||
|
pyanaconda.network.isys.NM_STATE_CONNECTED = (self.OK - 5)
|
||
|
|
||
|
ret = pyanaconda.network.hasActiveNetDev()
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def networkdevice_read_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
ret = nd.read()
|
||
|
self.assertEqual(ret, 4)
|
||
|
self.assertEqual(nd.info,
|
||
|
{'DEVICE': 'eth0', 'HWADDR': '00:11:22:50:55:50',
|
||
|
'BOOTPROTO': 'dhcp', 'TYPE': 'Ethernet'})
|
||
|
|
||
|
def networkdevice_clear_test(self):
|
||
|
import pyanaconda.network
|
||
|
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.info = {'DEVICE': 'eth0', 'HWADDR': '00:11:22:50:55:50', 'TYPE': 'Ethernet'}
|
||
|
nd.clear()
|
||
|
self.assertEqual(nd.info, {})
|
||
|
|
||
|
def networkdevice_str_test(self):
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.iutil = mock.Mock()
|
||
|
pyanaconda.network.iutil.isS390.return_value = False
|
||
|
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.info = {'HWADDR': '00:11:22:50:55:50', 'DEVICE': 'eth0', 'TYPE': 'Ethernet'}
|
||
|
self.assertIn('DEVICE="eth0"', str(nd))
|
||
|
self.assertIn('TYPE="Ethernet"', str(nd))
|
||
|
|
||
|
def networkdevice_load_ifcfg_file_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.loadIfcfgFile()
|
||
|
self.assertFalse(nd._dirty)
|
||
|
self.assertEqual(nd.info,
|
||
|
{'DEVICE': 'eth0', 'HWADDR': '00:11:22:50:55:50',
|
||
|
'TYPE': 'Ethernet', 'BOOTPROTO': 'dhcp'})
|
||
|
|
||
|
def networkdevice_write_ifcfg_file_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.info = {'HWADDR': '66:55:44:33:22:11', 'DEVICE': 'eth1', 'TYPE': 'Ethernet'}
|
||
|
nd._dirty = True
|
||
|
nd.writeIfcfgFile()
|
||
|
self.assertIn('DEVICE="eth1"\n', self.fs[self.DEV_FILE])
|
||
|
self.assertIn('HWADDR="66:55:44:33:22:11"', self.fs[self.DEV_FILE])
|
||
|
self.assertIn('TYPE="Ethernet"', self.fs[self.DEV_FILE])
|
||
|
|
||
|
def networkdevice_set_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.set(('key', 'value'))
|
||
|
self.assertEqual(nd.info, {'KEY': 'value'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_set_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.set(('key', 'value'))
|
||
|
nd.set(('key', 'other_value'))
|
||
|
self.assertEqual(nd.info, {'KEY': 'other_value'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_set_3_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.set(('key', 'value'))
|
||
|
nd._dirty = False
|
||
|
nd.set(('key', 'other_value'))
|
||
|
self.assertEqual(nd.info, {'KEY': 'other_value'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_set_gateway_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.setGateway('10.0.0.1')
|
||
|
self.assertEqual(nd.info, {'GATEWAY': '10.0.0.1'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_set_gateway_ipv6_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.setGateway('fe80::5675:d0ff:feac:4d3f')
|
||
|
self.assertEqual(nd.info, {'IPV6_DEFAULTGW': 'fe80::5675:d0ff:feac:4d3f'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_set_dns_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.setDNS('10.0.0.1, 10.0.0.2')
|
||
|
self.assertEqual(nd.info, {'DNS1': '10.0.0.1'})
|
||
|
self.assertEqual(nd.info, {'DNS2': '10.0.0.2'})
|
||
|
self.assertTrue(nd._dirty)
|
||
|
|
||
|
def networkdevice_keyfile_path_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
ret = nd.keyfilePath
|
||
|
self.assertEqual(ret, self.DEV_KEY_FILE)
|
||
|
|
||
|
def networkdevice_write_wepkey_file_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.wepkey = False
|
||
|
ret = nd.writeWepkeyFile()
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def networkdevice_write_wepkey_file_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
TMP_FILE = '/tmp/wep.key'
|
||
|
TMP_DIR = '/tmp/wepkeyfiles'
|
||
|
pyanaconda.network.tempfile = mock.Mock()
|
||
|
pyanaconda.network.tempfile.mkstemp.return_value = (88, TMP_FILE)
|
||
|
pyanaconda.network.os = mock.Mock()
|
||
|
pyanaconda.network.os.path = os.path
|
||
|
pyanaconda.network.shutil = mock.Mock()
|
||
|
|
||
|
nd = pyanaconda.network.NetworkDevice(self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nd.iface = self.DEVICE
|
||
|
nd.wepkey = '12345'
|
||
|
|
||
|
nd.writeWepkeyFile(dir=TMP_DIR)
|
||
|
self.assertEqual(pyanaconda.network.os.write.call_args[0], (88, 'KEY1=12345\n'))
|
||
|
self.assertEqual(pyanaconda.network.shutil.move.call_args[0],
|
||
|
(TMP_FILE, '%s/keys-%s' % (TMP_DIR, self.DEVICE)))
|
||
|
|
||
|
def network_nm_controlled_devices_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
nw = pyanaconda.network.Network()
|
||
|
nw.netdevices = {'dev': mock.Mock()}
|
||
|
pyanaconda.network.Network.setNMControlledDevices = self.setNMControlledDevices_backup
|
||
|
nw.setNMControlledDevices()
|
||
|
self.assertEqual(nw.netdevices['dev'].method_calls,
|
||
|
[('set', (('NM_CONTROLLED', 'yes'),), {})])
|
||
|
|
||
|
def network_nm_controlled_devices_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
nw = pyanaconda.network.Network()
|
||
|
nw.netdevices = {'dev': mock.Mock()}
|
||
|
pyanaconda.network.Network.setNMControlledDevices = self.setNMControlledDevices_backup
|
||
|
nw.setNMControlledDevices([''])
|
||
|
self.assertEqual(nw.netdevices['dev'].method_calls,
|
||
|
[('set', (('NM_CONTROLLED', 'no'),), {})])
|
||
|
|
||
|
def network_write_ks_test(self):
|
||
|
import pyanaconda.network
|
||
|
TMPFILE = '/tmp/networkKS'
|
||
|
f = self.fs.open(TMPFILE, 'w')
|
||
|
|
||
|
nw = pyanaconda.network.Network()
|
||
|
nw.netdevices[self.DEVICE] = pyanaconda.network.NetworkDevice(
|
||
|
self.NETSCRIPTSDIR, self.DEVICE)
|
||
|
nw.netdevices[self.DEVICE].loadIfcfgFile()
|
||
|
nw.writeKS(f)
|
||
|
f.close()
|
||
|
|
||
|
self.assertEqual(self.fs[TMPFILE],
|
||
|
'network --device eth0 --bootproto dhcp --noipv6\n')
|
||
|
|
||
|
def network_wait_for_connection_1_test(self):
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.dbus = mock.Mock()
|
||
|
pyanaconda.network.dbus.Interface().Get.return_value = \
|
||
|
pyanaconda.network.isys.NM_STATE_CONNECTED_GLOBAL
|
||
|
|
||
|
ret = pyanaconda.network.waitForConnection()
|
||
|
self.assertTrue(ret)
|
||
|
|
||
|
def network_wait_for_connection_2_test(self):
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.dbus = mock.Mock()
|
||
|
pyanaconda.network.dbus.Interface().Get.return_value = self.OK-5
|
||
|
pyanaconda.network.isys = mock.Mock()
|
||
|
pyanaconda.network.isys.NM_STATE_CONNECTED = self.OK
|
||
|
pyanaconda.network.time.sleep = mock.Mock()
|
||
|
|
||
|
ret = pyanaconda.network.waitForConnection()
|
||
|
self.assertFalse(ret)
|
||
|
|
||
|
def network_bring_up_test(self):
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.Network.write = mock.Mock()
|
||
|
pyanaconda.network.waitForConnection = mock.Mock()
|
||
|
|
||
|
nw = pyanaconda.network.Network()
|
||
|
nw.bringUp()
|
||
|
self.assertTrue(pyanaconda.network.Network.write.called)
|
||
|
self.assertTrue(pyanaconda.network.waitForConnection.called)
|
||
|
|
||
|
def iface_for_host_ip_test(self):
|
||
|
import pyanaconda.network
|
||
|
pyanaconda.network.iutil = mock.Mock()
|
||
|
pyanaconda.network.iutil.execWithCapture.return_value = \
|
||
|
"10.0.0.2 dev eth0 src 10.0.0.1"
|
||
|
|
||
|
ret = pyanaconda.network.ifaceForHostIP('10.0.0.2')
|
||
|
self.assertEqual(ret, 'eth0')
|