11import unittest
22import os
3- import glob
4- import time
53import shutil
64import overrides_hack
75
8- from utils import create_sparse_tempfile , create_lio_device , delete_lio_device , fake_utils , TestTags , tag_test , write_file , run_command , required_plugins
6+ from utils import create_sparse_tempfile , create_lio_device , delete_lio_device , fake_utils , TestTags , tag_test , required_plugins , setup_scsi_debug , clean_scsi_debug
97
108import gi
119gi .require_version ('GLib' , '2.0' )
@@ -59,29 +57,6 @@ def _clean_loop(self):
5957 pass
6058 os .unlink (self .loop_dev_file )
6159
62- def _setup_scsi_debug (self ):
63- res , _out , _err = run_command ('modprobe scsi_debug' )
64- self .assertEqual (res , 0 )
65- dirs = []
66- while len (dirs ) < 1 :
67- dirs = glob .glob ('/sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block' )
68- time .sleep (0.1 )
69- self .scsi_debug_dev = os .listdir (dirs [0 ])
70- self .assertEqual (len (self .scsi_debug_dev ), 1 )
71- self .scsi_debug_dev = '/dev/' + self .scsi_debug_dev [0 ]
72- self .assertTrue (os .path .exists (self .scsi_debug_dev ))
73-
74- def _clean_scsi_debug (self ):
75- try :
76- device = self .scsi_debug_dev .split ('/' )[- 1 ]
77- if os .path .exists ('/sys/block/' + device ):
78- self .write_file ('/sys/block/%s/device/delete' % device , '1' )
79- while os .path .exists (device ):
80- time .sleep (0.1 )
81- self .run_command ('modprobe -r scsi_debug' )
82- except :
83- pass
84-
8560 @tag_test (TestTags .NOSTORAGE )
8661 def test_plugin_version (self ):
8762 self .assertEqual (BlockDev .get_plugin_soname (BlockDev .Plugin .SMART ), "libbd_smartmontools.so.3" )
@@ -132,8 +107,8 @@ def test_ata_info(self):
132107 BlockDev .smart_ata_get_info (self .loop_dev , [BlockDev .ExtraArg .new ("--device=ata" , "" )])
133108
134109 # scsi_debug
135- self ._setup_scsi_debug ()
136- self .addCleanup (self ._clean_scsi_debug )
110+ self .scsi_debug_dev = setup_scsi_debug ()
111+ self .addCleanup (clean_scsi_debug , self .scsi_debug_dev )
137112 msg = r"Error parsing smartctl JSON data: The member .ata_smart_data. is not defined in the object at the current position."
138113 with self .assertRaisesRegex (GLib .GError , msg ):
139114 BlockDev .smart_ata_get_info (self .scsi_debug_dev , None )
@@ -280,8 +255,8 @@ def test_smart_enable_disable(self):
280255 BlockDev .smart_set_enabled (self .loop_dev , True , [BlockDev .ExtraArg .new ("--device=ata" , "" )])
281256
282257 # scsi_debug
283- self ._setup_scsi_debug ()
284- self .addCleanup (self ._clean_scsi_debug )
258+ self .scsi_debug_dev = setup_scsi_debug ()
259+ self .addCleanup (clean_scsi_debug , self .scsi_debug_dev )
285260 BlockDev .smart_set_enabled (self .scsi_debug_dev , False )
286261 BlockDev .smart_set_enabled (self .scsi_debug_dev , True )
287262 BlockDev .smart_set_enabled (self .scsi_debug_dev , False , [BlockDev .ExtraArg .new ("--device=scsi" , "" )])
@@ -344,8 +319,8 @@ def test_smart_selftest(self):
344319 BlockDev .smart_device_self_test (self .loop_dev , t , [BlockDev .ExtraArg .new ("--device=scsi" , "" )])
345320
346321 # scsi_debug
347- self ._setup_scsi_debug ()
348- self .addCleanup (self ._clean_scsi_debug )
322+ self .scsi_debug_dev = setup_scsi_debug ()
323+ self .addCleanup (clean_scsi_debug , self .scsi_debug_dev )
349324 for t in [BlockDev .SmartSelfTestOp .OFFLINE , BlockDev .SmartSelfTestOp .SHORT ,
350325 BlockDev .SmartSelfTestOp .LONG , BlockDev .SmartSelfTestOp .CONVEYANCE ,
351326 BlockDev .SmartSelfTestOp .ABORT ]:
@@ -374,6 +349,7 @@ def test_scsi_info(self):
374349
375350 # LIO device (SCSI)
376351 self ._setup_lio ()
352+ self .addCleanup (self ._clean_lio )
377353 msg = r"Error getting SCSI SMART info: Some SMART or other ATA command to the disk failed, or there was a checksum error in a SMART data structure."
378354 with self .assertRaisesRegex (GLib .GError , msg ):
379355 BlockDev .smart_scsi_get_info (self .lio_dev , None )
@@ -396,8 +372,8 @@ def test_scsi_info(self):
396372 BlockDev .smart_scsi_get_info (self .loop_dev , [BlockDev .ExtraArg .new ("--device=ata" , "" )])
397373
398374 # scsi_debug
399- self ._setup_scsi_debug ()
400- self .addCleanup (self ._clean_scsi_debug )
375+ self .scsi_debug_dev = setup_scsi_debug ()
376+ self .addCleanup (clean_scsi_debug , self .scsi_debug_dev )
401377 msg = r"Error getting SCSI SMART info: Some SMART or other ATA command to the disk failed, or there was a checksum error in a SMART data structure."
402378 with self .assertRaisesRegex (GLib .GError , msg ):
403379 BlockDev .smart_scsi_get_info (self .scsi_debug_dev , None )
0 commit comments