2008-11-23 23:17:02 -05:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
"""Unit test for cdio
|
|
|
|
|
|
|
|
|
|
Note: for compatibility with old unittest 1.46 we won't use assertTrue
|
|
|
|
|
or assertFalse."""
|
|
|
|
|
import unittest, sys, os
|
|
|
|
|
|
2008-11-27 22:13:44 -05:00
|
|
|
libdir = os.path.join(os.path.dirname(__file__),
|
|
|
|
|
'..', 'build', 'lib.linux-i686-2.5')
|
2008-11-23 23:17:02 -05:00
|
|
|
if libdir[-1] != os.path.sep:
|
|
|
|
|
libdir += os.path.sep
|
|
|
|
|
sys.path.insert(0, libdir)
|
|
|
|
|
import pycdio
|
|
|
|
|
import cdio
|
|
|
|
|
|
|
|
|
|
class CdioTests(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def test_ops(self):
|
|
|
|
|
"""Test running miscellaneous operations
|
|
|
|
|
No assumption about the CD-ROM drives is made, so
|
|
|
|
|
we're just going to run operations and see that they
|
|
|
|
|
don't crash."""
|
|
|
|
|
self.device = cdio.Device()
|
|
|
|
|
if pycdio.VERSION_NUM >= 76:
|
|
|
|
|
# FIXME: Broken on Darwin?
|
|
|
|
|
# self.device.open()
|
|
|
|
|
self.device.have_ATAPI()
|
|
|
|
|
# FIXME: Broken on Darwin?
|
|
|
|
|
# self.device.get_media_changed()
|
|
|
|
|
self.assertEqual(True, True, "Test misc operations")
|
|
|
|
|
|
|
|
|
|
def test_device_default(self):
|
|
|
|
|
"""Test getting default device"""
|
|
|
|
|
result1=cdio.get_default_device_driver(pycdio.DRIVER_DEVICE)
|
|
|
|
|
result2=cdio.get_default_device_driver()
|
|
|
|
|
self.assertEqual(result1, result2,
|
|
|
|
|
"get_default_device with/out parameters")
|
|
|
|
|
self.device = cdio.Device()
|
|
|
|
|
result2=pycdio.get_device()
|
|
|
|
|
if result1 is not None:
|
|
|
|
|
self.assertEqual(result1[0], result2)
|
|
|
|
|
# Now try getting device using driver that we got back
|
|
|
|
|
try:
|
|
|
|
|
device=cdio.Device(driver_id=result1[1])
|
|
|
|
|
result1 = device.get_device()
|
|
|
|
|
self.assertEqual(result1, result2,
|
|
|
|
|
"get_default_device using driver name")
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def test_exceptions(self):
|
|
|
|
|
"""Test that various routines raise proper exceptions"""
|
|
|
|
|
self.device = cdio.Device()
|
|
|
|
|
# No CD or or CD image has been set yet. So these fail
|
|
|
|
|
try:
|
|
|
|
|
lsn = self.device.get_disc_last_lsn()
|
|
|
|
|
except IOError:
|
|
|
|
|
self.assertEqual(True, True, "get_last_lsn() IO Error")
|
|
|
|
|
except cdio.DriverError:
|
|
|
|
|
self.assertEqual(True, True, "get_last_lsn() DriverError")
|
|
|
|
|
else:
|
|
|
|
|
self.assertTrue(False, "get_last_lsn() should raise error")
|
|
|
|
|
self.assertRaises(IOError, self.device.get_disc_mode)
|
|
|
|
|
try:
|
|
|
|
|
track = self.device.get_num_tracks()
|
|
|
|
|
except IOError:
|
|
|
|
|
self.assertEqual(True, True, "get_num_tracks() IO Error")
|
|
|
|
|
except cdio.DriverError:
|
|
|
|
|
self.assertEqual(True, True, "get_num_tracks() DriverError")
|
|
|
|
|
except cdio.TrackError:
|
|
|
|
|
self.assertEqual(True, True, "get_num_tracks() TrackError")
|
|
|
|
|
else:
|
|
|
|
|
self.assertTrue(False, "get_last_lsn() should raise error")
|
|
|
|
|
self.assertRaises(IOError, self.device.get_driver_name)
|
|
|
|
|
self.assertRaises(cdio.DriverUninitError,
|
|
|
|
|
self.device.get_media_changed)
|
|
|
|
|
self.assertRaises(IOError, self.device.open, "***Invalid device***")
|
|
|
|
|
|
|
|
|
|
def test_have_image_drivers(self):
|
|
|
|
|
"""Test that we have image drivers"""
|
|
|
|
|
result = cdio.have_driver('CDRDAO')
|
|
|
|
|
self.assertEqual(True, result, "Have cdrdrao driver via string")
|
|
|
|
|
result = cdio.have_driver(pycdio.DRIVER_CDRDAO)
|
|
|
|
|
self.assertEqual(True, result, "Have cdrdrao driver via driver_id")
|
|
|
|
|
result = cdio.have_driver('NRG')
|
|
|
|
|
self.assertEqual(True, result, "Have NRG driver via string")
|
|
|
|
|
result = cdio.have_driver(pycdio.DRIVER_NRG)
|
|
|
|
|
self.assertEqual(True, result, "Have NRG driver via driver_id")
|
|
|
|
|
result = cdio.have_driver('BIN/CUE')
|
|
|
|
|
self.assertEqual(True, result, "Have BIN/CUE driver via string")
|
|
|
|
|
result = cdio.have_driver(pycdio.DRIVER_BINCUE)
|
|
|
|
|
self.assertEqual(True, result, "Have BIN/CUE driver via driver_id")
|
|
|
|
|
|
|
|
|
|
def test_tocfile(self):
|
|
|
|
|
"""Test functioning of cdrdao image routines"""
|
|
|
|
|
## TOC reading needs to be done in the directory where the
|
|
|
|
|
## TOC/BIN files reside.
|
|
|
|
|
olddir=os.getcwd()
|
|
|
|
|
os.chdir('.')
|
|
|
|
|
tocfile="cdda.toc"
|
|
|
|
|
device = cdio.Device(tocfile, pycdio.DRIVER_CDRDAO)
|
|
|
|
|
ok, vendor, model, revision = device.get_hwinfo()
|
|
|
|
|
self.assertEqual(True, ok, "get_hwinfo ok")
|
|
|
|
|
self.assertEqual('libcdio', vendor, "get_hwinfo vendor")
|
|
|
|
|
self.assertEqual('cdrdao', model, "get_hwinfo cdrdao")
|
|
|
|
|
# Test known values of various access parameters:
|
|
|
|
|
# access mode, driver name via string and via driver_id
|
|
|
|
|
# and cue name
|
|
|
|
|
result = device.get_arg("access-mode")
|
|
|
|
|
self.assertEqual(result, 'image', 'get_arg("access_mode")',)
|
|
|
|
|
result = device.get_driver_name()
|
|
|
|
|
self.assertEqual(result, 'CDRDAO', 'get_driver_name')
|
|
|
|
|
result = device.get_driver_id()
|
|
|
|
|
self.assertEqual(result, pycdio.DRIVER_CDRDAO, 'get_driver_id')
|
|
|
|
|
result = device.get_arg("source")
|
|
|
|
|
self.assertEqual(result, tocfile, 'get_arg("source")')
|
|
|
|
|
result = device.get_media_changed()
|
|
|
|
|
self.assertEqual(False, result, "tocfile: get_media_changed")
|
|
|
|
|
# Test getting is_tocfile
|
|
|
|
|
result = cdio.is_tocfile(tocfile)
|
|
|
|
|
self.assertEqual(True, result, "is_tocfile(tocfile)")
|
|
|
|
|
result = cdio.is_nrg(tocfile)
|
|
|
|
|
self.assertEqual(False, result, "is_nrgfile(tocfile)")
|
|
|
|
|
result = cdio.is_device(tocfile)
|
|
|
|
|
self.assertEqual(False, result, "is_device(tocfile)")
|
|
|
|
|
self.assertRaises(cdio.DriverUnsupportedError,
|
|
|
|
|
device.set_blocksize, 2048)
|
|
|
|
|
self.assertRaises(cdio.DriverUnsupportedError,
|
|
|
|
|
device.set_speed, 5)
|
|
|
|
|
device.close()
|
|
|
|
|
os.chdir(olddir)
|
|
|
|
|
|
|
|
|
|
def test_read(self):
|
|
|
|
|
"""Test functioning of read routines"""
|
|
|
|
|
cuefile="./../data/isofs-m1.cue"
|
|
|
|
|
device = cdio.Device(source=cuefile)
|
|
|
|
|
# Read the ISO Primary Volume descriptor
|
|
|
|
|
blocks, data=device.read_sectors(16, pycdio.READ_MODE_M1F1)
|
|
|
|
|
self.assertEqual(data[1:6], 'CD001')
|
|
|
|
|
self.assertEqual(blocks, 1)
|
|
|
|
|
blocks, data=device.read_data_blocks(26)
|
|
|
|
|
self.assertEqual(data[6:32], 'GNU GENERAL PUBLIC LICENSE')
|
|
|
|
|
|
|
|
|
|
def test_bincue(self):
|
|
|
|
|
"""Test functioning of BIN/CUE image routines"""
|
|
|
|
|
cuefile="./cdda.cue"
|
|
|
|
|
device = cdio.Device(source=cuefile)
|
|
|
|
|
# Test known values of various access parameters:
|
|
|
|
|
# access mode, driver name via string and via driver_id
|
|
|
|
|
# and cue name
|
|
|
|
|
result = device.get_arg("access-mode")
|
|
|
|
|
self.assertEqual(result, 'image', 'get_arg("access_mode")',)
|
|
|
|
|
result = device.get_driver_name()
|
|
|
|
|
self.assertEqual(result, 'BIN/CUE', 'get_driver_name')
|
|
|
|
|
result = device.get_driver_id()
|
|
|
|
|
self.assertEqual(result, pycdio.DRIVER_BINCUE, 'get_driver_id')
|
|
|
|
|
result = device.get_arg("cue")
|
|
|
|
|
self.assertEqual(result, cuefile, 'get_arg("cue")')
|
|
|
|
|
# Test getting is_binfile and is_cuefile
|
|
|
|
|
binfile = cdio.is_cuefile(cuefile)
|
|
|
|
|
self.assertEqual(True, binfile != None, "is_cuefile(cuefile)")
|
|
|
|
|
cuefile2 = cdio.is_binfile(binfile)
|
|
|
|
|
# Could check that cuefile2 == cuefile, but some OS's may
|
|
|
|
|
# change the case of files
|
|
|
|
|
self.assertEqual(True, cuefile2 != None, "is_cuefile(binfile)")
|
|
|
|
|
result = cdio.is_tocfile(cuefile)
|
|
|
|
|
self.assertEqual(False, result, "is_tocfile(tocfile)")
|
|
|
|
|
ok, vendor, model, revision = device.get_hwinfo()
|
|
|
|
|
self.assertEqual(True, ok, "get_hwinfo ok")
|
|
|
|
|
self.assertEqual('libcdio', vendor, "get_hwinfo vendor")
|
|
|
|
|
self.assertEqual('CDRWIN', model, "get_hwinfo model")
|
|
|
|
|
result = cdio.is_device(cuefile)
|
|
|
|
|
self.assertEqual(False, result, "is_device(tocfile)")
|
|
|
|
|
result = device.get_media_changed()
|
|
|
|
|
self.assertEqual(False, result, "binfile: get_media_changed")
|
|
|
|
|
if pycdio.VERSION_NUM >= 77:
|
|
|
|
|
# There's a bug in libcdio 0.76 that causes these to crash
|
|
|
|
|
self.assertRaises(cdio.DriverUnsupportedError,
|
|
|
|
|
device.set_blocksize, 2048)
|
|
|
|
|
self.assertRaises(cdio.DriverUnsupportedError,
|
|
|
|
|
device.set_speed, 5)
|
|
|
|
|
device.close()
|
|
|
|
|
|
|
|
|
|
def test_cdda(self):
|
|
|
|
|
"""Test functioning CD-DA"""
|
|
|
|
|
device = cdio.Device()
|
|
|
|
|
cuefile="./cdda.cue"
|
|
|
|
|
device.open(cuefile)
|
|
|
|
|
result = device.get_disc_mode()
|
|
|
|
|
self.assertEqual(result, 'CD-DA', 'get_disc_mode')
|
|
|
|
|
self.assertEqual(device.get_mcn(), '0000010271955', 'get_mcn')
|
|
|
|
|
self.assertRaises(cdio.DriverUnsupportedError,
|
|
|
|
|
device.get_last_session)
|
|
|
|
|
# self.assertRaises(IOError, device.get_joliet_level)
|
|
|
|
|
result = device.get_num_tracks()
|
|
|
|
|
self.assertEqual(result, 1, 'get_num_tracks')
|
|
|
|
|
disc_last_lsn = device.get_disc_last_lsn()
|
|
|
|
|
self.assertEqual(disc_last_lsn, 302, 'get_disc_last_lsn')
|
|
|
|
|
t=device.get_last_track()
|
|
|
|
|
self.assertEqual(t.track, 1, 'get_last_track')
|
|
|
|
|
self.assertEqual(t.get_last_lsn(), 301, '(track) get_last_lsn')
|
|
|
|
|
self.assertEqual(device.get_track_for_lsn(t.get_last_lsn()).track,
|
|
|
|
|
t.track)
|
|
|
|
|
t=device.get_first_track()
|
|
|
|
|
self.assertEqual(t.track, 1, 'get_first_track')
|
|
|
|
|
self.assertEqual(t.get_format(), 'audio', 'get_track_format')
|
|
|
|
|
device.close()
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|