2015-03-26 18:04:23 -04:00
|
|
|
# encoding=utf-8
|
|
|
|
|
#
|
2013-10-27 21:59:46 +01:00
|
|
|
# Copyright (C) 2013 Red Hat, Inc.
|
2013-03-17 17:06:52 -04:00
|
|
|
#
|
2018-04-04 14:35:41 +01:00
|
|
|
# This work is licensed under the GNU GPLv2 or later.
|
2018-03-20 15:00:02 -04:00
|
|
|
# See the COPYING file in the top-level directory.
|
2013-03-17 17:06:52 -04:00
|
|
|
|
|
|
|
|
import os.path
|
|
|
|
|
import unittest
|
|
|
|
|
|
2018-09-01 20:44:14 -04:00
|
|
|
from virtinst import Guest
|
2013-09-22 18:13:24 -04:00
|
|
|
from virtinst import NodeDevice
|
2018-03-20 12:18:35 -04:00
|
|
|
from virtinst import DeviceHostdev
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2013-04-10 19:48:07 -04:00
|
|
|
from tests import utils
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2015-03-26 18:04:23 -04:00
|
|
|
# Requires XML_SANITIZE to parse correctly, see bug 1184131
|
|
|
|
|
funky_chars_xml = """
|
|
|
|
|
<device>
|
2019-06-05 15:04:35 -04:00
|
|
|
<name>L3B2616</name>
|
|
|
|
|
<capability type='LENOVOá'/>
|
2015-03-26 18:04:23 -04:00
|
|
|
</device>
|
|
|
|
|
"""
|
|
|
|
|
|
2013-04-13 14:34:52 -04:00
|
|
|
|
2013-03-17 17:06:52 -04:00
|
|
|
class TestNodeDev(unittest.TestCase):
|
2018-02-22 14:57:10 -05:00
|
|
|
@property
|
|
|
|
|
def conn(self):
|
|
|
|
|
return utils.URIs.open_testdriver_cached()
|
2013-03-17 17:06:52 -04:00
|
|
|
|
|
|
|
|
def _nodeDevFromName(self, devname):
|
2018-02-22 14:57:10 -05:00
|
|
|
node = self.conn.nodeDeviceLookupByName(devname)
|
2013-03-17 17:06:52 -04:00
|
|
|
xml = node.XMLDesc(0)
|
2019-06-05 16:21:00 -04:00
|
|
|
return NodeDevice(self.conn, xml)
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2015-07-23 13:15:26 +02:00
|
|
|
def _testNode2DeviceCompare(self, nodename, devfile, nodedev=None):
|
2020-01-26 18:11:43 -05:00
|
|
|
devfile = os.path.join("tests/data/nodedev/devxml", devfile)
|
2013-03-17 17:06:52 -04:00
|
|
|
if not nodedev:
|
|
|
|
|
nodedev = self._nodeDevFromName(nodename)
|
|
|
|
|
|
2018-03-20 12:18:35 -04:00
|
|
|
dev = DeviceHostdev(self.conn)
|
2015-07-23 13:15:26 +02:00
|
|
|
dev.set_from_nodedev(nodedev)
|
2018-09-01 20:44:14 -04:00
|
|
|
dev.set_defaults(Guest(self.conn))
|
2018-08-31 16:52:02 -04:00
|
|
|
utils.diff_compare(dev.get_xml() + "\n", devfile)
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2015-03-26 18:04:23 -04:00
|
|
|
def testFunkyChars(self):
|
2019-06-05 15:04:35 -04:00
|
|
|
# Ensure parsing doesn't fail
|
2019-06-05 16:21:00 -04:00
|
|
|
dev = NodeDevice(self.conn, funky_chars_xml)
|
2019-06-05 15:04:35 -04:00
|
|
|
self.assertEqual(dev.name, "L3B2616")
|
|
|
|
|
self.assertEqual(dev.device_type, "LENOVO")
|
2015-03-26 18:04:23 -04:00
|
|
|
|
2019-06-05 15:11:31 -04:00
|
|
|
def testNetDevice(self):
|
2013-03-17 17:06:52 -04:00
|
|
|
devname = "net_00_1c_25_10_b1_e4"
|
2019-06-05 15:11:31 -04:00
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.name, devname)
|
|
|
|
|
self.assertEqual(dev.parent, "pci_8086_1049")
|
|
|
|
|
self.assertEqual(dev.device_type, "net")
|
|
|
|
|
self.assertEqual(dev.interface, "eth0")
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2019-06-05 15:29:10 -04:00
|
|
|
def testPCIDevice(self):
|
|
|
|
|
nodename = "pci_8086_10fb"
|
|
|
|
|
obj = self._nodeDevFromName(nodename)
|
|
|
|
|
self.assertEqual(obj.is_pci_sriov(), True)
|
|
|
|
|
nodename = "pci_8086_2448"
|
|
|
|
|
obj = self._nodeDevFromName(nodename)
|
|
|
|
|
self.assertEqual(obj.is_pci_bridge(), True)
|
|
|
|
|
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2019-06-05 15:39:09 -04:00
|
|
|
def testUSBDevDevice(self):
|
2013-03-17 17:06:52 -04:00
|
|
|
devname = "usb_device_781_5151_2004453082054CA1BEEE"
|
2019-06-05 15:39:09 -04:00
|
|
|
dev = self._nodeDevFromName(devname)
|
2019-06-09 15:29:44 -04:00
|
|
|
self.assertEqual(dev.vendor_name, "SanDisk Corp.")
|
|
|
|
|
self.assertEqual(dev.product_name, "Cruzer Micro 256/512MB Flash Drive")
|
2019-06-05 15:39:09 -04:00
|
|
|
|
|
|
|
|
devname = "usb_device_1d6b_1_0000_00_1a_0"
|
|
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertTrue(dev.is_usb_linux_root_hub())
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2019-06-05 15:46:26 -04:00
|
|
|
def testSCSIDevice(self):
|
|
|
|
|
devname = "pci_8086_2829_scsi_host_scsi_device_lun0"
|
|
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.host, "0")
|
|
|
|
|
self.assertEqual(dev.bus, "0")
|
|
|
|
|
self.assertEqual(dev.target, "0")
|
|
|
|
|
|
2019-06-05 16:00:25 -04:00
|
|
|
def testStorageDevice(self):
|
2013-03-17 17:06:52 -04:00
|
|
|
devname = "storage_serial_SATA_WDC_WD1600AAJS__WD_WCAP95119685"
|
2019-06-05 16:00:25 -04:00
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.block, "/dev/sda")
|
|
|
|
|
self.assertEqual(dev.drive_type, "disk")
|
|
|
|
|
self.assertEqual(dev.media_available, None)
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2019-06-05 16:00:25 -04:00
|
|
|
devname = "storage_model_DVDRAM_GSA_U1200N"
|
|
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.media_label, "Fedora12_media")
|
|
|
|
|
self.assertEqual(dev.media_available, 1)
|
2013-03-17 17:06:52 -04:00
|
|
|
|
|
|
|
|
def testSCSIBus(self):
|
|
|
|
|
devname = "pci_8086_2829_scsi_host_1"
|
2019-06-05 16:03:43 -04:00
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.host, "2")
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2017-02-21 17:00:54 +04:00
|
|
|
def testDRMDevice(self):
|
|
|
|
|
devname = "drm_renderD129"
|
2019-06-05 16:13:44 -04:00
|
|
|
dev = self._nodeDevFromName(devname)
|
|
|
|
|
self.assertEqual(dev.devnodes[0].path, "/dev/dri/renderD129")
|
|
|
|
|
self.assertEqual(dev.devnodes[0].node_type, "dev")
|
|
|
|
|
self.assertEqual(dev.devnodes[1].path,
|
|
|
|
|
"/dev/dri/by-path/pci-0000:00:02.0-render")
|
|
|
|
|
self.assertEqual(dev.devnodes[1].node_type, "link")
|
|
|
|
|
self.assertEqual(dev.is_drm_render(), True)
|
2019-06-09 16:39:15 -04:00
|
|
|
self.assertTrue(dev.get_devnode("frob"))
|
2017-02-21 17:00:54 +04:00
|
|
|
|
2013-03-17 17:06:52 -04:00
|
|
|
|
2019-06-05 15:04:35 -04:00
|
|
|
# NodeDevice 2 Device XML tests
|
2013-03-17 17:06:52 -04:00
|
|
|
def testNodeDev2USB1(self):
|
|
|
|
|
nodename = "usb_device_781_5151_2004453082054CA1BEEE"
|
|
|
|
|
devfile = "usbdev1.xml"
|
|
|
|
|
self._testNode2DeviceCompare(nodename, devfile)
|
|
|
|
|
|
|
|
|
|
def testNodeDev2USB2(self):
|
2015-07-23 13:15:26 +02:00
|
|
|
nodename = "usb_device_1d6b_2_0000_00_1d_7"
|
2013-03-17 17:06:52 -04:00
|
|
|
devfile = "usbdev2.xml"
|
|
|
|
|
nodedev = self._nodeDevFromName(nodename)
|
|
|
|
|
|
2015-07-23 13:15:26 +02:00
|
|
|
self._testNode2DeviceCompare(nodename, devfile, nodedev=nodedev)
|
2013-03-17 17:06:52 -04:00
|
|
|
|
|
|
|
|
def testNodeDev2PCI(self):
|
|
|
|
|
nodename = "pci_1180_592"
|
|
|
|
|
devfile = "pcidev.xml"
|
|
|
|
|
self._testNode2DeviceCompare(nodename, devfile)
|
|
|
|
|
|
|
|
|
|
def testNodeDevFail(self):
|
|
|
|
|
nodename = "usb_device_1d6b_1_0000_00_1d_1_if0"
|
|
|
|
|
devfile = ""
|
|
|
|
|
|
|
|
|
|
# This should exist, since usbbus is not a valid device to
|
|
|
|
|
# pass to a guest.
|
|
|
|
|
self.assertRaises(ValueError,
|
|
|
|
|
self._testNode2DeviceCompare, nodename, devfile)
|