1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez#!/usr/bin/env python 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Copyright 2013 The Chromium Authors. All rights reserved. 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Use of this source code is governed by a BSD-style license that can be 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# found in the LICENSE file. 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez"""Tests for the cmd_helper module.""" 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport unittest 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil import devil_env 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil.utils import lsusb 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil.utils import mock_calls 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezwith devil_env.SysPath(devil_env.PYMOCK_PATH): 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez import mock # pylint: disable=import-error 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezRAW_OUTPUT = """ 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezBus 003 Device 007: ID 18d1:4ee2 Google Inc. Nexus 4 (debug) 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezDevice Descriptor: 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 18 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 1 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bcdUSB 2.00 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceClass 0 (Defined at Interface level) 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceSubClass 0 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceProtocol 0 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bMaxPacketSize0 64 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez idVendor 0x18d1 Google Inc. 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez idProduct 0x4ee2 Nexus 4 (debug) 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bcdDevice 2.28 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iManufacturer 1 LGE 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iProduct 2 Nexus 4 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iSerial 3 01d2450ea194a93b 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bNumConfigurations 1 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Configuration Descriptor: 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 9 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 2 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wTotalLength 62 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bNumInterfaces 2 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bConfigurationValue 1 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iConfiguration 0 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 0x80 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (Bus Powered) 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez MaxPower 500mA 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Interface Descriptor: 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 9 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 4 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceNumber 0 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bAlternateSetting 0 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bNumEndpoints 3 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceClass 255 Vendor Specific Class 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceSubClass 255 Vendor Specific Subclass 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceProtocol 0 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iInterface 4 MTP 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Endpoint Descriptor: 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 7 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 5 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bEndpointAddress 0x81 EP 1 IN 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 2 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Transfer Type Bulk 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Synch Type None 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Usage Type Data 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wMaxPacketSize 0x0040 1x 64 bytes 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterval 0 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Endpoint Descriptor: 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 7 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 5 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bEndpointAddress 0x01 EP 1 OUT 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 2 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Transfer Type Bulk 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Synch Type None 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Usage Type Data 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wMaxPacketSize 0x0040 1x 64 bytes 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterval 0 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Endpoint Descriptor: 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 7 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 5 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bEndpointAddress 0x82 EP 2 IN 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 3 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Transfer Type Interrupt 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Synch Type None 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Usage Type Data 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wMaxPacketSize 0x001c 1x 28 bytes 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterval 6 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Interface Descriptor: 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 9 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 4 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceNumber 1 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bAlternateSetting 0 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bNumEndpoints 2 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceClass 255 Vendor Specific Class 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceSubClass 66 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterfaceProtocol 1 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iInterface 0 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Endpoint Descriptor: 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 7 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 5 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bEndpointAddress 0x83 EP 3 IN 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 2 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Transfer Type Bulk 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Synch Type None 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Usage Type Data 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wMaxPacketSize 0x0040 1x 64 bytes 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterval 0 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Endpoint Descriptor: 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 7 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 5 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bEndpointAddress 0x02 EP 2 OUT 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bmAttributes 2 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Transfer Type Bulk 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Synch Type None 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Usage Type Data 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez wMaxPacketSize 0x0040 1x 64 bytes 113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bInterval 0 114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezDevice Qualifier (for other device speed): 115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bLength 10 116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDescriptorType 6 117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bcdUSB 2.00 118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceClass 0 (Defined at Interface level) 119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceSubClass 0 120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bDeviceProtocol 0 121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bMaxPacketSize0 64 122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez bNumConfigurations 1 123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezDevice Status: 0x0000 124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (Bus Powered) 125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez""" 126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezDEVICE_LIST = 'Bus 003 Device 007: ID 18d1:4ee2 Google Inc. Nexus 4 (debug)' 127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezEXPECTED_RESULT = { 129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'device': '007', 130645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bus': '003', 131645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'desc': 'ID 18d1:4ee2 Google Inc. Nexus 4 (debug)', 132645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Device': { 133645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': 'Status:', 134645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': '0x0000', 135645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '(Bus': { 136645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': 'Powered)', 137645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': None 138645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 139645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 140645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Device Descriptor': { 141645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bLength': {'_value': '18', '_desc': None}, 142645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bcdDevice': {'_value': '2.28', '_desc': None}, 143645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceSubClass': {'_value': '0', '_desc': None}, 144645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'idVendor': {'_value': '0x18d1', '_desc': 'Google Inc.'}, 145645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bcdUSB': {'_value': '2.00', '_desc': None}, 146645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceProtocol': {'_value': '0', '_desc': None}, 147645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDescriptorType': {'_value': '1', '_desc': None}, 148645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Configuration Descriptor': { 149645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bLength': {'_value': '9', '_desc': None}, 150645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'wTotalLength': {'_value': '62', '_desc': None}, 151645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bConfigurationValue': {'_value': '1', '_desc': None}, 152645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Interface Descriptor': { 153645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bLength': {'_value': '9', '_desc': None}, 154645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bAlternateSetting': {'_value': '0', '_desc': None}, 155645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bInterfaceNumber': {'_value': '1', '_desc': None}, 156645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bNumEndpoints': {'_value': '2', '_desc': None}, 157645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDescriptorType': {'_value': '4', '_desc': None}, 158645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bInterfaceSubClass': {'_value': '66', '_desc': None}, 159645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bInterfaceClass': { 160645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '255', 161645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': 'Vendor Specific Class' 162645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 163645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bInterfaceProtocol': {'_value': '1', '_desc': None}, 164645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Endpoint Descriptor': { 165645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bLength': {'_value': '7', '_desc': None}, 166645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bEndpointAddress': {'_value': '0x02', '_desc': 'EP 2 OUT'}, 167645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bInterval': {'_value': '0', '_desc': None}, 168645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDescriptorType': {'_value': '5', '_desc': None}, 169645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bmAttributes': { 170645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '2', 171645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Transfer': {'_value': 'Type', '_desc': 'Bulk'}, 172645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Usage': {'_value': 'Type', '_desc': 'Data'}, 173645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': None, 174645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Synch': {'_value': 'Type', '_desc': 'None'} 175645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 176645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'wMaxPacketSize': { 177645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '0x0040', 178645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': '1x 64 bytes' 179645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 180645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 181645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iInterface': {'_value': '0', '_desc': None} 182645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 183645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDescriptorType': {'_value': '2', '_desc': None}, 184645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iConfiguration': {'_value': '0', '_desc': None}, 185645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bmAttributes': { 186645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '0x80', 187645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': None, 188645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '(Bus': {'_value': 'Powered)', '_desc': None} 189645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 190645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bNumInterfaces': {'_value': '2', '_desc': None}, 191645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'MaxPower': {'_value': '500mA', '_desc': None} 192645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 193645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iSerial': {'_value': '3', '_desc': '01d2450ea194a93b'}, 194645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'idProduct': {'_value': '0x4ee2', '_desc': 'Nexus 4 (debug)'}, 195645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iManufacturer': {'_value': '1', '_desc': 'LGE'}, 196645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceClass': { 197645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '0', 198645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': '(Defined at Interface level)' 199645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 200645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iProduct': {'_value': '2', '_desc': 'Nexus 4'}, 201645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bMaxPacketSize0': {'_value': '64', '_desc': None}, 202645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bNumConfigurations': {'_value': '1', '_desc': None} 203645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 204645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'Device Qualifier (for other device speed)': { 205645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bLength': {'_value': '10', '_desc': None}, 206645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bNumConfigurations': {'_value': '1', '_desc': None}, 207645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceSubClass': {'_value': '0', '_desc': None}, 208645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bcdUSB': {'_value': '2.00', '_desc': None}, 209645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceProtocol': {'_value': '0', '_desc': None}, 210645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDescriptorType': {'_value': '6', '_desc': None}, 211645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bDeviceClass': { 212645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_value': '0', 213645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez '_desc': '(Defined at Interface level)' 214645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez }, 215645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'bMaxPacketSize0': {'_value': '64', '_desc': None} 216645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez } 217645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 218645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 219645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 220645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass LsusbTest(mock_calls.TestCase): 221645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Test Lsusb parsing.""" 222645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 223645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def testLsusb(self): 224645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez with self.assertCalls( 225645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 226645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb'], timeout=10), (None, DEVICE_LIST)), 227645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 228645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))): 229645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.assertDictEqual(lsusb.lsusb().pop(), EXPECTED_RESULT) 230645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 231645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def testGetSerial(self): 232645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez with self.assertCalls( 233645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 234645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb'], timeout=10), (None, DEVICE_LIST)), 235645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 236645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))): 237645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.assertEqual(lsusb.get_android_devices(), ['01d2450ea194a93b']) 238645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 239645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def testGetLsusbSerial(self): 240645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez with self.assertCalls( 241645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 242645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb'], timeout=10), (None, DEVICE_LIST)), 243645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez (mock.call.devil.utils.cmd_helper.GetCmdStatusAndOutputWithTimeout( 244645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ['lsusb', '-v', '-s', '003:007'], timeout=10), (None, RAW_OUTPUT))): 245645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez out = lsusb.lsusb().pop() 246645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.assertEqual(lsusb.get_lsusb_serial(out), '01d2450ea194a93b') 247645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 248645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 249645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezif __name__ == '__main__': 250645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez unittest.main() 251