20
20
import unittest
21
21
import sys
22
22
import os
23
- from mock import MagicMock , patch
23
+ from mock import MagicMock , patch , call
24
24
25
25
# Mock the winreg and _winreg module for non-windows python
26
26
_winreg = MagicMock ()
29
29
30
30
from mbed_lstools .windows import MbedLsToolsWin7
31
31
32
- def _mounted_drives_check (drives ):
33
- """! Function to generate fake 'dir <drive letter>' responses
34
- @param drives Array of paths that should be considered mounted
35
- @return Returns Function that accepts an array that would be passed
36
- to _run_cli_process (ex ['dir', '<drive letter>']). Result of
37
- function mimics the result of _run_cli_process.
38
- """
39
- def cli (cmd ):
40
- for drive in drives :
41
- if drive .startswith (cmd [1 ]):
42
- break
43
- else :
44
- return (None ,
45
- 'The system cannot find the path specified.' ,
46
- 1 )
47
-
48
- return (('10/17/2017 12:27 PM <DIR> .\n '
49
- '10/17/2017 12:27 PM <DIR> ..' ),
50
- None ,
51
- 0 )
52
-
53
- return cli
54
-
55
-
56
32
class Win7TestCase (unittest .TestCase ):
57
33
""" Basic test cases checking trivial asserts
58
34
"""
@@ -78,12 +54,33 @@ def test_os_supported(self):
78
54
pass
79
55
80
56
def test_empty_reg (self ):
81
- _winreg .QueryInfoKey .return_value = (0 , 0 )
82
- self .lstool .find_candidates ()
83
- _winreg .OpenKey .assert_called_with (_winreg .HKEY_LOCAL_MACHINE ,
84
- 'SYSTEM\MountedDevices' )
85
- _winreg .QueryInfoKey .assert_called_with (_winreg .OpenKey .return_value )
86
- pass
57
+ value_dict = {
58
+ (None , 'SYSTEM\\ MountedDevices' ): [
59
+ ('\\ DosDevices\\ F:' ,
60
+ u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' .encode ('utf-16le' )),
61
+ ('\\ DosDevices\\ D:' ,
62
+ u'_??_USBSTOR#Disk&Ven_SEGGER&Prod_MSD_Volume&Rev_1.00#8&1b8e102b&0&000440035522&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' .encode ('utf-16le' ))],
63
+ ((None , 'SYSTEM\\ CurrentControlSet' ), 'Services\\ usbccgp\\ Enum' ): [
64
+ ('Count' , 0 ),
65
+ ('NextInstance' , 0 )
66
+ ]
67
+ }
68
+ key_dict = {
69
+ (None , 'SYSTEM\\ CurrentControlSet' ): ['Services\\ usbccgp\\ Enum' ],
70
+ (None , 'SYSTEM\\ CurrentControlSet' ): ['Enum\\ USB' ],
71
+ ((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ):
72
+ ['ROOT_HUB30' , 'VID_0416&PID_511E' , 'VID_0416&PID_511E&MI_00' ,
73
+ 'VID_8087&PID_0A2B' , 'Vid_80EE&Pid_CAFE' ]
74
+ }
75
+ self .setUpRegistry (value_dict , key_dict )
76
+ candidates = self .lstool .find_candidates ()
77
+ self .assertEqual (_winreg .OpenKey .mock_calls , [
78
+ call (_winreg .HKEY_LOCAL_MACHINE , 'SYSTEM\\ CurrentControlSet' ),
79
+ call ((_winreg .HKEY_LOCAL_MACHINE , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
80
+ call ((_winreg .HKEY_LOCAL_MACHINE , 'SYSTEM\\ CurrentControlSet' ), 'Services\\ usbccgp\\ Enum' ),
81
+ call ((_winreg .HKEY_LOCAL_MACHINE , 'SYSTEM\\ CurrentControlSet' ), 'Services\\ mbedComposite\\ Enum' )
82
+ ])
83
+ self .assertEqual (candidates , [])
87
84
88
85
def assertNoRegMut (self ):
89
86
"""Assert that the registry was not mutated in this test"""
@@ -128,20 +125,45 @@ def query_info_key(key):
128
125
len (value_dict .get (key , [])))
129
126
_winreg .QueryInfoKey .side_effect = query_info_key
130
127
131
- def test_one_nucleo_dev (self ):
128
+ def test_one_dev (self ):
132
129
value_dict = {
133
- (None , 'SYSTEM\MountedDevices' ): [
130
+ (None , 'SYSTEM\\ MountedDevices' ): [
131
+ ('\\ DosDevices\\ C:' , u'NOT A VALID MBED DRIVE' .encode ('utf-16le' )),
134
132
('\\ DosDevices\\ F:' ,
135
- u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' .encode ('utf-16le' )),
136
- ('\\ DosDevices\\ D:' ,
137
- u'_??_USBSTOR#Disk&Ven_SEGGER&Prod_MSD_Volume&Rev_1.00#8&1b8e102b&0&000440035522&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' .encode ('utf-16le' ))],
138
- ((((((None , 'SYSTEM\CurrentControlSet\Enum' ), 'USB' ),
139
- 'VID_0416&PID_511E' ), '000440035522' ), 'Device Parameters' ), 'PortName' ): ('COM7' , None )
133
+ u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#11010000442031204c364141303031313431303397969903&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' .encode ('utf-16le' ))
134
+ ],
135
+ ((None , 'SYSTEM\\ CurrentControlSet' ), 'Services\\ usbccgp\\ Enum' ): [
136
+ ('0' , 'USB\\ VID_5986&PID_0706\\ 5&31ac2c0b&0&8' ),
137
+ ('Count' , 2 ),
138
+ ('NextInstance' , 2 )
139
+ ],
140
+ ((None , 'SYSTEM\\ CurrentControlSet' ), 'Services\\ mbedComposite\\ Enum' ): [
141
+ ('0' , 'USB\\ VID_0D28&PID_0204\\ 11010000442031204c364141303031313431303397969903' ),
142
+ ('Count' , 1 ),
143
+ ('NextInstance' , 1 )
144
+ ],
145
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ), 'VID_5986&PID_0706\\ 5&31ac2c0b&0&8' ), 'ParentIdPrefix' ): ('6&3beba67&0' , None ),
146
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ), 'VID_5986&PID_0706&MI_00\\ 6&3beba67&0&0000' ),
147
+ 'Service' ): ('SPUVCbv' , None ),
148
+ (((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
149
+ 'VID_0D28&PID_0204\\ 11010000442031204c364141303031313431303397969903' ): [],
150
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
151
+ 'VID_0D28&PID_0204&MI_00\\ 11010000442031204c364141303031313431303397969903' ),
152
+ 'Service' ): ('USBSTOR' , None ),
153
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
154
+ 'VID_0D28&PID_0204&MI_01\\ 11010000442031204c364141303031313431303397969903' ),
155
+ 'Device Parameters' ): [('PortName' , 'COM7' )],
156
+ (((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
157
+ 'VID_0D28&PID_0204&MI_01\\ 11010000442031204c364141303031313431303397969903' ),
158
+ 'Device Parameters' ), 'PortName' ): ('COM7' , None ),
159
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
160
+ 'VID_0D28&PID_0204&MI_03\\ 11010000442031204c364141303031313431303397969903' ),
161
+ 'Service' ): ('HidUsb' , None )
140
162
}
141
163
key_dict = {
142
- (None , 'SYSTEM\CurrentControlSet\Enum ' ): ['USB ' ],
143
- (((( None , 'SYSTEM\CurrentControlSet\Enum' ), 'USB' ), 'VID_0416&PID_511E' ), '000440035522' ) : ['Device Parameters' , 'Properties ' ],
144
- ((None , 'SYSTEM\CurrentControlSet\Enum ' ), 'USB' ):
164
+ (None , 'SYSTEM\\ CurrentControlSet ' ): ['Services \\ usbccgp \\ Enum' , 'Services \\ mbedComposite \\ Enum ' ],
165
+ (None , 'SYSTEM\\ CurrentControlSet' ) : ['Enum \\ USB ' ],
166
+ ((None , 'SYSTEM\\ CurrentControlSet ' ), 'Enum \\ USB' ):
145
167
['ROOT_HUB30' , 'VID_0416&PID_511E' , 'VID_0416&PID_511E&MI_00' ,
146
168
'VID_0416&PID_511E&MI_01' , 'VID_046D&PID_C03D' ,
147
169
'VID_046D&PID_C313' , 'VID_046D&PID_C313&MI_00' ,
@@ -160,27 +182,30 @@ def test_one_nucleo_dev(self):
160
182
'VID_195D&PID_2047&MI_02' , 'VID_1A40&PID_0101' , 'VID_1FD2&PID_5003' ,
161
183
'VID_1FD2&PID_5003&MI_00' , 'VID_1FD2&PID_5003&MI_01' ,
162
184
'VID_413C&PID_2107' , 'VID_5986&PID_0706' , 'VID_5986&PID_0706&MI_00' ,
163
- 'VID_8087&PID_0A2B' , 'Vid_80EE&Pid_CAFE' ]
185
+ 'VID_8087&PID_0A2B' , 'Vid_80EE&Pid_CAFE' ],
186
+ (((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
187
+ 'VID_5986&PID_0706&MI_00' ): ['6&3beba67&0&0000' ],
188
+ (((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
189
+ 'VID_0D28&PID_0204&MI_00' ): ['11010000442031204c364141303031313431303397969903' ],
190
+ (((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
191
+ 'VID_0D28&PID_0204&MI_01' ): ['11010000442031204c364141303031313431303397969903' ],
192
+ ((((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
193
+ 'VID_0D28&PID_0204&MI_01' ), '11010000442031204c364141303031313431303397969903' ): ['Device Parameters' ],
194
+ (((None , 'SYSTEM\\ CurrentControlSet' ), 'Enum\\ USB' ),
195
+ 'VID_0D28&PID_0204&MI_03' ): ['11010000442031204c364141303031313431303397969903' ]
164
196
}
165
197
self .setUpRegistry (value_dict , key_dict )
166
198
167
199
with patch ('mbed_lstools.windows.MbedLsToolsWin7._run_cli_process' ) as _cliproc :
168
200
expected_info = {
169
- 'mount_point' : u'D :' ,
201
+ 'mount_point' : u'F :' ,
170
202
'serial_port' : 'COM7' ,
171
- 'target_id_usb_id' : u'000440035522 '
203
+ 'target_id_usb_id' : u'11010000442031204c364141303031313431303397969903 '
172
204
}
173
205
174
- _cliproc .side_effect = _mounted_drives_check (['C:' , 'D:' , 'F:' , 'Z:' ])
175
206
devices = self .lstool .find_candidates ()
176
207
self .assertIn (expected_info , devices )
177
208
self .assertNoRegMut ()
178
209
179
- _cliproc .side_effect = _mounted_drives_check (['C:' , 'F:' , 'Z:' ])
180
- devices = self .lstool .find_candidates ()
181
- self .assertNotIn (expected_info , devices )
182
- self .assertNoRegMut ()
183
-
184
-
185
210
if __name__ == '__main__' :
186
211
unittest .main ()
0 commit comments