27
27
sys .modules ['_winreg' ] = _winreg
28
28
sys .modules ['winreg' ] = _winreg
29
29
30
- from mbed_lstools .windows import MbedLsToolsWin7
30
+ from mbed_lstools .windows import (MbedLsToolsWin7 , CompatibleIDsNotFoundException ,
31
+ _get_cached_mounted_points , _is_mbed_volume , _get_values_with_numeric_keys ,
32
+ _get_volumes , _get_usb_storage_devices , _determine_valid_non_composite_devices ,
33
+ _determine_subdevice_capability )
31
34
32
35
class Win7TestCase (unittest .TestCase ):
33
36
""" Basic test cases checking trivial asserts
@@ -41,10 +44,15 @@ def setUp(self):
41
44
root_logger .setLevel (logging .DEBUG )
42
45
del logging
43
46
_winreg .HKEY_LOCAL_MACHINE = None
47
+ _winreg .OpenKey .reset_mock ()
44
48
_winreg .OpenKey .side_effect = None
49
+ _winreg .EnumValue .reset_mock ()
45
50
_winreg .EnumValue .side_effect = None
51
+ _winreg .EnumKey .reset_mock ()
46
52
_winreg .EnumKey .side_effect = None
53
+ _winreg .QueryValue .reset_mock ()
47
54
_winreg .QueryValue .side_effect = None
55
+ _winreg .QueryInfoKey .reset_mock ()
48
56
_winreg .QueryInfoKey .side_effect = None
49
57
_winreg .CreateKey .reset_mock ()
50
58
_winreg .CreateKeyEx .reset_mock ()
@@ -128,6 +136,215 @@ def query_info_key(key):
128
136
len (value_dict .get (key , [])))
129
137
_winreg .QueryInfoKey .side_effect = query_info_key
130
138
139
+ def test_get_values_with_numeric_keys (self ):
140
+ dummy_key = 'dummy_key'
141
+ with patch ('mbed_lstools.windows._iter_vals' ) as _iter_vals :
142
+ _iter_vals .return_value = [
143
+ ('0' , True ),
144
+ ('1' , True ),
145
+ ('Count' , False ),
146
+ ('NextInstance' , False ),
147
+ ]
148
+
149
+ values = _get_values_with_numeric_keys (dummy_key )
150
+ _iter_vals .assert_called_once_with (dummy_key )
151
+ self .assertEqual (len (values ), 2 )
152
+ self .assertTrue (all (v is True for v in values ))
153
+
154
+ _iter_vals .reset_mock ()
155
+ _iter_vals .side_effect = OSError
156
+
157
+ self .assertEqual (_get_values_with_numeric_keys (dummy_key ), [])
158
+
159
+ def test_is_mbed_volume (self ):
160
+ self .assertTrue (_is_mbed_volume (u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' ))
161
+ self .assertTrue (_is_mbed_volume (u'_??_USBSTOR#Disk&Ven_mbed&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' ))
162
+ self .assertFalse (_is_mbed_volume (u'_??_USBSTOR#Disk&Ven_Invalid&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' ))
163
+ self .assertFalse (_is_mbed_volume (u'_??_USBSTOR#Disk&Ven_invalid&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}' ))
164
+
165
+ def test_get_cached_mount_points (self ):
166
+ dummy_val = 'dummy_val'
167
+ volume_string_1 = u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#0240000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}'
168
+ volume_string_2 = u'_??_USBSTOR#Disk&Ven_MBED&Prod_VFS&Rev_0.1#1234000032044e4500367009997b00086781000097969900&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}'
169
+ with patch ('mbed_lstools.windows._iter_vals' ) as _iter_vals , \
170
+ patch ('mbed_lstools.windows._is_mbed_volume' ) as _is_mbed_volume :
171
+ _winreg .OpenKey .return_value = dummy_val
172
+ _iter_vals .return_value = [
173
+ ('dummy_device' , 'this is not a valid volume string' ),
174
+ ('\\ DosDevices\\ D:' ,
175
+ volume_string_1 .encode ('utf-16le' )),
176
+ ('\\ DosDevices\\ invalid_drive' ,
177
+ volume_string_2 .encode ('utf-16le' ))
178
+ ]
179
+ _is_mbed_volume .return_value = True
180
+
181
+ result = _get_cached_mounted_points ()
182
+
183
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
184
+ 'SYSTEM\\ MountedDevices' )
185
+ _iter_vals .assert_called_once_with (dummy_val )
186
+ _is_mbed_volume .assert_has_calls ([
187
+ call (volume_string_1 ),
188
+ call (volume_string_2 )
189
+ ])
190
+ self .assertEqual (result , [
191
+ {
192
+ 'mount_point' : 'D:' ,
193
+ 'volume_string' : volume_string_1
194
+ }
195
+ ])
196
+
197
+ _winreg .OpenKey .reset_mock ()
198
+ _winreg .OpenKey .side_effect = OSError
199
+ self .assertEqual (_get_cached_mounted_points (), [])
200
+
201
+
202
+ def test_get_volumes (self ):
203
+ dummy_key = 'dummy_key'
204
+ volume_strings = [
205
+ 'dummy_volume_1' ,
206
+ 'dummy_volume_2' ,
207
+ ]
208
+ with patch ('mbed_lstools.windows._get_values_with_numeric_keys' ) as _num_keys , \
209
+ patch ('mbed_lstools.windows._is_mbed_volume' ) as _is_mbed_volume :
210
+ _winreg .OpenKey .return_value = dummy_key
211
+ _num_keys .return_value = volume_strings
212
+ _is_mbed_volume .return_value = True
213
+
214
+ result = _get_volumes ()
215
+
216
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
217
+ 'SYSTEM\\ CurrentControlSet\\ Services\\ volume\\ Enum' )
218
+ _num_keys .assert_called_once_with (dummy_key )
219
+ self .assertEqual (result , volume_strings )
220
+
221
+ _winreg .OpenKey .reset_mock ()
222
+ _winreg .OpenKey .side_effect = OSError
223
+ _num_keys .reset_mock ()
224
+
225
+ result = _get_volumes ()
226
+
227
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
228
+ 'SYSTEM\\ CurrentControlSet\\ Services\\ volume\\ Enum' )
229
+ _num_keys .assert_not_called ()
230
+ self .assertEqual (result , [])
231
+
232
+ def test_get_usb_storage_devices (self ):
233
+ dummy_key = 'dummy_key'
234
+ volume_strings = [
235
+ 'dummy_usb_storage_1' ,
236
+ 'dummy_usb_storage_2' ,
237
+ ]
238
+ with patch ('mbed_lstools.windows._get_values_with_numeric_keys' ) as _num_keys , \
239
+ patch ('mbed_lstools.windows._is_mbed_volume' ) as _is_mbed_volume :
240
+ _winreg .OpenKey .return_value = dummy_key
241
+ _num_keys .return_value = volume_strings
242
+ _is_mbed_volume .return_value = True
243
+
244
+ result = _get_usb_storage_devices ()
245
+
246
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
247
+ 'SYSTEM\\ CurrentControlSet\\ Services\\ USBSTOR\\ Enum' )
248
+ _num_keys .assert_called_once_with (dummy_key )
249
+ self .assertEqual (result , volume_strings )
250
+
251
+ _winreg .OpenKey .reset_mock ()
252
+ _winreg .OpenKey .side_effect = OSError
253
+ _num_keys .reset_mock ()
254
+
255
+ result = _get_usb_storage_devices ()
256
+
257
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
258
+ 'SYSTEM\\ CurrentControlSet\\ Services\\ USBSTOR\\ Enum' )
259
+ _num_keys .assert_not_called ()
260
+ self .assertEqual (result , [])
261
+
262
+ def test_determine_valid_non_composite_devices (self ):
263
+ dummy_full_path = 'dummy_full_path'
264
+ dummy_target_id = 'dummy_target_id'
265
+ dummy_mount_point = 'dummy_mount_point'
266
+ devices = [
267
+ {
268
+ 'full_path' : dummy_full_path ,
269
+ 'entry_key_string' : dummy_target_id
270
+ }
271
+ ]
272
+ target_id_usb_id_mount_point_map = {
273
+ dummy_target_id : dummy_mount_point
274
+ }
275
+ dummy_key = 'dummy_key'
276
+
277
+ _winreg .OpenKey .return_value = dummy_key
278
+
279
+ with patch ('mbed_lstools.windows._determine_subdevice_capability' ) as _capability :
280
+ _capability .return_value = 'msd'
281
+
282
+ result = _determine_valid_non_composite_devices (devices , target_id_usb_id_mount_point_map )
283
+
284
+ device_key_string = 'SYSTEM\\ CurrentControlSet\\ Enum\\ ' + dummy_full_path
285
+ _winreg .OpenKey .assert_called_once_with (_winreg .HKEY_LOCAL_MACHINE ,
286
+ device_key_string )
287
+ _capability .assert_called_once_with (dummy_key )
288
+ self .assertEqual (result , {
289
+ dummy_target_id : {
290
+ 'target_id_usb_id' : dummy_target_id ,
291
+ 'mount_point' : dummy_mount_point
292
+ }
293
+ })
294
+
295
+ def test_determine_subdevice_capability (self ):
296
+ dummy_key = 'dummy_key'
297
+
298
+ _winreg .QueryValueEx .return_value = (
299
+ [
300
+ u'USB\\ DevClass_00&SubClass_00&Prot_00' ,
301
+ u'USB\\ DevClass_00&SubClass_00' ,
302
+ u'USB\\ DevClass_00' ,
303
+ u'USB\\ COMPOSITE'
304
+ ],
305
+ 7
306
+ )
307
+ capability = _determine_subdevice_capability (dummy_key )
308
+ _winreg .QueryValueEx .assert_called_once_with (dummy_key , 'CompatibleIDs' )
309
+ self .assertEqual (capability , 'composite' )
310
+
311
+ _winreg .QueryValueEx .reset_mock ()
312
+ _winreg .QueryValueEx .return_value = (
313
+ [
314
+ u'USB\\ Class_08&SubClass_06&Prot_50' ,
315
+ u'USB\\ Class_08&SubClass_06' ,
316
+ u'USB\\ Class_08'
317
+ ],
318
+ 7
319
+ )
320
+ capability = _determine_subdevice_capability (dummy_key )
321
+ _winreg .QueryValueEx .assert_called_once_with (dummy_key , 'CompatibleIDs' )
322
+ self .assertEqual (capability , 'msd' )
323
+
324
+ _winreg .QueryValueEx .reset_mock ()
325
+ _winreg .QueryValueEx .return_value = (
326
+ [
327
+ u'USB\\ Class_02&SubClass_02&Prot_01' ,
328
+ u'USB\\ Class_02&SubClass_02' ,
329
+ u'USB\\ Class_02'
330
+ ],
331
+ 7
332
+ )
333
+ capability = _determine_subdevice_capability (dummy_key )
334
+ _winreg .QueryValueEx .assert_called_once_with (dummy_key , 'CompatibleIDs' )
335
+ self .assertEqual (capability , 'serial' )
336
+
337
+ _winreg .QueryValueEx .reset_mock ()
338
+ _winreg .QueryValueEx .side_effect = OSError
339
+ try :
340
+ _determine_subdevice_capability (dummy_key )
341
+ exception = False
342
+ except CompatibleIDsNotFoundException as e :
343
+ exception = True
344
+ self .assertTrue (exception )
345
+ _winreg .QueryValueEx .assert_called_once_with (dummy_key , 'CompatibleIDs' )
346
+
347
+
131
348
def test_one_composite_dev (self ):
132
349
value_dict = {
133
350
(None , 'SYSTEM\\ MountedDevices' ): [
@@ -180,7 +397,6 @@ def test_one_composite_dev(self):
180
397
self .assertIn (expected_info , devices )
181
398
self .assertNoRegMut ()
182
399
183
-
184
400
def test_one_non_composite_dev (self ):
185
401
value_dict = {
186
402
(None , 'SYSTEM\\ MountedDevices' ): [
@@ -217,7 +433,6 @@ def test_one_non_composite_dev(self):
217
433
self .assertIn (expected_info , devices )
218
434
self .assertNoRegMut ()
219
435
220
-
221
436
def test_mount_point_ready (self ):
222
437
with patch ('mbed_lstools.windows.MbedLsToolsWin7._run_cli_process' ) as _cliproc :
223
438
_cliproc .return_value = ("dummy" , "" , 0 )
0 commit comments