def test_identifies_nested_end_devices(self, get_all_usb_devices_data): plist = b"""<plist version="1.0"> <array> <dict> <key>_items</key> <array> <dict> <key>_name</key> <string>USB Mouse</string> <key>vendor_id</key> <string>1234</string> </dict> </array> </dict> <dict> <key>_name</key> <string>USB2.0 Hub</string> <key>_items</key> <array> <dict> <key>_name</key> <string>USB Flash</string> <key>vendor_id</key> <string>5678</string> </dict> </array> </dict> </array> </plist>""" get_all_usb_devices_data.return_value = plistlib.loads(plist) result = get_end_usb_devices_data() self.assertIn({"_name": "USB Mouse", "vendor_id": "1234"}, result) self.assertIn({"_name": "USB Flash", "vendor_id": "5678"}, result)
def find_candidates(self) -> List[CandidateDevice]: """Return a list of CandidateDevices.""" usb_devices_data = system_profiler.get_end_usb_devices_data() candidates = [] for device_data in usb_devices_data: logging.debug(f"Building from: {device_data}.") try: candidate = _build_candidate(device_data) except InvalidCandidateDeviceDataError: pass else: logging.debug(f"Built candidate: {candidate}.") candidates.append(candidate) return candidates
def test_identifies_flat_end_devices(self, get_all_usb_devices_data): plist = b"""<plist version="1.0"> <array> <dict> <key>_name</key> <string>USB Receiver</string> <key>vendor_id</key> <string>0xc53f</string> </dict> </array> </plist>""" get_all_usb_devices_data.return_value = plistlib.loads(plist) self.assertEqual(get_end_usb_devices_data(), [{ "_name": "USB Receiver", "vendor_id": "0xc53f" }])
def test_does_not_list_usb_hubs_or_buses(self, get_all_usb_devices_data): plist = b"""<plist version="1.0"> <array> <dict> <key>_name</key> <string>USB31Bus</string> <key>_items</key> <array> <dict> <key>_name</key> <string>USB3.0 Hub</string> </dict> </array> </dict> <dict> <key>_name</key> <string>USB20Bus</string> </dict> </array> </plist>""" get_all_usb_devices_data.return_value = plistlib.loads(plist) self.assertEqual(get_end_usb_devices_data(), [])