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