Source: python-pycdlib
Version: 1.12.0+ds1-3
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20211228 ftbfs-bookworm

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> make[1]: pyversions: No such file or directory
> py3versions: no X-Python3-Version in control file, using supported versions
> pkgos-dh_auto_install --no-py2 --in-tmp
> + PKGOS_USE_PY2=yes
> + PKGOS_USE_PY3=yes
> + PKGOS_IN_TMP=no
> + PKGOS_USE_PY2=no
> + shift
> + PKGOS_IN_TMP=yes
> + shift
> + dpkg-parsechangelog -SSource
> + SRC_PKG_NAME=python-pycdlib
> + echo python-pycdlib
> + sed s/python-//
> + PY_MODULE_NAME=pycdlib
> + [ no = yes ]
> + [ yes = yes ]
> + py3versions -vr
> + PYTHON3S=3.10 3.9
> + [ no = yes ]
> + [ yes = yes ]
> + [ yes = yes ]
> + TARGET_DIR=tmp
> + pwd
> + python3.10 setup.py install --install-layout=deb --root 
> /<<PKGBUILDDIR>>/debian/tmp
> running install
> /usr/lib/python3/dist-packages/setuptools/command/install.py:34: 
> SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and 
> pip and other standards-based tools.
>   warnings.warn(
> running build
> running build_py
> creating build
> creating build/lib
> creating build/lib/pycdlib
> copying pycdlib/__init__.py -> build/lib/pycdlib
> copying pycdlib/dates.py -> build/lib/pycdlib
> copying pycdlib/backport_functools.py -> build/lib/pycdlib
> copying pycdlib/eltorito.py -> build/lib/pycdlib
> copying pycdlib/pycdlibexception.py -> build/lib/pycdlib
> copying pycdlib/udf.py -> build/lib/pycdlib
> copying pycdlib/rockridge.py -> build/lib/pycdlib
> copying pycdlib/pycdlib.py -> build/lib/pycdlib
> copying pycdlib/isohybrid.py -> build/lib/pycdlib
> copying pycdlib/headervd.py -> build/lib/pycdlib
> copying pycdlib/path_table_record.py -> build/lib/pycdlib
> copying pycdlib/facade.py -> build/lib/pycdlib
> copying pycdlib/dr.py -> build/lib/pycdlib
> copying pycdlib/inode.py -> build/lib/pycdlib
> copying pycdlib/pycdlibio.py -> build/lib/pycdlib
> copying pycdlib/utils.py -> build/lib/pycdlib
> running build_scripts
> creating build/scripts-3.10
> copying and adjusting tools/pycdlib-explorer -> build/scripts-3.10
> copying and adjusting tools/pycdlib-extract-files -> build/scripts-3.10
> copying and adjusting tools/pycdlib-genisoimage -> build/scripts-3.10
> changing mode of build/scripts-3.10/pycdlib-explorer from 644 to 755
> changing mode of build/scripts-3.10/pycdlib-extract-files from 644 to 755
> changing mode of build/scripts-3.10/pycdlib-genisoimage from 644 to 755
> running install_lib
> creating /<<PKGBUILDDIR>>/debian/tmp
> creating /<<PKGBUILDDIR>>/debian/tmp/usr
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/lib
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/__init__.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/dates.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/backport_functools.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/eltorito.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/pycdlibexception.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/udf.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/rockridge.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/pycdlib.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/isohybrid.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/headervd.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/path_table_record.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/facade.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/dr.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/inode.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/pycdlibio.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> copying build/lib/pycdlib/utils.py -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/__init__.py 
> to __init__.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/dates.py to 
> dates.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/backport_functools.py
>  to backport_functools.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/eltorito.py 
> to eltorito.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlibexception.py
>  to pycdlibexception.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/udf.py to 
> udf.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/rockridge.py
>  to rockridge.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlib.py 
> to pycdlib.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/isohybrid.py
>  to isohybrid.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/headervd.py 
> to headervd.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/path_table_record.py
>  to path_table_record.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/facade.py 
> to facade.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/dr.py to 
> dr.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/inode.py to 
> inode.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlibio.py
>  to pycdlibio.cpython-310.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/utils.py to 
> utils.cpython-310.pyc
> running install_data
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/share
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/share/man
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/share/man/man1
> copying man/pycdlib-explorer.1 -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/share/man/man1
> copying man/pycdlib-extract-files.1 -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/share/man/man1
> copying man/pycdlib-genisoimage.1 -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/share/man/man1
> running install_egg_info
> running egg_info
> creating pycdlib.egg-info
> writing pycdlib.egg-info/PKG-INFO
> writing dependency_links to pycdlib.egg-info/dependency_links.txt
> writing top-level names to pycdlib.egg-info/top_level.txt
> writing manifest file 'pycdlib.egg-info/SOURCES.txt'
> reading manifest file 'pycdlib.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> adding license file 'COPYING'
> writing manifest file 'pycdlib.egg-info/SOURCES.txt'
> Copying pycdlib.egg-info to 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib-1.12.0.egg-info
> Skipping SOURCES.txt
> running install_scripts
> creating /<<PKGBUILDDIR>>/debian/tmp/usr/bin
> copying build/scripts-3.10/pycdlib-genisoimage -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/bin
> copying build/scripts-3.10/pycdlib-extract-files -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/bin
> copying build/scripts-3.10/pycdlib-explorer -> 
> /<<PKGBUILDDIR>>/debian/tmp/usr/bin
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-genisoimage to 
> 755
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-extract-files to 
> 755
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-explorer to 755
> + pwd
> + python3.9 setup.py install --install-layout=deb --root 
> /<<PKGBUILDDIR>>/debian/tmp
> running install
> /usr/lib/python3/dist-packages/setuptools/command/install.py:34: 
> SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and 
> pip and other standards-based tools.
>   warnings.warn(
> running build
> running build_py
> running build_scripts
> creating build/scripts-3.9
> copying and adjusting tools/pycdlib-explorer -> build/scripts-3.9
> copying and adjusting tools/pycdlib-extract-files -> build/scripts-3.9
> copying and adjusting tools/pycdlib-genisoimage -> build/scripts-3.9
> changing mode of build/scripts-3.9/pycdlib-explorer from 644 to 755
> changing mode of build/scripts-3.9/pycdlib-extract-files from 644 to 755
> changing mode of build/scripts-3.9/pycdlib-genisoimage from 644 to 755
> running install_lib
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/__init__.py 
> to __init__.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/dates.py to 
> dates.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/backport_functools.py
>  to backport_functools.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/eltorito.py 
> to eltorito.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlibexception.py
>  to pycdlibexception.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/udf.py to 
> udf.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/rockridge.py
>  to rockridge.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlib.py 
> to pycdlib.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/isohybrid.py
>  to isohybrid.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/headervd.py 
> to headervd.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/path_table_record.py
>  to path_table_record.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/facade.py 
> to facade.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/dr.py to 
> dr.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/inode.py to 
> inode.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/pycdlibio.py
>  to pycdlibio.cpython-39.pyc
> byte-compiling 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib/utils.py to 
> utils.cpython-39.pyc
> running install_data
> running install_egg_info
> running egg_info
> writing pycdlib.egg-info/PKG-INFO
> writing dependency_links to pycdlib.egg-info/dependency_links.txt
> writing top-level names to pycdlib.egg-info/top_level.txt
> reading manifest file 'pycdlib.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> adding license file 'COPYING'
> writing manifest file 'pycdlib.egg-info/SOURCES.txt'
> removing 
> '/<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib-1.12.0.egg-info'
>  (and everything under it)
> Copying pycdlib.egg-info to 
> /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages/pycdlib-1.12.0.egg-info
> Skipping SOURCES.txt
> running install_scripts
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-genisoimage to 
> 755
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-extract-files to 
> 755
> changing mode of /<<PKGBUILDDIR>>/debian/tmp/usr/bin/pycdlib-explorer to 755
> + pwd
> + rm -rf /<<PKGBUILDDIR>>/debian/python*/usr/lib/python*/dist-packages/*.pth
> + pwd
> + rm -rf /<<PKGBUILDDIR>>/debian/tmp/usr/lib/python*/dist-packages/*.pth
> + pwd
> + [ -d /<<PKGBUILDDIR>>/debian/python-pycdlib/usr/bin ]
> set -e ; set -x ; for pyvers in 3.10 3.9; do \
>       PATH=$PATH:/<<PKGBUILDDIR>>/debian/tmp/usr/bin 
> PYTHONPATH=/<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages 
> python$pyvers -m pytest tests ; \
> done
> + 
> PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/<<PKGBUILDDIR>>/debian/tmp/usr/bin
>  PYTHONPATH=/<<PKGBUILDDIR>>/debian/tmp/usr/lib/python3/dist-packages 
> python3.10 -m pytest tests
> ============================= test session starts 
> ==============================
> platform linux -- Python 3.10.1, pytest-6.2.5, py-1.10.0, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, configfile: pytest.ini
> collected 1721 items
> 
> tests/integration/test_facade.py ....................................... [  
> 2%]
> ..................                                                       [  
> 3%]
> tests/integration/test_hybrid.py ....................................... [  
> 5%]
> ....................s..............F.................................... [  
> 9%]
> .........s.....................                                          [ 
> 11%]
> tests/integration/test_new.py .......................................... [ 
> 14%]
> ........................................................................ [ 
> 18%]
> ........................................................................ [ 
> 22%]
> ........................................................................ [ 
> 26%]
> ......................................................ssss.............. [ 
> 30%]
> ........................................................................ [ 
> 34%]
> ..................................................................s      [ 
> 38%]
> tests/integration/test_parse.py ........................................ [ 
> 41%]
> ....sss...FFF................F.......................................... [ 
> 45%]
> ...................................F.s............F.F................... [ 
> 49%]
> ......s.................                                                 [ 
> 50%]
> tests/tools/test_pycdlib_genisoimage.py .ssss.                           [ 
> 51%]
> tests/unit/test_dates.py .........................                       [ 
> 52%]
> tests/unit/test_dr.py .........................................          [ 
> 55%]
> tests/unit/test_eltorito.py ...............................              [ 
> 56%]
> tests/unit/test_headervd.py ............................................ [ 
> 59%]
> .......                                                                  [ 
> 59%]
> tests/unit/test_inode.py .......                                         [ 
> 60%]
> tests/unit/test_isohybrid.py ........................................... [ 
> 62%]
>                                                                          [ 
> 62%]
> tests/unit/test_ptr.py ........                                          [ 
> 63%]
> tests/unit/test_rockridge.py ........................................... [ 
> 65%]
> ........................................................................ [ 
> 69%]
> ........................................................................ [ 
> 74%]
> .....................................................                    [ 
> 77%]
> tests/unit/test_udf.py ................................................. [ 
> 80%]
> ........................................................................ [ 
> 84%]
> ........................................................................ [ 
> 88%]
> ........................................................................ [ 
> 92%]
> ........................................................................ [ 
> 96%]
> ................                                                         [ 
> 97%]
> tests/unit/test_utils.py ........................................        
> [100%]
> 
> =================================== FAILURES 
> ===================================
> __________________________ test_hybrid_sevendeepdirs 
> ___________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0')
> 
>     def test_hybrid_sevendeepdirs(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('sevendeepdirs')
>         outfile = str(indir)+'.iso'
>         numdirs = 8
>         x = indir
>         for i in range(1, 1+numdirs):
>             x = x.mkdir('dir%d' % i)
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
>         # Now open up the ISO with pycdlib and check some things out.
>         iso = pycdlib.PyCdlib()
>     
>         iso.open(str(outfile))
>     
>         iso.rm_directory('/DIR1/DIR2/DIR3/DIR4/DIR5/DIR6/DIR7/DIR8', 
> rr_name='dir8')
>     
> >       do_a_test(iso, check_sevendeepdirs)
> 
> tests/integration/test_hybrid.py:1622: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_hybrid.py:21: in do_a_test
>     check_func(iso, len(out.getvalue()))
> tests/integration/test_common.py:2340: in check_sevendeepdirs
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=3, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=3, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c86f94640>, rr = 
> True
> rr_nlinks = 3, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 2 == 3
> E            +  where 2 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87d34f90>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87d34f90> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c876f1dd0>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c876f1dd0> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8675f140>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8675f140> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c86f94640>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_hybrid_sevendeepdirs0/sevendeepdirs/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
>   23   474 
>   24   322 rr_moved
>   25   216 dir8
>   26   318 dir1
>   27   318 dir2
>   28   318 dir3
>   29   318 dir4
>   30   318 dir5
>   31   318 dir6
>   32   330 dir7
> Cache hit for 'dir8/.'
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    10
> Writing:   Directory tree cleanup                  Start Block 33
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 33
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 34
> Total extents scheduled to be written = 34
> Total translation table size: 0
> Total rockridge attributes bytes: 2167
> Total directory bytes: 18906
> Path table size(bytes): 122
> Done with: The File(s)                             Block(s)    0
> Max brk space used 43000
> 34 extents written (0 MB)
> ____________________________ test_parse_rr_deep_dir 
> ____________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0')
> 
>     def test_parse_rr_deep_dir(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('rrdeep')
>         outfile = str(indir)+'.iso'
>         
> indir.mkdir('dir1').mkdir('dir2').mkdir('dir3').mkdir('dir4').mkdir('dir5').mkdir('dir6').mkdir('dir7').mkdir('dir8')
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_deep_dir)
> 
> tests/integration/test_parse.py:706: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:2257: in check_rr_deep_dir
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c87e23d40>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c88267fb0>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c88267fb0> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b7b110>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b7b110> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c87e35c40>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c87e35c40> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c87e23d40>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_dir0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
>   23   474 
>   24   322 rr_moved
>   25   216 dir8
>   26   318 dir1
>   27   318 dir2
>   28   318 dir3
>   29   318 dir4
>   30   318 dir5
>   31   318 dir6
>   32   330 dir7
> Cache hit for 'dir8/.'
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    10
> Writing:   Directory tree cleanup                  Start Block 33
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 33
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 34
> Total extents scheduled to be written = 34
> Total translation table size: 0
> Total rockridge attributes bytes: 2167
> Total directory bytes: 18906
> Path table size(bytes): 122
> Done with: The File(s)                             Block(s)    0
> Max brk space used 43000
> 34 extents written (0 MB)
> ______________________________ test_parse_rr_deep 
> ______________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0')
> 
>     def test_parse_rr_deep(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('rrdeep')
>         outfile = str(indir)+'.iso'
>         
> indir.mkdir('dir1').mkdir('dir2').mkdir('dir3').mkdir('dir4').mkdir('dir5').mkdir('dir6').mkdir('dir7').mkdir('dir8')
>         with open(os.path.join(str(indir), 'dir1', 'dir2', 'dir3', 'dir4', 
> 'dir5', 'dir6', 'dir7', 'dir8', 'foo'), 'wb') as outfp:
>             outfp.write(b'foo\n')
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_deep)
> 
> tests/integration/test_parse.py:718: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:2268: in check_rr_deep
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c86b14140>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87ce7e20>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87ce7e20> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b816f0>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b816f0> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8675f5a0>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8675f5a0> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c86b14140>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
>   23   474 
>   24   322 rr_moved
>   25   332 dir8
>   26   318 dir1
>   27   318 dir2
>   28   318 dir3
>   29   318 dir4
>   30   318 dir5
>   31   318 dir6
>   32   330 dir7
> Cache hit for 'dir8/.'
>       34       34 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/foo
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    10
> Writing:   Directory tree cleanup                  Start Block 33
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 33
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 34
> Total extents scheduled to be written = 35
> Total translation table size: 0
> Total rockridge attributes bytes: 2242
> Total directory bytes: 18906
> Path table size(bytes): 122
> Done with: The File(s)                             Block(s)    1
> Max brk space used 43000
> 35 extents written (0 MB)
> _____________________________ test_parse_rr_deep2 
> ______________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20')
> 
>     def test_parse_rr_deep2(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('rrdeep')
>         outfile = str(indir)+'.iso'
>         
> indir.mkdir('dir1').mkdir('dir2').mkdir('dir3').mkdir('dir4').mkdir('dir5').mkdir('dir6').mkdir('dir7').mkdir('dir8').mkdir('dir9')
>         with open(os.path.join(str(indir), 'dir1', 'dir2', 'dir3', 'dir4', 
> 'dir5', 'dir6', 'dir7', 'dir8', 'dir9', 'foo'), 'wb') as outfp:
>             outfp.write(b'foo\n')
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_deep2)
> 
> tests/integration/test_parse.py:730: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:2281: in check_rr_deep2
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c86b14d40>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87015b20>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87015b20> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c879ce090>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c879ce090> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86b3e030>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86b3e030> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c86b14d40>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1
> Scanning /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
>   23   474 
>   24   322 rr_moved
>   25   330 dir8
>   26   320 dir9
>   27   318 dir1
>   28   318 dir2
>   29   318 dir3
>   30   318 dir4
>   31   318 dir5
>   32   318 dir6
>   33   330 dir7
> Cache hit for 'dir8/.'
> Cache hit for 'dir9/.'
> Cache hit for 'dir9/..'
>       35       35 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep20/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/foo
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    11
> Writing:   Directory tree cleanup                  Start Block 34
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 34
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 35
> Total extents scheduled to be written = 36
> Total translation table size: 0
> Total rockridge attributes bytes: 2452
> Total directory bytes: 20954
> Path table size(bytes): 134
> Done with: The File(s)                             Block(s)    1
> Max brk space used 43000
> 36 extents written (0 MB)
> __________________________ test_parse_rr_joliet_deep 
> ___________________________
> 
> tmpdir = local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0')
> 
>     def test_parse_rr_joliet_deep(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('rrjolietdeep')
>         outfile = str(indir)+'.iso'
>         
> indir.mkdir('dir1').mkdir('dir2').mkdir('dir3').mkdir('dir4').mkdir('dir5').mkdir('dir6').mkdir('dir7').mkdir('dir8')
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-J', '-o', str(outfile), 
> str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_joliet_deep)
> 
> tests/integration/test_parse.py:923: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:2776: in check_rr_joliet_deep
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=28, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c87716840>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c869d7c40>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c869d7c40> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86c092d0>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86c092d0> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86b2f760>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86b2f760> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c87716840>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_joliet_deep0/rrjolietdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
>   28   474 
>   29   322 rr_moved
>   30   216 dir8
>   31   318 dir1
>   32   318 dir2
>   33   318 dir3
>   34   318 dir4
>   35   318 dir5
>   36   318 dir6
>   37   330 dir7
> Cache hit for 'dir8/.'
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   Joliet Volume Descriptor                Start Block 17
> Done with: Joliet Volume Descriptor                Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 18
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 19
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 20
> Done with: Path table                              Block(s)    4
> Writing:   Joliet path table                       Start Block 24
> Done with: Joliet path table                       Block(s)    4
> Writing:   Directory tree                          Start Block 28
> Done with: Directory tree                          Block(s)    10
> Writing:   Joliet directory tree                   Start Block 38
> Done with: Joliet directory tree                   Block(s)    9
> Writing:   Directory tree cleanup                  Start Block 47
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 47
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 48
> Total extents scheduled to be written = 48
> Total translation table size: 0
> Total rockridge attributes bytes: 2167
> Total directory bytes: 18906
> Path table size(bytes): 122
> Done with: The File(s)                             Block(s)    0
> Max brk space used 43000
> 48 extents written (0 MB)
> ______________________ test_parse_duplicate_rrmoved_name 
> _______________________
> 
> tmpdir = 
> local('/tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0')
> 
>     def test_parse_duplicate_rrmoved_name(tmpdir):
>         iso = pycdlib.PyCdlib()
>         iso.new(rock_ridge='1.09')
>     
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('eltoritonofiles')
>         outfile = str(indir)+'.iso'
>         fdir = 
> indir.mkdir('A').mkdir('B').mkdir('C').mkdir('D').mkdir('E').mkdir('F')
>         fdir.mkdir('G').mkdir('1')
>         fdir.mkdir('H').mkdir('1')
>         with open(os.path.join(str(indir), 'A', 'B', 'C', 'D', 'E', 'F', 'G', 
> '1', 'first'), 'wb') as outfp:
>             outfp.write(b'first\n')
>         with open(os.path.join(str(indir), 'A', 'B', 'C', 'D', 'E', 'F', 'H', 
> '1', 'second'), 'wb') as outfp:
>             outfp.write(b'second\n')
>     
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_two_dirs_same_level)
> 
> tests/integration/test_parse.py:2305: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:3567: in check_rr_two_dirs_same_level
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c86b9a340>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c86aad260>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c86aad260> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c870292d0>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c870292d0> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86c04a50>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c86c04a50> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c86b9a340>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/H
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/H/1
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/G
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/G/1
> Using 1000 for  ./rr_moved/1 (1)
>   23   468 
>   24   432 rr_moved
>   25   336 1
>   26   336 1
>   27   312 A
>   28   312 B
>   29   312 C
>   30   312 D
>   31   312 E
>   32   420 F
>   33   324 H
>   34   324 G
> Cache hit for '1/.'
>       36       36 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/H/1/second
> Cache hit for '1/.'
>       37       37 
> /tmp/pytest-of-user42/pytest-11/test_parse_duplicate_rrmoved_n0/eltoritonofiles/A/B/C/D/E/F/G/1/first
> Cache hit for 'A/.'
> Cache hit for 'A/..'
> Cache hit for 'B/.'
> Cache hit for 'B/..'
> Cache hit for 'C/.'
> Cache hit for 'C/..'
> Cache hit for 'D/.'
> Cache hit for 'D/..'
> Cache hit for 'E/.'
> Cache hit for 'E/..'
> Cache hit for 'F/.'
> Cache hit for 'F/..'
> Cache hit for 'H/.'
> Cache hit for 'H/..'
> Cache hit for 'G/.'
> Cache hit for 'G/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    12
> Writing:   Directory tree cleanup                  Start Block 35
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 35
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 36
> Total extents scheduled to be written = 38
> Total translation table size: 0
> Total rockridge attributes bytes: 2810
> Total directory bytes: 22996
> Path table size(bytes): 128
> Done with: The File(s)                             Block(s)    2
> Max brk space used 43000
> 38 extents written (0 MB)
> _______________________ test_parse_rr_deep_weird_layout 
> ________________________
> 
> tmpdir = 
> local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0')
> 
>     def test_parse_rr_deep_weird_layout(tmpdir):
>         indir = tmpdir.mkdir('rrdeepweird')
>         outfile = str(indir) + '.iso'
>         absimp = 
> indir.mkdir('astroid').mkdir('astroid').mkdir('tests').mkdir('testdata').mkdir('python3').mkdir('data').mkdir('absimp')
>         sidepackage = absimp.mkdir('sidepackage')
>         with open(os.path.join(str(absimp), 'string.py'), 'wb') as outfp:
>             outfp.write(b'from __future__ import absolute_import, 
> print_functino\nimport string\nprint(string)\n')
>         with open(os.path.join(str(sidepackage), '__init__.py'), 'wb') as 
> outfp:
>             outfp.write(b'"""a side package with nothing in it\n"""\n')
>     
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-o', str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_deep_weird_layout)
> 
> tests/integration/test_parse.py:2495: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:3986: in check_rr_deep_weird_layout
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c871d2440>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c882d4d10>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c882d4d10> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c87173480>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c87173480> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8724fbc0>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c8724fbc0> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c871d2440>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3/data
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3/data/absimp
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3/data/absimp/sidepackage
>   23   480 
>   24   334 rr_moved
>   25   346 sidepackage
>   26   324 astroid
>   27   320 astroid
>   28   326 tests
>   29   324 testdata
>   30   318 python3
>   31   322 data
>   32   468 absimp
> Cache hit for 'sidepackage/.'
>       34       34 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3/data/absimp/sidepackage/__init__.py
> Cache hit for 'astroid/.'
> Cache hit for 'astroid/..'
> Cache hit for 'astroid/.'
> Cache hit for 'astroid/..'
> Cache hit for 'tests/.'
> Cache hit for 'tests/..'
> Cache hit for 'testdata/.'
> Cache hit for 'testdata/..'
> Cache hit for 'python3/.'
> Cache hit for 'python3/..'
> Cache hit for 'data/.'
> Cache hit for 'data/..'
> Cache hit for 'absimp/.'
> Cache hit for 'absimp/..'
>       35       35 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_deep_weird_layou0/rrdeepweird/astroid/astroid/tests/testdata/python3/data/absimp/string.py
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    10
> Writing:   Directory tree cleanup                  Start Block 33
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 33
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 34
> Total extents scheduled to be written = 36
> Total translation table size: 0
> Total rockridge attributes bytes: 2361
> Total directory bytes: 18912
> Path table size(bytes): 146
> Done with: The File(s)                             Block(s)    2
> Max brk space used 43000
> 36 extents written (0 MB)
> ________________________ test_parse_rr_hidden_relocated 
> ________________________
> 
> tmpdir = 
> local('/tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0')
> 
>     def test_parse_rr_hidden_relocated(tmpdir):
>         # First set things up, and generate the ISO with genisoimage.
>         indir = tmpdir.mkdir('rrdeep')
>         outfile = str(indir)+'.iso'
>         
> indir.mkdir('dir1').mkdir('dir2').mkdir('dir3').mkdir('dir4').mkdir('dir5').mkdir('dir6').mkdir('dir7').mkdir('dir8').mkdir('dir9')
>         with open(os.path.join(str(indir), 'dir1', 'dir2', 'dir3', 'dir4', 
> 'dir5', 'dir6', 'dir7', 'dir8', 'dir9', 'foo'), 'wb') as outfp:
>             outfp.write(b'foo\n')
>         subprocess.call(['genisoimage', '-v', '-v', '-iso-level', '1', 
> '-no-pad',
>                          '-rational-rock', '-hide-rr-moved', '-o', 
> str(outfile), str(indir)])
>     
> >       do_a_test(tmpdir, outfile, check_rr_relocated_hidden)
> 
> tests/integration/test_parse.py:2516: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> tests/integration/test_parse.py:21: in do_a_test
>     check_func(iso, os.stat(str(outfile)).st_size)
> tests/integration/test_common.py:4098: in check_rr_relocated_hidden
>     internal_check_root_dir_record(iso.pvd.root_dir_record, num_children=4, 
> data_length=2048, extent_location=23, rr=True, rr_nlinks=4, xa=False, 
> rr_onetwelve=False)
> tests/integration/test_common.py:289: in internal_check_root_dir_record
>     internal_check_dotdot_dir_record(root_dir_record.children[1], rr=rr, 
> rr_nlinks=rr_nlinks, xa=xa, rr_onetwelve=rr_onetwelve)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> _ 
> 
> dotdot_record = <pycdlib.dr.DirectoryRecord object at 0x7f9c86fe9040>, rr = 
> True
> rr_nlinks = 4, xa = False, rr_onetwelve = False
> 
>     def internal_check_dotdot_dir_record(dotdot_record, rr, rr_nlinks, xa, 
> rr_onetwelve):
>         # The file identifier for the 'dotdot' directory entry should be the 
> byte 1.
>         assert(dotdot_record.file_ident == b'\x01')
>         # The 'dotdot' directory entry should be a directory.
>         assert(dotdot_record.isdir == True)
>         # The 'dotdot' directory record length should be exactly 34 with no 
> extensions.
>         if rr:
>             if rr_onetwelve:
>                 expected_dr_len = 104
>             else:
>                 expected_dr_len = 102
>         else:
>             expected_dr_len = 34
>     
>         if xa:
>             expected_dr_len += 14
>     
>         assert(dotdot_record.dr_len == expected_dr_len)
>         # The 'dotdot' directory record is not the root.
>         assert(dotdot_record.is_root == False)
>         # The 'dotdot' directory record should have no children.
>         assert(len(dotdot_record.children) == 0)
>         assert(dotdot_record.file_flags == 2)
>     
>         if rr:
>             assert(dotdot_record.rock_ridge._initialized == True)
>             assert(dotdot_record.rock_ridge.dr_entries.sp_record == None)
>             if not rr_onetwelve:
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record != None)
>                 assert(dotdot_record.rock_ridge.dr_entries.rr_record.rr_flags 
> == 0x81)
>             assert(dotdot_record.rock_ridge.dr_entries.ce_record == None)
>             assert(dotdot_record.rock_ridge.dr_entries.px_record != None)
>             
> assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_mode == 
> 0o040555)
> >           
> > assert(dotdot_record.rock_ridge.dr_entries.px_record.posix_file_links == 
> > rr_nlinks)
> E           assert 3 == 4
> E            +  where 3 = <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87d168e0>.posix_file_links
> E            +    where <pycdlib.rockridge.RRPXRecord object at 
> 0x7f9c87d168e0> = <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b63060>.px_record
> E            +      where <pycdlib.rockridge.RockRidgeEntries object at 
> 0x7f9c86b63060> = <pycdlib.rockridge.RockRidge object at 
> 0x7f9c871e6ab0>.dr_entries
> E            +        where <pycdlib.rockridge.RockRidge object at 
> 0x7f9c871e6ab0> = <pycdlib.dr.DirectoryRecord object at 
> 0x7f9c86fe9040>.rock_ridge
> 
> tests/integration/test_common.py:416: AssertionError
> ----------------------------- Captured stderr call 
> -----------------------------
> I: -input-charset not specified, using utf-8 (detected in locale settings)
> genisoimage 1.1.11 (Linux)
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8
> Scanning 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
>   23   476 
>   24   322 .rr_moved
>   25   330 dir8
>   26   320 dir9
>   27   318 dir1
>   28   318 dir2
>   29   318 dir3
>   30   318 dir4
>   31   318 dir5
>   32   318 dir6
>   33   330 dir7
> Cache hit for 'dir8/.'
> Cache hit for 'dir9/.'
> Cache hit for 'dir9/..'
>       35       35 
> /tmp/pytest-of-user42/pytest-11/test_parse_rr_hidden_relocated0/rrdeep/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/foo
> Cache hit for 'dir1/.'
> Cache hit for 'dir1/..'
> Cache hit for 'dir2/.'
> Cache hit for 'dir2/..'
> Cache hit for 'dir3/.'
> Cache hit for 'dir3/..'
> Cache hit for 'dir4/.'
> Cache hit for 'dir4/..'
> Cache hit for 'dir5/.'
> Cache hit for 'dir5/..'
> Cache hit for 'dir6/.'
> Cache hit for 'dir6/..'
> Cache hit for 'dir7/.'
> Cache hit for 'dir7/..'
> Writing:   Initial Padblock                        Start Block 0
> Done with: Initial Padblock                        Block(s)    16
> Writing:   Primary Volume Descriptor               Start Block 16
> Done with: Primary Volume Descriptor               Block(s)    1
> Writing:   End Volume Descriptor                   Start Block 17
> Done with: End Volume Descriptor                   Block(s)    1
> Writing:   Version block                           Start Block 18
> Done with: Version block                           Block(s)    1
> Writing:   Path table                              Start Block 19
> Done with: Path table                              Block(s)    4
> Writing:   Directory tree                          Start Block 23
> Done with: Directory tree                          Block(s)    11
> Writing:   Directory tree cleanup                  Start Block 34
> Done with: Directory tree cleanup                  Block(s)    0
> Writing:   Extension record                        Start Block 34
> Done with: Extension record                        Block(s)    1
> Writing:   The File(s)                             Start Block 35
> Total extents scheduled to be written = 36
> Total translation table size: 0
> Total rockridge attributes bytes: 2453
> Total directory bytes: 20956
> Path table size(bytes): 134
> Done with: The File(s)                             Block(s)    1
> Max brk space used 43000
> 36 extents written (0 MB)
> =========================== short test summary info 
> ============================
> FAILED tests/integration/test_hybrid.py::test_hybrid_sevendeepdirs - assert 
> 2...
> FAILED tests/integration/test_parse.py::test_parse_rr_deep_dir - assert 3 == 4
> FAILED tests/integration/test_parse.py::test_parse_rr_deep - assert 3 == 4
> FAILED tests/integration/test_parse.py::test_parse_rr_deep2 - assert 3 == 4
> FAILED tests/integration/test_parse.py::test_parse_rr_joliet_deep - assert 3 
> ...
> FAILED tests/integration/test_parse.py::test_parse_duplicate_rrmoved_name - 
> a...
> FAILED tests/integration/test_parse.py::test_parse_rr_deep_weird_layout - 
> ass...
> FAILED tests/integration/test_parse.py::test_parse_rr_hidden_relocated - 
> asse...
> ================== 8 failed, 1697 passed, 16 skipped in 9.23s 
> ==================
> make[1]: *** [debian/rules:19: override_dh_auto_install] Error 1


The full build log is available from:
http://qa-logs.debian.net/2021/12/28/python-pycdlib_1.12.0+ds1-3_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please marking it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

Reply via email to