Your message dated Sun, 3 Mar 2024 23:29:44 +0100
with message-id <ff64de7d-a266-483a-85b7-7b7a2d344...@debian.org>
and subject line Re: Bug#1002789 closed by Debian FTP Masters 
<ftpmas...@ftp-master.debian.org> (reply to Thomas Goirand <z...@debian.org>) 
(Bug#1002789: fixed in python-pycdlib 1.12.0+ds1-5)
has caused the Debian Bug report #1002789,
regarding python-pycdlib: FTBFS: failed tests
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1002789: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1002789
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
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.

--- End Message ---
--- Begin Message ---
On 3/1/24 15:36, Lucas Nussbaum wrote:
Control: reopen 1002789
Control: found 1002789 1.12.0+ds1-5

Hi all,

Unfortunately, I can still reproduce this failure with version
1.12.0+ds1-5, as shown in the attached build log.
Sorry about that.

Let us (Santiago or myself) know if it would be useful to provide a VM
to reproduce this issue.

Lucas

Hi Lucas,

How do you explain that the package builds fine on my laptop, and on the Debian buildd servers, as 1.12.0+ds1-6 (that only contains a cosmetic clean-up of .pytest_cache on clean, compared to -5) built find after I uploaded it? See:
https://buildd.debian.org/status/package.php?p=python-pycdlib&suite=sid

I'm therefore closing this bug again.

It's frustrating, I would have like to understand. Maybe something related to /tmp mounted as tmpfs vs a "real" partition?

Cheers,

Thomas Goirand (zigo)

--- End Message ---

Reply via email to