Changeset 432
- Timestamp:
- 23-03-11 20:40:47 (2 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 3 edited
-
ChangeLog (modified) (1 diff)
-
morituri/program/cdparanoia.py (modified) (6 diffs)
-
morituri/test/cdparanoia.progress.error (added)
-
morituri/test/test_program_cdparanoia.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChangeLog
r431 r432 1 2011-03-23 Thomas Vander Stichele <thomas at apestaart dot org> 2 3 * morituri/program/cdparanoia.py: 4 cdparanoia can hang indefinitely on scsi read errors. 5 For example, on some drives, when trying negative offsets. 6 Notice them, count them, and fail after 100. 7 * morituri/test/test_program_cdparanoia.py: 8 * morituri/test/cdparanoia.progress.error (added): 9 Add a test for this output. 10 11 2011-03-23 Thomas Vander Stichele <thomas at apestaart dot org> 12 13 * morituri/program/cdparanoia.py: 14 * morituri/test/test_program_cdparanoia.py: 15 16 1 17 2011-03-22 Thomas Vander Stichele <thomas at apestaart dot org> 2 18 -
trunk/morituri/program/cdparanoia.py
r428 r432 32 32 33 33 class FileSizeError(Exception): 34 35 message = None 36 34 37 """ 35 38 The given path does not have the expected size. … … 54 57 """, re.VERBOSE) 55 58 59 _ERROR_RE = re.compile("^scsi_read error:") 60 56 61 # from reading cdparanoia source code, it looks like offset is reported in 57 62 # number of single-channel samples, ie. 2 bytes per unit, and absolute … … 60 65 read = 0 # last [read] frame 61 66 wrote = 0 # last [wrote] frame 67 errors = 0 # count of number of scsi errors 62 68 _nframes = None # number of frames read on each [read] 63 69 _firstFrames = None # number of frames read on first [read] … … 93 99 elif function == 'wrote': 94 100 self._parse_wrote(wordOffset) 101 102 m = _ERROR_RE.search(line) 103 if m: 104 self.errors += 1 95 105 96 106 def _parse_read(self, wordOffset): … … 180 190 description = "Reading Track" 181 191 quality = None # set at end of reading 192 193 _MAXERROR = 100 # number of errors detected by parser 182 194 183 195 def __init__(self, path, table, start, stop, offset=0, device=None): … … 283 295 self._parser.parse(line) 284 296 297 # fail if too many errors 298 if self._parser.errors > self._MAXERROR: 299 self.debug('%d errors, terminating', self._parser.errors) 300 self._popen.terminate() 301 285 302 num = float(self._parser.wrote) - self._start 286 303 den = float(self._stop) - self._start -
trunk/morituri/test/test_program_cdparanoia.py
r254 r432 23 23 q = '%.01f %%' % (self._parser.getTrackQuality() * 100.0, ) 24 24 self.assertEquals(q, '99.7 %') 25 26 class ErrorTestCase(unittest.TestCase): 27 28 def setUp(self): 29 # report from a rip with offset -1164 causing scsi errors 30 path = os.path.join(os.path.dirname(__file__), 31 'cdparanoia.progress.error') 32 self._parser = cdparanoia.ProgressParser(start=0, stop=10800) 33 34 self._handle = open(path) 35 36 def testParse(self): 37 for line in self._handle.readlines(): 38 self._parser.parse(line) 39 40 q = '%.01f %%' % (self._parser.getTrackQuality() * 100.0, ) 41 self.assertEquals(q, '99.7 %') 42
Note: See TracChangeset
for help on using the changeset viewer.
