This repository has been archived on 2025-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
Files
libcdio-osx/test/test-iso.py

174 lines
5.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python
"""Unit test for iso9660
Test some low-level ISO9660 routines
This is basically the same thing as libcdio's testiso9660.c"""
import unittest, sys, os
libdir = os.path.join(os.path.dirname(__file__),
'..', 'build', 'lib.linux-i686-2.5')
if libdir[-1] != os.path.sep:
libdir += os.path.sep
sys.path.insert(0, libdir)
libdir = os.path.join(os.path.dirname(__file__), '..')
if libdir[-1] != os.path.sep:
libdir += os.path.sep
sys.path.insert(0, libdir)
import pyiso9660
import iso9660
def is_eq(a, b):
if len(a) != len(b): return False
for i in range(len(a)):
if a[i] != b[i]:
print "position %d: %d != %d\n" % (i, a[i], b[i])
return False
return True
achars = ('!', '"', '%', '&', '(', ')', '*', '+', ',', '-', '.',
'/', '?', '<', '=', '>')
class ISO9660Tests(unittest.TestCase):
def test_chars(self):
"""Test ACHAR and DCHAR"""
bad = 0
c=ord('A')
while c<=ord('Z'):
if not pyiso9660.is_dchar(c):
print "Failed iso9660_is_achar test on %c" % c
bad += 1
if not pyiso9660.is_achar(c):
print "Failed iso9660_is_achar test on %c" % c
bad += 1
c += 1
self.assertEqual(True, bad==0, 'is_dchar & is_achar A..Z')
bad=0
c=ord('0')
while c<=ord('9'):
if not pyiso9660.is_dchar(c):
print "Failed iso9660_is_dchar test on %c" % c
bad += 1
if not pyiso9660.is_achar(c):
print "Failed iso9660_is_achar test on %c" % c
bad += 1
c += 1
self.assertEqual(True, bad==0, 'is_dchar & is_achar 0..9')
bad=0
i=0
while i<=13:
c=ord(achars[i])
if pyiso9660.is_dchar(c):
print "Should not pass is_dchar test on %c" % c
bad += 1
if not pyiso9660.is_achar(c):
print "Failed is_achar test on symbol %c" % c
bad += 1
i += 1
self.assertEqual(True, bad==0, 'is_dchar & is_achar symbols')
def test_strncpy_pad(self):
"""Test pyiso9660.strncpy_pad"""
dst = pyiso9660.strncpy_pad("1_3", 5, pyiso9660.DCHARS)
self.assertEqual(dst, "1_3 ", "strncpy_pad DCHARS")
dst = pyiso9660.strncpy_pad("ABC!123", 2, pyiso9660.ACHARS)
self.assertEqual(dst, "AB", "strncpy_pad ACHARS truncation")
def test_dirname(self):
"""Test pyiso9660.dirname_valid_p"""
self.assertEqual(False, pyiso9660.dirname_valid_p("/NOGOOD"),
"dirname_valid_p - /NOGOOD is no good.")
self.assertEqual(False,
pyiso9660.dirname_valid_p("LONGDIRECTORY/NOGOOD"),
"pyiso9660.dirname_valid_p - too long directory")
self.assertEqual(True, pyiso9660.dirname_valid_p("OKAY/DIR"),
"dirname_valid_p - OKAY/DIR should pass ")
self.assertEqual(False, pyiso9660.dirname_valid_p("OKAY/FILE.EXT"),
"pyiso9660.dirname_valid_p - OKAY/FILENAME.EXT")
def test_image_info(self):
"""Test retrieving image information"""
# The test ISO 9660 image
image_path="../data"
image_fname=os.path.join(image_path, "copying.iso")
iso = iso9660.ISO9660.IFS(source=image_fname)
self.assertNotEqual(iso, None, "Opening %s" % image_fname)
self.assertEqual(iso.get_application_id(),
"MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING",
"get_application_id()")
self.assertEqual(iso.get_system_id(), "LINUX",
"get_system_id() eq 'LINUX'")
self.assertEqual(iso.get_volume_id(), "CDROM",
"get_volume_id() eq 'CDROM'")
file_stats = iso.readdir('/')
okay_stats = [
['.', 23, 2048, 1, 2],
['..', 23, 2048, 1, 2],
['COPYING.;1', 24, 17992, 9, 1]
]
self.assertEqual(file_stats, okay_stats, "file stat info")
def test_pathname_valid(self):
"""Test pyiso9660.pathname_valid_p"""
self.assertEqual(True, pyiso9660.pathname_valid_p("OKAY/FILE.EXT"),
"pyiso9660.dirname_valid_p - OKAY/FILE.EXT ")
self.assertEqual(False,
pyiso9660.pathname_valid_p("OKAY/FILENAMELONG.EXT"),
'invalid pathname, long basename')
self.assertEqual(False,
pyiso9660.pathname_valid_p("OKAY/FILE.LONGEXT"),
"pathname_valid_p - long extension" )
dst = pyiso9660.pathname_isofy("this/file.ext", 1)
self.assertNotEqual(dst, "this/file.ext1", "iso9660_pathname_isofy")
def test_time(self):
"""Test time"""
import time
tm = time.localtime(0)
dtime = pyiso9660.set_dtime(tm[0], tm[1], tm[2], tm[3], tm[4], tm[5])
new_tm = pyiso9660.get_dtime(dtime, True)
### FIXME Don't know why the discrepancy, but there is an hour
### difference, perhaps daylight savings time.
### Versions before 0.77 have other bugs.
if new_tm is not None:
# if pyiso9660.VERSION_NUM < 77: new_tm[3] = tm[3]
new_tm[3] = tm[3]
self.assertEqual(True, is_eq(new_tm, tm), 'get_dtime(set_dtime())')
else:
self.assertEqual(True, False, 'get_dtime is None')
# if pyiso9660.VERSION_NUM >= 77:
# tm = time.gmtime(0)
# ltime = pyiso9660.set_ltime(tm[0], tm[1], tm[2], tm[3], tm[4],
# tm[5])
# new_tm = pyiso9660.get_ltime(ltime)
# self.assertEqual(True, is_eq(new_tm, tm),
# 'get_ltime(set_ltime())')
return
if __name__ == "__main__":
unittest.main()