1# encoding=utf-8 2# 3# Copyright (C) 2013 Red Hat, Inc. 4# 5# This work is licensed under the GNU GPLv2 or later. 6# See the COPYING file in the top-level directory. 7 8import os.path 9 10import pytest 11 12from virtinst import Guest 13from virtinst import NodeDevice 14from virtinst import DeviceHostdev 15 16from tests import utils 17 18# Requires XML_SANITIZE to parse correctly, see bug 1184131 19funky_chars_xml = """ 20<device> 21 <name>L3B2616</name> 22 <capability type='LENOVOá'/> 23</device> 24""" 25 26DATADIR = utils.DATADIR + "/nodedev/" 27 28 29def _nodeDevFromName(conn, devname): 30 node = conn.nodeDeviceLookupByName(devname) 31 xml = node.XMLDesc(0) 32 return NodeDevice(conn, xml) 33 34 35def _testNode2DeviceCompare(conn, nodename, devfile, nodedev=None): 36 devfile = os.path.join(DATADIR, "devxml", devfile) 37 if not nodedev: 38 nodedev = _nodeDevFromName(conn, nodename) 39 40 dev = DeviceHostdev(conn) 41 dev.set_from_nodedev(nodedev) 42 dev.set_defaults(Guest(conn)) 43 utils.diff_compare(dev.get_xml() + "\n", devfile) 44 45 46def testFunkyChars(): 47 # Ensure parsing doesn't fail 48 conn = utils.URIs.open_testdriver_cached() 49 dev = NodeDevice(conn, funky_chars_xml) 50 assert dev.name == "L3B2616" 51 assert dev.device_type == "LENOVO" 52 53 54def testNetDevice(): 55 conn = utils.URIs.open_testdriver_cached() 56 devname = "net_00_1c_25_10_b1_e4" 57 dev = _nodeDevFromName(conn, devname) 58 assert dev.name == devname 59 assert dev.parent == "pci_8086_1049" 60 assert dev.device_type == "net" 61 assert dev.interface == "eth0" 62 63 64def testPCIDevice(): 65 conn = utils.URIs.open_testdriver_cached() 66 nodename = "pci_8086_10fb" 67 obj = _nodeDevFromName(conn, nodename) 68 assert obj.is_pci_sriov() is True 69 nodename = "pci_8086_2448" 70 obj = _nodeDevFromName(conn, nodename) 71 assert obj.is_pci_bridge() is True 72 73 74 75def testUSBDevDevice(): 76 conn = utils.URIs.open_testdriver_cached() 77 devname = "usb_device_781_5151_2004453082054CA1BEEE" 78 dev = _nodeDevFromName(conn, devname) 79 assert dev.vendor_name == "SanDisk Corp." 80 assert dev.product_name == "Cruzer Micro 256/512MB Flash Drive" 81 82 devname = "usb_device_1d6b_1_0000_00_1a_0" 83 dev = _nodeDevFromName(conn, devname) 84 assert dev.is_usb_linux_root_hub() is True 85 86 87def testSCSIDevice(): 88 conn = utils.URIs.open_testdriver_cached() 89 devname = "pci_8086_2829_scsi_host_scsi_device_lun0" 90 dev = _nodeDevFromName(conn, devname) 91 assert dev.host == "0" 92 assert dev.bus == "0" 93 assert dev.target == "0" 94 95 96def testStorageDevice(): 97 conn = utils.URIs.open_testdriver_cached() 98 devname = "storage_serial_SATA_WDC_WD1600AAJS__WD_WCAP95119685" 99 dev = _nodeDevFromName(conn, devname) 100 assert dev.block == "/dev/sda" 101 assert dev.drive_type == "disk" 102 assert dev.media_available is None 103 104 devname = "storage_model_DVDRAM_GSA_U1200N" 105 dev = _nodeDevFromName(conn, devname) 106 assert dev.media_label == "Fedora12_media" 107 assert dev.media_available == 1 108 109 110def testSCSIBus(): 111 conn = utils.URIs.open_testdriver_cached() 112 devname = "pci_8086_2829_scsi_host_1" 113 dev = _nodeDevFromName(conn, devname) 114 assert dev.host == "2" 115 116 117def testDRMDevice(): 118 conn = utils.URIs.open_testdriver_cached() 119 devname = "drm_renderD129" 120 dev = _nodeDevFromName(conn, devname) 121 assert dev.devnodes[0].path == "/dev/dri/renderD129" 122 assert dev.devnodes[0].node_type == "dev" 123 assert dev.devnodes[1].path == "/dev/dri/by-path/pci-0000:00:02.0-render" 124 assert dev.devnodes[1].node_type == "link" 125 assert dev.is_drm_render() is True 126 assert dev.get_devnode("frob") 127 128 129# NodeDevice 2 Device XML tests 130 131def testNodeDev2USB1(): 132 conn = utils.URIs.open_testdriver_cached() 133 nodename = "usb_device_781_5151_2004453082054CA1BEEE" 134 devfile = "usbdev1.xml" 135 _testNode2DeviceCompare(conn, nodename, devfile) 136 137 138def testNodeDev2USB2(): 139 conn = utils.URIs.open_testdriver_cached() 140 nodename = "usb_device_1d6b_2_0000_00_1d_7" 141 devfile = "usbdev2.xml" 142 nodedev = _nodeDevFromName(conn, nodename) 143 144 _testNode2DeviceCompare(conn, nodename, devfile, nodedev=nodedev) 145 146 147def testNodeDev2PCI(): 148 conn = utils.URIs.open_testdriver_cached() 149 nodename = "pci_1180_592" 150 devfile = "pcidev.xml" 151 _testNode2DeviceCompare(conn, nodename, devfile) 152 153 154def testNodeDevFail(): 155 conn = utils.URIs.open_testdriver_cached() 156 nodename = "usb_device_1d6b_1_0000_00_1d_1_if0" 157 devfile = "" 158 159 # This should exist, since usbbus is not a valid device to 160 # pass to a guest. 161 with pytest.raises(ValueError): 162 _testNode2DeviceCompare(conn, nodename, devfile) 163