sbuild (Debian sbuild) 0.91.5 (17 December 2025) on carme.larted.org.uk +==============================================================================+ | libtest-mockfile-perl 0.039-1 (amd64) Sat, 28 Mar 2026 06:01:39 +0000 | +==============================================================================+ Package: libtest-mockfile-perl Version: 0.039-1 Source Version: 0.039-1 Distribution: sid Machine Architecture: amd64 Host Architecture: amd64 Build Architecture: amd64 Build Type: full I: Setting up the chroot... I: Creating chroot session... I: Setting up log color... +------------------------------------------------------------------------------+ | Chroot Setup Commands Sat, 28 Mar 2026 06:01:41 +0000 | +------------------------------------------------------------------------------+ /usr/share/debomatic/sbuildcommands/chroot-setup-commands/dpkg-speedup libtest-mockfile-perl_0.039-1 sid amd64 -------------------------------------------------------------------------------------------------------------- I: Finished running '/usr/share/debomatic/sbuildcommands/chroot-setup-commands/dpkg-speedup libtest-mockfile-perl_0.039-1 sid amd64'. Finished processing commands. -------------------------------------------------------------------------------- I: Setting up apt archive... +------------------------------------------------------------------------------+ | Update chroot Sat, 28 Mar 2026 06:01:41 +0000 | +------------------------------------------------------------------------------+ Hit:1 http://deb.debian.org/debian unstable InRelease Hit:2 http://deb.debian.org/debian sid InRelease Reading package lists... Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. +------------------------------------------------------------------------------+ | Fetch source files Sat, 28 Mar 2026 06:01:47 +0000 | +------------------------------------------------------------------------------+ Local sources ------------- /srv/debomatic/incoming/libtest-mockfile-perl_0.039-1.dsc exists in /srv/debomatic/incoming; copying to chroot +------------------------------------------------------------------------------+ | Install package build dependencies Sat, 28 Mar 2026 06:01:48 +0000 | +------------------------------------------------------------------------------+ Setup apt archive ----------------- Merged Build-Depends: debhelper-compat (= 13), build-essential, libfile-slurper-perl, liboverload-filecheck-perl, libtest-mockmodule-perl, libtest-simple-perl, libtest2-harness-perl, libtest2-plugin-nowarnings-perl, libtest2-suite-perl, libtest2-tools-explain-perl, libtext-glob-perl, perl Filtered Build-Depends: debhelper-compat (= 13), build-essential, libfile-slurper-perl, liboverload-filecheck-perl, libtest-mockmodule-perl, libtest-simple-perl, libtest2-harness-perl, libtest2-plugin-nowarnings-perl, libtest2-suite-perl, libtest2-tools-explain-perl, libtext-glob-perl, perl dpkg-deb: building package 'sbuild-build-depends-main-dummy' in '/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive/sbuild-build-depends-main-dummy.deb'. Ign:1 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ InRelease Get:2 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ Release [609 B] Ign:3 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ Release.gpg Get:4 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ Sources [946 B] Get:5 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ Packages [866 B] Fetched 2421 B in 0s (188 kB/s) Reading package lists... Reading package lists... Install main build dependencies (apt-based resolver) ---------------------------------------------------- Installing build dependencies Reading package lists... Building dependency tree... Reading state information... Solving dependencies... The following additional packages will be installed: autoconf automake autopoint autotools-dev bsdextrautils debhelper dh-autoreconf dh-strip-nondeterminism dwz file gettext gettext-base groff-base intltool-debian libarchive-zip-perl libdata-uuid-perl libdebhelper-perl libelf1t64 libfile-slurper-perl libfile-stripnondeterminism-perl libfilter-perl libgoto-file-perl libimporter-perl liblong-jump-perl libmagic-mgc libmagic1t64 liboverload-filecheck-perl libpipeline1 libscope-guard-perl libsub-identify-perl libsuper-perl libtest-mockmodule-perl libtest-simple-perl libtest2-harness-perl libtest2-plugin-memusage-perl libtest2-plugin-nowarnings-perl libtest2-plugin-uuid-perl libtest2-tools-explain-perl libtext-glob-perl libtool libuchardet0 libuuid-perl libxml2-16 libyaml-tiny-perl m4 man-db po-debconf sensible-utils Suggested packages: autoconf-archive gnu-standards autoconf-doc dh-make gettext-doc libasprintf-dev libgettextpo-dev gnulib-l10n groff libmodule-pluggable-perl libterm-readkey-perl libterm-size-any-perl libtool-doc gfortran | fortran95-compiler m4-doc apparmor less www-browser libmail-box-perl Recommended packages: curl | wget | lynx libperlio-utf8-strict-perl libarchive-cpio-perl libltdl-dev libmail-sendmail-perl The following NEW packages will be installed: autoconf automake autopoint autotools-dev bsdextrautils debhelper dh-autoreconf dh-strip-nondeterminism dwz file gettext gettext-base groff-base intltool-debian libarchive-zip-perl libdata-uuid-perl libdebhelper-perl libelf1t64 libfile-slurper-perl libfile-stripnondeterminism-perl libfilter-perl libgoto-file-perl libimporter-perl liblong-jump-perl libmagic-mgc libmagic1t64 liboverload-filecheck-perl libpipeline1 libscope-guard-perl libsub-identify-perl libsuper-perl libtest-mockmodule-perl libtest-simple-perl libtest2-harness-perl libtest2-plugin-memusage-perl libtest2-plugin-nowarnings-perl libtest2-plugin-uuid-perl libtest2-tools-explain-perl libtext-glob-perl libtool libuchardet0 libuuid-perl libxml2-16 libyaml-tiny-perl m4 man-db po-debconf sbuild-build-depends-main-dummy sensible-utils 0 upgraded, 49 newly installed, 0 to remove and 0 not upgraded. Need to get 12.3 MB of archives. After this operation, 45.3 MB of additional disk space will be used. Get:1 copy:/build/libtest-mockfile-perl-2fwAwc/resolver-mNfG5Y/apt_archive ./ sbuild-build-depends-main-dummy 0.invalid.0 [948 B] Get:2 http://deb.debian.org/debian unstable/main amd64 sensible-utils all 0.0.26 [27.0 kB] Get:3 http://deb.debian.org/debian unstable/main amd64 libmagic-mgc amd64 1:5.46-5+b1 [338 kB] Get:4 http://deb.debian.org/debian unstable/main amd64 libmagic1t64 amd64 1:5.46-5+b1 [110 kB] Get:5 http://deb.debian.org/debian unstable/main amd64 file amd64 1:5.46-5+b1 [43.8 kB] Get:6 http://deb.debian.org/debian unstable/main amd64 gettext-base amd64 0.23.2-2 [242 kB] Get:7 http://deb.debian.org/debian unstable/main amd64 libuchardet0 amd64 0.0.8-2+b1 [68.8 kB] Get:8 http://deb.debian.org/debian unstable/main amd64 groff-base amd64 1.23.0-10 [1194 kB] Get:9 http://deb.debian.org/debian unstable/main amd64 bsdextrautils amd64 2.41.3-4 [98.9 kB] Get:10 http://deb.debian.org/debian unstable/main amd64 libpipeline1 amd64 1.5.8-2 [42.1 kB] Get:11 http://deb.debian.org/debian unstable/main amd64 man-db amd64 2.13.1-1 [1469 kB] Get:12 http://deb.debian.org/debian unstable/main amd64 m4 amd64 1.4.21-1 [332 kB] Get:13 http://deb.debian.org/debian unstable/main amd64 autoconf all 2.72-6 [494 kB] Get:14 http://deb.debian.org/debian unstable/main amd64 autotools-dev all 20240727.1 [60.2 kB] Get:15 http://deb.debian.org/debian unstable/main amd64 automake all 1:1.18.1-4 [877 kB] Get:16 http://deb.debian.org/debian unstable/main amd64 autopoint all 0.23.2-2 [770 kB] Get:17 http://deb.debian.org/debian unstable/main amd64 libdebhelper-perl all 13.31 [75.7 kB] Get:18 http://deb.debian.org/debian unstable/main amd64 libtool all 2.5.4-9 [540 kB] Get:19 http://deb.debian.org/debian unstable/main amd64 dh-autoreconf all 22 [12.2 kB] Get:20 http://deb.debian.org/debian unstable/main amd64 libarchive-zip-perl all 1.68-1 [104 kB] Get:21 http://deb.debian.org/debian unstable/main amd64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Get:22 http://deb.debian.org/debian unstable/main amd64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Get:23 http://deb.debian.org/debian unstable/main amd64 libelf1t64 amd64 0.194-4 [183 kB] Get:24 http://deb.debian.org/debian unstable/main amd64 dwz amd64 0.16-4 [108 kB] Get:25 http://deb.debian.org/debian unstable/main amd64 libxml2-16 amd64 2.15.2+dfsg-0.1 [641 kB] Get:26 http://deb.debian.org/debian unstable/main amd64 gettext amd64 0.23.2-2 [1684 kB] Get:27 http://deb.debian.org/debian unstable/main amd64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get:28 http://deb.debian.org/debian unstable/main amd64 po-debconf all 1.0.22 [216 kB] Get:29 http://deb.debian.org/debian unstable/main amd64 debhelper all 13.31 [932 kB] Get:30 http://deb.debian.org/debian unstable/main amd64 libdata-uuid-perl amd64 1.227-2 [18.4 kB] Get:31 http://deb.debian.org/debian unstable/main amd64 libfile-slurper-perl all 0.014-1 [8560 B] Get:32 http://deb.debian.org/debian unstable/main amd64 libfilter-perl amd64 1.65-1 [64.4 kB] Get:33 http://deb.debian.org/debian unstable/main amd64 libgoto-file-perl all 0.005-2 [6880 B] Get:34 http://deb.debian.org/debian unstable/main amd64 libimporter-perl all 0.026-2 [25.0 kB] Get:35 http://deb.debian.org/debian unstable/main amd64 liblong-jump-perl all 0.000001-2 [6328 B] Get:36 http://deb.debian.org/debian unstable/main amd64 liboverload-filecheck-perl amd64 0.014-1 [31.6 kB] Get:37 http://deb.debian.org/debian unstable/main amd64 libscope-guard-perl all 0.21-2 [8212 B] Get:38 http://deb.debian.org/debian unstable/main amd64 libsub-identify-perl amd64 0.14-4 [11.0 kB] Get:39 http://deb.debian.org/debian unstable/main amd64 libsuper-perl all 1.20190531-1 [11.5 kB] Get:40 http://deb.debian.org/debian unstable/main amd64 libtest-mockmodule-perl all 0.180.0-1 [15.3 kB] Get:41 http://deb.debian.org/debian unstable/main amd64 libtest-simple-perl all 1.302219-1 [754 kB] Get:42 http://deb.debian.org/debian unstable/main amd64 libtest2-plugin-memusage-perl all 0.002003-2 [5272 B] Get:43 http://deb.debian.org/debian unstable/main amd64 libuuid-perl amd64 0.37-1 [45.9 kB] Get:44 http://deb.debian.org/debian unstable/main amd64 libtest2-plugin-uuid-perl all 0.002010-1 [11.4 kB] Get:45 http://deb.debian.org/debian unstable/main amd64 libyaml-tiny-perl all 1.76-1 [29.8 kB] Get:46 http://deb.debian.org/debian unstable/main amd64 libtest2-harness-perl all 1.000163-1 [522 kB] Get:47 http://deb.debian.org/debian unstable/main amd64 libtest2-plugin-nowarnings-perl all 0.10-1 [15.8 kB] Get:48 http://deb.debian.org/debian unstable/main amd64 libtest2-tools-explain-perl all 0.02-2 [9684 B] Get:49 http://deb.debian.org/debian unstable/main amd64 libtext-glob-perl all 0.11-3 [7676 B] Preconfiguring packages ... Fetched 12.3 MB in 0s (65.1 MB/s) Selecting previously unselected package sensible-utils. (Reading database ... 23239 files and directories currently installed.) Preparing to unpack .../00-sensible-utils_0.0.26_all.deb ... Unpacking sensible-utils (0.0.26) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../01-libmagic-mgc_1%3a5.46-5+b1_amd64.deb ... Unpacking libmagic-mgc (1:5.46-5+b1) ... Selecting previously unselected package libmagic1t64:amd64. Preparing to unpack .../02-libmagic1t64_1%3a5.46-5+b1_amd64.deb ... Unpacking libmagic1t64:amd64 (1:5.46-5+b1) ... Selecting previously unselected package file. Preparing to unpack .../03-file_1%3a5.46-5+b1_amd64.deb ... Unpacking file (1:5.46-5+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../04-gettext-base_0.23.2-2_amd64.deb ... Unpacking gettext-base (0.23.2-2) ... Selecting previously unselected package libuchardet0:amd64. Preparing to unpack .../05-libuchardet0_0.0.8-2+b1_amd64.deb ... Unpacking libuchardet0:amd64 (0.0.8-2+b1) ... Selecting previously unselected package groff-base. Preparing to unpack .../06-groff-base_1.23.0-10_amd64.deb ... Unpacking groff-base (1.23.0-10) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../07-bsdextrautils_2.41.3-4_amd64.deb ... Unpacking bsdextrautils (2.41.3-4) ... Selecting previously unselected package libpipeline1:amd64. Preparing to unpack .../08-libpipeline1_1.5.8-2_amd64.deb ... Unpacking libpipeline1:amd64 (1.5.8-2) ... Selecting previously unselected package man-db. Preparing to unpack .../09-man-db_2.13.1-1_amd64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../10-m4_1.4.21-1_amd64.deb ... Unpacking m4 (1.4.21-1) ... Selecting previously unselected package autoconf. Preparing to unpack .../11-autoconf_2.72-6_all.deb ... Unpacking autoconf (2.72-6) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../12-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../13-automake_1%3a1.18.1-4_all.deb ... Unpacking automake (1:1.18.1-4) ... Selecting previously unselected package autopoint. Preparing to unpack .../14-autopoint_0.23.2-2_all.deb ... Unpacking autopoint (0.23.2-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../15-libdebhelper-perl_13.31_all.deb ... Unpacking libdebhelper-perl (13.31) ... Selecting previously unselected package libtool. Preparing to unpack .../16-libtool_2.5.4-9_all.deb ... Unpacking libtool (2.5.4-9) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../17-dh-autoreconf_22_all.deb ... Unpacking dh-autoreconf (22) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../18-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../19-libfile-stripnondeterminism-perl_1.15.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.15.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../20-dh-strip-nondeterminism_1.15.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.15.0-1) ... Selecting previously unselected package libelf1t64:amd64. Preparing to unpack .../21-libelf1t64_0.194-4_amd64.deb ... Unpacking libelf1t64:amd64 (0.194-4) ... Selecting previously unselected package dwz. Preparing to unpack .../22-dwz_0.16-4_amd64.deb ... Unpacking dwz (0.16-4) ... Selecting previously unselected package libxml2-16:amd64. Preparing to unpack .../23-libxml2-16_2.15.2+dfsg-0.1_amd64.deb ... Unpacking libxml2-16:amd64 (2.15.2+dfsg-0.1) ... Selecting previously unselected package gettext. Preparing to unpack .../24-gettext_0.23.2-2_amd64.deb ... Unpacking gettext (0.23.2-2) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../25-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../26-po-debconf_1.0.22_all.deb ... Unpacking po-debconf (1.0.22) ... Selecting previously unselected package debhelper. Preparing to unpack .../27-debhelper_13.31_all.deb ... Unpacking debhelper (13.31) ... Selecting previously unselected package libdata-uuid-perl. Preparing to unpack .../28-libdata-uuid-perl_1.227-2_amd64.deb ... Unpacking libdata-uuid-perl (1.227-2) ... Selecting previously unselected package libfile-slurper-perl. Preparing to unpack .../29-libfile-slurper-perl_0.014-1_all.deb ... Unpacking libfile-slurper-perl (0.014-1) ... Selecting previously unselected package libfilter-perl. Preparing to unpack .../30-libfilter-perl_1.65-1_amd64.deb ... Unpacking libfilter-perl (1.65-1) ... Selecting previously unselected package libgoto-file-perl. Preparing to unpack .../31-libgoto-file-perl_0.005-2_all.deb ... Unpacking libgoto-file-perl (0.005-2) ... Selecting previously unselected package libimporter-perl. Preparing to unpack .../32-libimporter-perl_0.026-2_all.deb ... Unpacking libimporter-perl (0.026-2) ... Selecting previously unselected package liblong-jump-perl. Preparing to unpack .../33-liblong-jump-perl_0.000001-2_all.deb ... Unpacking liblong-jump-perl (0.000001-2) ... Selecting previously unselected package liboverload-filecheck-perl. Preparing to unpack .../34-liboverload-filecheck-perl_0.014-1_amd64.deb ... Unpacking liboverload-filecheck-perl (0.014-1) ... Selecting previously unselected package libscope-guard-perl. Preparing to unpack .../35-libscope-guard-perl_0.21-2_all.deb ... Unpacking libscope-guard-perl (0.21-2) ... Selecting previously unselected package libsub-identify-perl. Preparing to unpack .../36-libsub-identify-perl_0.14-4_amd64.deb ... Unpacking libsub-identify-perl (0.14-4) ... Selecting previously unselected package libsuper-perl. Preparing to unpack .../37-libsuper-perl_1.20190531-1_all.deb ... Unpacking libsuper-perl (1.20190531-1) ... Selecting previously unselected package libtest-mockmodule-perl. Preparing to unpack .../38-libtest-mockmodule-perl_0.180.0-1_all.deb ... Unpacking libtest-mockmodule-perl (0.180.0-1) ... Selecting previously unselected package libtest-simple-perl. Preparing to unpack .../39-libtest-simple-perl_1.302219-1_all.deb ... Unpacking libtest-simple-perl (1.302219-1) ... Selecting previously unselected package libtest2-plugin-memusage-perl. Preparing to unpack .../40-libtest2-plugin-memusage-perl_0.002003-2_all.deb ... Unpacking libtest2-plugin-memusage-perl (0.002003-2) ... Selecting previously unselected package libuuid-perl. Preparing to unpack .../41-libuuid-perl_0.37-1_amd64.deb ... Unpacking libuuid-perl (0.37-1) ... Selecting previously unselected package libtest2-plugin-uuid-perl. Preparing to unpack .../42-libtest2-plugin-uuid-perl_0.002010-1_all.deb ... Unpacking libtest2-plugin-uuid-perl (0.002010-1) ... Selecting previously unselected package libyaml-tiny-perl. Preparing to unpack .../43-libyaml-tiny-perl_1.76-1_all.deb ... Unpacking libyaml-tiny-perl (1.76-1) ... Selecting previously unselected package libtest2-harness-perl. Preparing to unpack .../44-libtest2-harness-perl_1.000163-1_all.deb ... Unpacking libtest2-harness-perl (1.000163-1) ... Selecting previously unselected package libtest2-plugin-nowarnings-perl. Preparing to unpack .../45-libtest2-plugin-nowarnings-perl_0.10-1_all.deb ... Unpacking libtest2-plugin-nowarnings-perl (0.10-1) ... Selecting previously unselected package libtest2-tools-explain-perl. Preparing to unpack .../46-libtest2-tools-explain-perl_0.02-2_all.deb ... Unpacking libtest2-tools-explain-perl (0.02-2) ... Selecting previously unselected package libtext-glob-perl. Preparing to unpack .../47-libtext-glob-perl_0.11-3_all.deb ... Unpacking libtext-glob-perl (0.11-3) ... Selecting previously unselected package sbuild-build-depends-main-dummy. Preparing to unpack .../48-sbuild-build-depends-main-dummy_0.invalid.0_amd64.deb ... Unpacking sbuild-build-depends-main-dummy (0.invalid.0) ... Setting up libpipeline1:amd64 (1.5.8-2) ... Setting up libfile-slurper-perl (0.014-1) ... Setting up libuuid-perl (0.37-1) ... Setting up bsdextrautils (2.41.3-4) ... Setting up libtext-glob-perl (0.11-3) ... Setting up libmagic-mgc (1:5.46-5+b1) ... Setting up libtest2-plugin-nowarnings-perl (0.10-1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libsub-identify-perl (0.14-4) ... Setting up libxml2-16:amd64 (2.15.2+dfsg-0.1) ... Setting up libdebhelper-perl (13.31) ... Setting up libmagic1t64:amd64 (1:5.46-5+b1) ... Setting up gettext-base (0.23.2-2) ... Setting up m4 (1.4.21-1) ... Setting up file (1:5.46-5+b1) ... Setting up libyaml-tiny-perl (1.76-1) ... Setting up libelf1t64:amd64 (0.194-4) ... Setting up libscope-guard-perl (0.21-2) ... Setting up autotools-dev (20240727.1) ... Setting up libdata-uuid-perl (1.227-2) ... Setting up libimporter-perl (0.026-2) ... Setting up autopoint (0.23.2-2) ... Setting up autoconf (2.72-6) ... Setting up dwz (0.16-4) ... Setting up sensible-utils (0.0.26) ... Setting up libuchardet0:amd64 (0.0.8-2+b1) ... Setting up libfilter-perl (1.65-1) ... Setting up libtest2-plugin-memusage-perl (0.002003-2) ... Setting up liboverload-filecheck-perl (0.014-1) ... Setting up libtest-simple-perl (1.302219-1) ... Setting up automake (1:1.18.1-4) ... update-alternatives: using /usr/bin/automake-1.18 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.15.0-1) ... Setting up libtest2-plugin-uuid-perl (0.002010-1) ... Setting up liblong-jump-perl (0.000001-2) ... Setting up libsuper-perl (1.20190531-1) ... Setting up gettext (0.23.2-2) ... Setting up libtest-mockmodule-perl (0.180.0-1) ... Setting up libgoto-file-perl (0.005-2) ... Setting up libtool (2.5.4-9) ... Setting up libtest2-tools-explain-perl (0.02-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (22) ... Setting up dh-strip-nondeterminism (1.15.0-1) ... Setting up groff-base (1.23.0-10) ... Setting up libtest2-harness-perl (1.000163-1) ... Setting up po-debconf (1.0.22) ... Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up debhelper (13.31) ... Setting up sbuild-build-depends-main-dummy (0.invalid.0) ... Processing triggers for libc-bin (2.42-14) ... +------------------------------------------------------------------------------+ | Check architectures Sat, 28 Mar 2026 06:01:54 +0000 | +------------------------------------------------------------------------------+ Arch check ok (amd64 included in all) +------------------------------------------------------------------------------+ | Build environment Sat, 28 Mar 2026 06:01:54 +0000 | +------------------------------------------------------------------------------+ Kernel: Linux 6.18.5+deb14-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.18.5-1 (2026-01-16) amd64 (x86_64) Toolchain package versions: binutils_2.46-3 dpkg-dev_1.23.7 g++-13_13.4.0-10 g++-15_15.2.0-16 gcc-13_13.4.0-10 gcc-15_15.2.0-16 libc6-dev_2.42-14 libstdc++-13-dev_13.4.0-10 libstdc++-15-dev_15.2.0-16 libstdc++6_16-20260322-1 linux-libc-dev_6.19.8-1 Package versions: adduser_3.154 apt_3.1.16 autoconf_2.72-6 automake_1:1.18.1-4 autopoint_0.23.2-2 autotools-dev_20240727.1 base-files_14 base-passwd_3.6.8 bash_5.3-2 binutils_2.46-3 binutils-common_2.46-3 binutils-x86-64-linux-gnu_2.46-3 bsdextrautils_2.41.3-4 bsdutils_1:2.41.3-4 build-essential_12.12 bzip2_1.0.8-6+b1 coreutils_9.10-1 cpp_4:15.2.0-5 cpp-13_13.4.0-10 cpp-13-x86-64-linux-gnu_13.4.0-10 cpp-15_15.2.0-16 cpp-15-x86-64-linux-gnu_15.2.0-16 cpp-x86-64-linux-gnu_4:15.2.0-5 dash_0.5.12-12 debconf_1.5.92 debhelper_13.31 debian-archive-keyring_2025.1 debianutils_5.23.2 dh-autoreconf_22 dh-strip-nondeterminism_1.15.0-1 diffutils_1:3.12-1 dirmngr_2.4.9-4 dpkg_1.23.7 dpkg-dev_1.23.7 dwz_0.16-4 eatmydata_131-2 file_1:5.46-5+b1 findutils_4.10.0-3 g++_4:15.2.0-5 g++-13_13.4.0-10 g++-13-x86-64-linux-gnu_13.4.0-10 g++-15_15.2.0-16 g++-15-x86-64-linux-gnu_15.2.0-16 g++-x86-64-linux-gnu_4:15.2.0-5 gcc_4:15.2.0-5 gcc-13_13.4.0-10 gcc-13-base_13.4.0-10 gcc-13-x86-64-linux-gnu_13.4.0-10 gcc-14-base_14.3.0-14 gcc-15_15.2.0-16 gcc-15-base_15.2.0-16 gcc-15-x86-64-linux-gnu_15.2.0-16 gcc-16-base_16-20260322-1 gcc-x86-64-linux-gnu_4:15.2.0-5 gettext_0.23.2-2 gettext-base_0.23.2-2 gnupg_2.4.9-4 gnupg-l10n_2.4.9-4 gnupg-utils_2.4.9-4 gpg_2.4.9-4 gpg-agent_2.4.9-4 gpg-wks-client_2.4.9-4 gpgconf_2.4.9-4 gpgsm_2.4.9-4 gpgv_2.4.9-4 grep_3.12-1 groff-base_1.23.0-10 gzip_1.13-1 hostname_3.25 init-system-helpers_1.69 intltool-debian_0.35.0+20060710.6 libacl1_2.3.2-3 libapt-pkg6.0t64_2.9.29 libapt-pkg7.0_3.1.16 libarchive-zip-perl_1.68-1 libasan8_16-20260322-1 libassuan0_2.5.6-1+b1 libassuan9_3.0.2-2+b1 libatomic1_16-20260322-1 libattr1_1:2.5.2-4 libaudit-common_1:4.1.2-1 libaudit1_1:4.1.2-1+b1 libbinutils_2.46-3 libblkid1_2.41.3-4 libbsd0_0.12.2-2+b1 libbz2-1.0_1.0.8-6+b1 libc-bin_2.42-14 libc-dev-bin_2.42-14 libc-gconv-modules-extra_2.42-14 libc-l10n_2.42-14 libc6_2.42-14 libc6-dev_2.42-14 libcap-ng0_0.9.1-1 libcap2_1:2.75-10+b9 libcc1-0_16-20260322-1 libcrypt-dev_1:4.5.1-1 libcrypt1_1:4.5.1-1 libctf-nobfd0_2.46-3 libctf0_2.46-3 libdata-uuid-perl_1.227-2 libdb5.3t64_5.3.28+dfsg2-11 libdebconfclient0_0.282+b2 libdebhelper-perl_13.31 libdpkg-perl_1.23.7 libeatmydata1_131-2+b2 libelf1t64_0.194-4 libffi8_3.5.2-4 libfile-slurper-perl_0.014-1 libfile-stripnondeterminism-perl_1.15.0-1 libfilter-perl_1.65-1 libgcc-13-dev_13.4.0-10 libgcc-15-dev_15.2.0-16 libgcc-s1_16-20260322-1 libgcrypt20_1.12.1-2 libgdbm-compat4t64_1.26-1+b1 libgdbm6t64_1.26-1+b1 libgmp10_2:6.3.0+dfsg-5+b1 libgnutls30t64_3.8.12-3 libgomp1_16-20260322-1 libgoto-file-perl_0.005-2 libgpg-error0_1.59-4 libgprofng0_2.46-3 libhogweed6t64_3.10.2-1 libhwasan0_16-20260322-1 libidn2-0_2.3.8-4+b1 libimporter-perl_0.026-2 libisl23_0.27-2 libitm1_16-20260322-1 libjansson4_2.14-2+b4 libksba8_1.6.8-2 libldap-2.5-0_2.5.19+dfsg-1 libldap2_2.6.10+dfsg-1+b1 liblong-jump-perl_0.000001-2 liblsan0_16-20260322-1 liblz4-1_1.10.0-8 liblzma5_5.8.2-2 libmagic-mgc_1:5.46-5+b1 libmagic1t64_1:5.46-5+b1 libmd0_1.1.0-2+b2 libmount1_2.41.3-4 libmpc3_1.3.1-3 libmpfr6_4.2.2-3 libncursesw6_6.6+20251231-1 libnettle8t64_3.10.2-1 libnpth0t64_1.8-3+b1 liboverload-filecheck-perl_0.014-1 libp11-kit0_0.26.2-2 libpam-modules_1.7.0-5+b1 libpam-modules-bin_1.7.0-5+b1 libpam-runtime_1.7.0-5 libpam0g_1.7.0-5+b1 libpcre2-8-0_10.46-1+b1 libperl5.38t64_5.38.2-5 libperl5.40_5.40.1-7 libpipeline1_1.5.8-2 libquadmath0_16-20260322-1 libreadline8t64_8.3-4 libsasl2-2_2.1.28+dfsg1-10 libsasl2-modules-db_2.1.28+dfsg1-10 libscope-guard-perl_0.21-2 libseccomp2_2.6.0-2+b1 libselinux1_3.9-4+b1 libsemanage-common_3.9-1 libsemanage2_3.9-1+b1 libsepol2_3.9-2 libsframe1_2.44-3 libsframe3_2.46-3 libsmartcols1_2.41.3-4 libsqlite3-0_3.46.1-9+b1 libssl3t64_3.6.1-3 libstdc++-13-dev_13.4.0-10 libstdc++-15-dev_15.2.0-16 libstdc++6_16-20260322-1 libsub-identify-perl_0.14-4 libsuper-perl_1.20190531-1 libsystemd0_260.1-1 libtasn1-6_4.21.0-2 libtest-mockmodule-perl_0.180.0-1 libtest-simple-perl_1.302219-1 libtest2-harness-perl_1.000163-1 libtest2-plugin-memusage-perl_0.002003-2 libtest2-plugin-nowarnings-perl_0.10-1 libtest2-plugin-uuid-perl_0.002010-1 libtest2-tools-explain-perl_0.02-2 libtext-glob-perl_0.11-3 libtinfo6_6.6+20251231-1 libtool_2.5.4-9 libtsan2_16-20260322-1 libubsan1_16-20260322-1 libuchardet0_0.0.8-2+b1 libudev1_260.1-1 libunistring5_1.4.2-1 libuuid-perl_0.37-1 libuuid1_2.41.3-4 libxml2-16_2.15.2+dfsg-0.1 libxxhash0_0.8.3-2+b1 libyaml-tiny-perl_1.76-1 libzstd1_1.5.7+dfsg-3+b1 linux-libc-dev_6.19.8-1 locales-all_2.42-14 login_1:4.16.0-2+really2.41.3-4 login.defs_1:4.19.3-1 m4_1.4.21-1 make_4.4.1-3 man-db_2.13.1-1 mawk_1.3.4.20260302-1 ncurses-base_6.6+20251231-1 ncurses-bin_6.6+20251231-1 openssl-provider-legacy_3.6.1-3 passwd_1:4.19.3-1 patch_2.8-2 perl_5.40.1-7 perl-base_5.40.1-7 perl-modules-5.38_5.38.2-5 perl-modules-5.40_5.40.1-7 pinentry-curses_1.3.2-4 po-debconf_1.0.22 readline-common_8.3-4 rpcsvc-proto_1.4.3-1 sbuild-build-depends-main-dummy_0.invalid.0 sed_4.9-2 sensible-utils_0.0.26 sqv_1.3.0-5 sysvinit-utils_3.15-6 tar_1.35+dfsg-4 usr-is-merged_39+nmu2 util-linux_2.41.3-4 xz-utils_5.8.2-2 zlib1g_1:1.3.dfsg+really1.3.2-1 +------------------------------------------------------------------------------+ | Build Sat, 28 Mar 2026 06:01:54 +0000 | +------------------------------------------------------------------------------+ Unpack source ------------- -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: libtest-mockfile-perl Binary: libtest-mockfile-perl Architecture: all Version: 0.039-1 Maintainer: Debian Perl Group Uploaders: Mason James Homepage: https://metacpan.org/release/Test-MockFile Standards-Version: 4.7.3 Vcs-Browser: https://salsa.debian.org/perl-team/modules/packages/libtest-mockfile-perl Vcs-Git: https://salsa.debian.org/perl-team/modules/packages/libtest-mockfile-perl.git Testsuite: autopkgtest-pkg-perl Build-Depends: debhelper-compat (= 13) Build-Depends-Indep: libfile-slurper-perl , liboverload-filecheck-perl , libtest-mockmodule-perl , libtest-simple-perl , libtest2-harness-perl , libtest2-plugin-nowarnings-perl , libtest2-suite-perl , libtest2-tools-explain-perl , libtext-glob-perl , perl Package-List: libtest-mockfile-perl deb perl optional arch=all Checksums-Sha1: 1667fef8ca85c6b2d5d2ea7f2e8e01efdb6ab58f 137424 libtest-mockfile-perl_0.039.orig.tar.gz 998a8ae84c22c642d34597ff3a6c2359190d58a6 2192 libtest-mockfile-perl_0.039-1.debian.tar.xz Checksums-Sha256: e1dc3e4f0144b5681ae624edebcfb28798ab2e8d7a2881faf7f16a694bd4c36e 137424 libtest-mockfile-perl_0.039.orig.tar.gz e0e32f7c7ad39386a4e686b323866acd57c7f9042380a77ff6d8f06a383f3643 2192 libtest-mockfile-perl_0.039-1.debian.tar.xz Files: 6dff8f16cc995bc6ae6f92638332ded5 137424 libtest-mockfile-perl_0.039.orig.tar.gz d72aafb89796103e5ce541ccf14eebbe 2192 libtest-mockfile-perl_0.039-1.debian.tar.xz Dgit: 4c97c0e8f716838975e74815c5b8d8192cf4f23d debian archive/debian/0.039-1 https://git.dgit.debian.org/libtest-mockfile-perl -----BEGIN PGP SIGNATURE----- iQKTBAEBCgB9FiEE0eExbpOnYKgQTYX6uzpoAYZJqgYFAmnG3ehfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEQx RTEzMTZFOTNBNzYwQTgxMDREODVGQUJCM0E2ODAxODY0OUFBMDYACgkQuzpoAYZJ qgYuBA//VVcgl9PUErhA4mttOVpsULtX42CEH68KEBCTohPr9xRB5otzkn0L2OZ+ sxVemcRzYArydIonRT+HVIDN58bpEXhsaq5q8QZkzoXdbZqstX36HIjdY89LMiyl fYXd2QGmR4h+xBKB31RWx2GstqvOT/4hin38e8KtlfJexnxAOEHIZPNACli1BQ7v HT+q06vMdcWljeWbRDg9S0XFTVlVk8BimS52QW+YxetGD9p1TKaGyNdoXiDEuGDF be1h8W53QmPtZ/XcUm7AHDBGBtmhfl0OSSiwrE/rmOo1yLoSH6xoQ0iilRZPEMXV Ns/1QzwrDCwn8R7uKx87wYHowrT8jSna78gHdnT9bZFWmCsbRMh8EPnIbz2prmtb JK+F8aMQk6hvOdPSBRR0r26kuEH8NxPV/Vpk5krzsksJMs3ZE8cnEUzLYgJLaPrG /9363KTTUsrluAHBE2mhOT4GMAFOvNZfySi3zmKs8BcSINRdOA06QkwNKghmQIAq s21WZQ8BISmHU30RRoWNMMTf7OfCGJ1fP4/ygmT8jVBqqp1ad2hDz/371VuBSCPr /YUXaakohtFqHJDsjcQ7iyH0TgI9hf5YF+9ss1k+HQMDbVXfwzTL/c2suJrAYUPV bGn4v0cR35VQbK+nbKlSaDxPsuTc7VfwwvHVyTL5YrR9xqmXUS4= =CHLY -----END PGP SIGNATURE----- dpkg-source: warning: cannot verify inline signature for ./libtest-mockfile-perl_0.039-1.dsc: missing OpenPGP keyrings dpkg-source: info: verifying ./libtest-mockfile-perl_0.039-1.dsc dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-keyring.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-tag2upload.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-nonupload.pgp dpkg-source: info: skipping absent keyring /usr/share/keyrings/debian-maintainers.pgp dpkg-source: info: extracting libtest-mockfile-perl in /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039 dpkg-source: info: unpacking libtest-mockfile-perl_0.039.orig.tar.gz dpkg-source: info: unpacking libtest-mockfile-perl_0.039-1.debian.tar.xz clean up apt cache ------------------ Check disk space ---------------- Sufficient free space for build +------------------------------------------------------------------------------+ | Starting Timed Build Commands Sat, 28 Mar 2026 06:01:55 +0000 | +------------------------------------------------------------------------------+ /usr/share/debomatic/sbuildcommands/starting-build-commands/no-network libtest-mockfile-perl_0.039-1 sid amd64 -------------------------------------------------------------------------------------------------------------- I: Finished running '/usr/share/debomatic/sbuildcommands/starting-build-commands/no-network libtest-mockfile-perl_0.039-1 sid amd64'. Finished processing commands. -------------------------------------------------------------------------------- User Environment ---------------- APT_CONFIG=/var/lib/sbuild/apt.conf HOME=/sbuild-nonexistent LANGUAGE=en_GB:en LC_ALL=C.UTF-8 LD_LIBRARY_PATH=/usr/lib/libeatmydata LD_PRELOAD=libeatmydata.so LOGNAME=debomatic PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games PWD=/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039 SCHROOT_ALIAS_NAME=sid-amd64-debomatic SCHROOT_CHROOT_NAME=sid-amd64-debomatic SCHROOT_COMMAND=env SCHROOT_GID=110 SCHROOT_GROUP=sbuild SCHROOT_SESSION_ID=sid-amd64-debomatic-b2bbf593-012e-48ec-bd57-e0d505ece5fb SCHROOT_UID=1002 SCHROOT_USER=debomatic SHELL=/bin/sh USER=debomatic dpkg-buildpackage ----------------- Command: dpkg-buildpackage --sanitize-env -us -uc -Zxz dpkg-buildpackage: info: source package libtest-mockfile-perl dpkg-buildpackage: info: source version 0.039-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by gregor herrmann dpkg-source -Zxz --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean dh_clean dpkg-source -Zxz -b . dpkg-source: info: using source format '3.0 (quilt)' dpkg-source: info: building libtest-mockfile-perl using existing ../libtest-mockfile-perl_0.039.orig.tar.gz dpkg-source: info: building libtest-mockfile-perl in ../libtest-mockfile-perl_0.039-1.debian.tar.xz dpkg-source: info: building libtest-mockfile-perl in ../libtest-mockfile-perl_0.039-1.dsc debian/rules binary dh binary dh_update_autotools_config dh_autoreconf dh_auto_configure /usr/bin/perl Makefile.PL INSTALLDIRS=vendor OPTIMIZE="-g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2" LD="x86_64-linux-gnu-gcc -g -O2 -Werror=implicit-function-declaration -ffile-prefix-map=/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wl,-z,relro" Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for Test::MockFile Writing MYMETA.yml and MYMETA.json dh_auto_build make -j2 make[1]: Entering directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' cp lib/Test/MockFile/Plugin/FileTemp.pm blib/lib/Test/MockFile/Plugin/FileTemp.pm cp lib/Test/MockFile.pm blib/lib/Test/MockFile.pm cp lib/Test/MockFile/DirHandle.pm blib/lib/Test/MockFile/DirHandle.pm cp lib/Test/MockFile/Plugin.pm blib/lib/Test/MockFile/Plugin.pm cp lib/Test/MockFile/FileHandle.pm blib/lib/Test/MockFile/FileHandle.pm cp lib/Test/MockFile/Plugins.pm blib/lib/Test/MockFile/Plugins.pm Manifying 6 pod documents make[1]: Leaving directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' dh_auto_test make -j2 test TEST_VERBOSE=1 make[1]: Entering directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' PERL_DL_NONLAZY=1 "/usr/bin/perl" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(1, 'blib/lib', 'blib/arch')" t/*.t # Testing Test::MockFile 0.039 with Overload::FileCheck 0.014 and File::Temp 0.2311 # Perl 5.040001, /usr/bin/perl t/00-load.t ......................... ok 1 - use Test::MockFile; ok 2 - use Overload::FileCheck; ok 3 - use File::Temp; 1..3 ok t/autodie_all_functions.t ........... # Subtest: opendir dies on non-existent mocked dir ok 1 - opendir dies on non-existent dir ok 2 - opendir ENOENT: exception thrown ok 3 - 'opendir ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - opendir ENOENT: function is opendir 1..4 ok 1 - opendir dies on non-existent mocked dir # Subtest: opendir dies on ENOTDIR ok 1 - opendir dies on regular file (ENOTDIR) ok 2 - opendir ENOTDIR: exception thrown ok 3 - 'opendir ENOTDIR: is autodie::exception' isa 'autodie::exception' ok 4 - opendir ENOTDIR: function is opendir 1..4 ok 2 - opendir dies on ENOTDIR # Subtest: closedir dies on double-close ok 1 - closedir dies on already-closed handle ok 2 - closedir EBADF: exception thrown ok 3 - 'closedir EBADF: is autodie::exception' isa 'autodie::exception' ok 4 - closedir EBADF: function is closedir 1..4 ok 3 - closedir dies on double-close # Subtest: unlink dies on non-existent mocked file ok 1 - unlink dies on non-existent mocked file ok 2 - unlink ENOENT: exception thrown ok 3 - 'unlink ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - unlink ENOENT: function is unlink 1..4 ok 4 - unlink dies on non-existent mocked file # Subtest: readlink dies on non-existent mocked path ok 1 - readlink dies on non-existent mock ok 2 - readlink ENOENT: exception thrown ok 3 - 'readlink ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - readlink ENOENT: function is readlink 1..4 ok 5 - readlink dies on non-existent mocked path # Subtest: readlink dies on regular file (EINVAL) ok 1 - readlink dies on non-symlink ok 2 - readlink EINVAL: exception thrown ok 3 - 'readlink EINVAL: is autodie::exception' isa 'autodie::exception' ok 4 - readlink EINVAL: function is readlink 1..4 ok 6 - readlink dies on regular file (EINVAL) # Subtest: symlink dies when target exists (EEXIST) ok 1 - symlink dies when link already exists ok 2 - symlink EEXIST: exception thrown ok 3 - 'symlink EEXIST: is autodie::exception' isa 'autodie::exception' ok 4 - symlink EEXIST: function is symlink 1..4 ok 7 - symlink dies when target exists (EEXIST) # Subtest: link dies when source does not exist (ENOENT) ok 1 - link dies when source doesn't exist ok 2 - link ENOENT: exception thrown ok 3 - 'link ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - link ENOENT: function is link 1..4 ok 8 - link dies when source does not exist (ENOENT) # Subtest: link dies when destination exists (EEXIST) ok 1 - link dies when dest already exists ok 2 - link EEXIST: exception thrown ok 3 - 'link EEXIST: is autodie::exception' isa 'autodie::exception' ok 4 - link EEXIST: function is link 1..4 ok 9 - link dies when destination exists (EEXIST) # Subtest: mkdir dies when dir already exists (EEXIST) ok 1 - mkdir dies on existing dir ok 2 - mkdir EEXIST: exception thrown ok 3 - 'mkdir EEXIST: is autodie::exception' isa 'autodie::exception' ok 4 - mkdir EEXIST: function is mkdir 1..4 ok 10 - mkdir dies when dir already exists (EEXIST) # Subtest: rmdir dies on non-existent dir (ENOENT) ok 1 - rmdir dies on non-existent dir ok 2 - rmdir ENOENT: exception thrown ok 3 - 'rmdir ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - rmdir ENOENT: function is rmdir 1..4 ok 11 - rmdir dies on non-existent dir (ENOENT) # Subtest: rmdir dies on regular file (ENOTDIR) ok 1 - rmdir dies on file (ENOTDIR) ok 2 - rmdir ENOTDIR: exception thrown ok 3 - 'rmdir ENOTDIR: is autodie::exception' isa 'autodie::exception' ok 4 - rmdir ENOTDIR: function is rmdir 1..4 ok 12 - rmdir dies on regular file (ENOTDIR) # Subtest: rename dies when source does not exist (ENOENT) ok 1 - rename dies when source doesn't exist ok 2 - rename ENOENT: exception thrown ok 3 - 'rename ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - rename ENOENT: function is rename 1..4 ok 13 - rename dies when source does not exist (ENOENT) # Subtest: truncate dies on non-existent file (ENOENT) ok 1 - truncate dies on non-existent file ok 2 - truncate ENOENT: exception thrown ok 3 - 'truncate ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - truncate ENOENT: function is truncate 1..4 ok 14 - truncate dies on non-existent file (ENOENT) # Subtest: truncate dies on directory (EISDIR) ok 1 - truncate dies on directory ok 2 - truncate EISDIR: exception thrown ok 3 - 'truncate EISDIR: is autodie::exception' isa 'autodie::exception' ok 4 - truncate EISDIR: function is truncate 1..4 ok 15 - truncate dies on directory (EISDIR) # Subtest: chmod dies on non-existent file ok 1 - chmod dies on non-existent mocked file ok 2 - chmod ENOENT: exception thrown ok 3 - 'chmod ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - chmod ENOENT: function is chmod 1..4 ok 16 - chmod dies on non-existent file # Subtest: chown dies on non-existent file ok 1 - chown dies on non-existent mocked file ok 2 - chown ENOENT: exception thrown ok 3 - 'chown ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - chown ENOENT: function is chown 1..4 ok 17 - chown dies on non-existent file # Subtest: utime dies on non-existent file ok 1 - utime dies on non-existent mocked file ok 2 - utime ENOENT: exception thrown ok 3 - 'utime ENOENT: is autodie::exception' isa 'autodie::exception' ok 4 - utime ENOENT: function is utime 1..4 ok 18 - utime dies on non-existent file # Subtest: successful operations do not throw under autodie ok 1 - all successful operations work under autodie 1..1 ok 19 - successful operations do not throw under autodie 1..19 ok t/autodie_compat.t .................. # Subtest: open mocked file succeeds with autodie active ok 1 - first line from mocked file ok 2 - open on mocked file does not die with autodie 1..2 ok 1 - open mocked file succeeds with autodie active # Subtest: write to mocked file succeeds with autodie active ok 1 - open for writing does not die with autodie ok 2 - mocked file has correct contents 1..2 ok 2 - write to mocked file succeeds with autodie active # Subtest: append to mocked file succeeds with autodie active ok 1 - open for append does not die with autodie ok 2 - appended content is correct 1..2 ok 3 - append to mocked file succeeds with autodie active # Subtest: autodie dies on non-existent mocked file ok 1 - autodie dies when opening non-existent mocked file ok 2 - exception is set 1..2 ok 4 - autodie dies on non-existent mocked file # Subtest: autodie exception is autodie::exception when possible ok 1 - 'exception is autodie::exception object' isa 'autodie::exception' 1..1 ok 5 - autodie exception is autodie::exception when possible # Subtest: +< mode on non-existent mocked file dies with autodie ok 1 - autodie dies on +< open of non-existent mocked file 1..1 ok 6 - +< mode on non-existent mocked file dies with autodie # Subtest: mocked file read-write works with autodie ok 1 - read from +< opened file ok 2 - read-write open succeeds with autodie 1..2 ok 7 - mocked file read-write works with autodie 1..7 ok t/autodie_compat_reverse.t .......... # Subtest: mocking works when T::MF loaded before autodie ok 1 - read from mocked file ok 2 - mocked file open works when T::MF loaded before autodie 1..2 ok 1 - mocking works when T::MF loaded before autodie # Subtest: autodie still dies on failure ok 1 - autodie dies on non-existent mocked file (reverse load order) 1..1 ok 2 - autodie still dies on failure # Subtest: write works in reverse load order ok 1 - write to mocked file works ok 2 - content is correct 1..2 ok 3 - write works in reverse load order 1..3 ok t/autodie_eisdir.t .................. # Subtest: autodie dies on open("<") of directory (EISDIR) ok 1 - autodie dies when opening directory for reading ok 2 - exception is set 1..2 ok 1 - autodie dies on open("<") of directory (EISDIR) # Subtest: autodie dies on open(">") of directory (EISDIR) ok 1 - autodie dies when opening directory for writing ok 2 - exception is set 1..2 ok 2 - autodie dies on open(">") of directory (EISDIR) # Subtest: EISDIR autodie exception is autodie::exception object ok 1 - 'EISDIR exception is autodie::exception' isa 'autodie::exception' 1..1 ok 3 - EISDIR autodie exception is autodie::exception object # Subtest: autodie dies on open("+<") of directory (EISDIR) ok 1 - autodie dies on +< open of directory 1..1 ok 4 - autodie dies on open("+<") of directory (EISDIR) 1..4 ok t/autodie_filesys.t ................. # Subtest: rename works on mocked files under autodie ok 1 - rename does not die with autodie on mocked files ok 2 - destination has source contents after rename 1..2 ok 1 - rename works on mocked files under autodie # Subtest: link works on mocked files under autodie ok 1 - link does not die with autodie on mocked files ok 2 - destination has source contents after link 1..2 ok 2 - link works on mocked files under autodie # Subtest: symlink works on mocked files under autodie ok 1 - symlink does not die with autodie on mocked files ok 2 - symlink points to correct target 1..2 ok 3 - symlink works on mocked files under autodie # Subtest: truncate works on mocked files under autodie ok 1 - truncate does not die with autodie on mocked files ok 2 - file truncated to 5 bytes 1..2 ok 4 - truncate works on mocked files under autodie # Subtest: flock succeeds on mocked file handle under autodie ok 1 - flock does not die with autodie on mocked file handle 1..1 ok 5 - flock succeeds on mocked file handle under autodie 1..5 ok t/autodie_sysopen.t ................. # Subtest: sysopen mocked file succeeds with autodie active ok 1 - filehandle defined ok 2 - sysopen O_RDONLY on existing mocked file does not die 1..2 ok 1 - sysopen mocked file succeeds with autodie active # Subtest: sysopen O_CREAT creates file with autodie active ok 1 - filehandle defined after O_CREAT ok 2 - sysopen O_CREAT on non-existent mocked file does not die ok 3 - file created with empty contents 1..3 ok 2 - sysopen O_CREAT creates file with autodie active # Subtest: sysopen O_RDWR on existing file with autodie active ok 1 - filehandle defined for O_RDWR ok 2 - sysopen O_RDWR on existing mocked file does not die 1..2 ok 3 - sysopen O_RDWR on existing file with autodie active # Subtest: autodie dies on sysopen O_RDONLY non-existent file ok 1 - autodie dies when sysopen O_RDONLY on non-existent mocked file ok 2 - exception is set 1..2 ok 4 - autodie dies on sysopen O_RDONLY non-existent file # Subtest: autodie exception is autodie::exception for sysopen ok 1 - 'exception is autodie::exception object' isa 'autodie::exception' ok 2 - exception function is CORE::sysopen 1..2 ok 5 - autodie exception is autodie::exception for sysopen # Subtest: autodie dies on sysopen O_EXCL existing file ok 1 - autodie dies on O_EXCL when file exists ok 2 - 'O_EXCL exception type' isa 'autodie::exception' 1..2 ok 6 - autodie dies on sysopen O_EXCL existing file # Subtest: autodie dies on sysopen directory ok 1 - autodie dies on sysopen of directory (EISDIR) ok 2 - 'EISDIR exception type' isa 'autodie::exception' 1..2 ok 7 - autodie dies on sysopen directory # Subtest: autodie dies on sysopen broken symlink ok 1 - autodie dies on sysopen of broken symlink (ENOENT) ok 2 - 'broken symlink exception type' isa 'autodie::exception' 1..2 ok 8 - autodie dies on sysopen broken symlink # Subtest: sysopen succeeds through valid symlink with autodie ok 1 - filehandle defined through symlink ok 2 - sysopen through valid symlink does not die with autodie 1..2 ok 9 - sysopen succeeds through valid symlink with autodie 1..9 ok t/autodie_sysopen_reverse.t ......... # Subtest: sysopen mocking works when T::MF loaded before autodie ok 1 - filehandle defined ok 2 - mocked sysopen works when T::MF loaded before autodie 1..2 ok 1 - sysopen mocking works when T::MF loaded before autodie # Subtest: autodie still dies on sysopen failure (reverse load order) ok 1 - autodie dies on sysopen of non-existent mocked file (reverse load order) 1..1 ok 2 - autodie still dies on sysopen failure (reverse load order) # Subtest: sysopen O_CREAT works in reverse load order ok 1 - filehandle defined after O_CREAT ok 2 - sysopen O_CREAT on mocked file works (reverse load order) ok 3 - file created with empty contents 1..3 ok 3 - sysopen O_CREAT works in reverse load order 1..3 ok t/autovivify.t ...................... # Seeded srand with seed '20260328' from local date. # -------------- autovivify: basic file creation via open -------------- ok 1 - auto-vivified file does not exist before open ok 2 - open for write under autovivify dir ok 3 - file exists after write ok 4 - file is a regular file ok 5 - open for read ok 6 - content matches what was written # -------------- autovivify: temp file then rename pattern -------------- ok 7 - open temp file for write ok 8 - rename temp file into place ok 9 - renamed file exists ok 10 - temp file no longer exists ok 11 - can read renamed file ok 12 - renamed file has correct content # -------------- autovivify: stat on non-existent file -------------- ok 13 - non-existent file under autovivify dir returns false for -e ok 14 - non-existent file returns false for -f ok 15 - non-existent file returns false for -d # -------------- autovivify: mkdir subdirectory -------------- ok 16 - mkdir under autovivify dir works ok 17 - subdirectory exists after mkdir ok 18 - can opendir the autovivify dir ok 19 - subdirectory appears in readdir # -------------- autovivify: unlink auto-vivified file -------------- ok 20 - create file ok 21 - file exists ok 22 - unlink succeeds ok 23 - file is gone after unlink # -------------- autovivify: sysopen with O_CREAT -------------- ok 24 - sysopen with O_CREAT under autovivify ok 25 - sysopen-created file exists # -------------- autovivify: cleanup on scope exit -------------- ok 26 - create file in scoped dir ok 27 - file exists in scope ok 28 - auto-vivified file cleaned up on scope exit # -------------- autovivify: readdir shows created files -------------- ok 29 - create alpha ok 30 - create beta ok 31 - opendir on autovivify dir ok 32 - readdir shows auto-vivified files # -------------- autovivify: glob works -------------- ok 33 - create foo.txt ok 34 - create bar.txt ok 35 - glob finds auto-vivified files # -------------- autovivify: works with dir() + mkdir pattern -------------- ok 36 - dir with autovivify does not exist yet ok 37 - mkdir materializes autovivify dir ok 38 - dir exists after mkdir ok 39 - open file under materialized dir ok 40 - file exists # -------------- autovivify: file permissions respect umask correctly -------------- ok 41 - create file with umask 0077 ok 42 - autovivified file perms are 0600 with umask 0077 (not 0611) 1..42 ok t/blocks.t .......................... # Seeded srand with seed '20260328' from local date. # blocks() calculation # empty file has 0 blocks ok 1 - non-existent file: blocks is 0 ok 2 - empty string content: blocks is 0 # small file has 1 block ok 3 - 1-byte file: 1 block ok 4 - 100-byte file: 1 block # file exactly at blksize boundary ok 5 - 4096-byte file with 4096 blksize: exactly 1 block # file one byte over blksize boundary ok 6 - 4097-byte file: 2 blocks # file at exactly 2x blksize ok 7 - 8192-byte file with 4096 blksize: exactly 2 blocks # custom blksize ok 8 - 1024-byte file with 512 blksize: 2 blocks ok 9 - 513-byte file with 512 blksize: 2 blocks (ceiling) ok 10 - 512-byte file with 512 blksize: exactly 1 block # blocks from stat() ok 11 - stat[12] (blocks) is 1 for a 5-byte file ok 12 - stat[12] (blocks) is 0 for an empty file # directory blocks ok 13 - stat[12] defined for directory 1..13 ok t/chmod-chown-passthrough.t ......... # Seeded srand with seed '20260328' from local date. ok 1 - chmod passthrough to real filesystem { ok 1 - chmod returned 1 (one file changed) ok 2 - chmod passthrough correctly applied mode 0644 ok 3 - chmod returned 1 for mode change to 0600 ok 4 - chmod passthrough correctly applied mode 0600 ok 5 - chmod returned 2 (two files changed) ok 6 - chmod passthrough correctly applied mode 0755 to /tmp/tmf_passthrough_1538579/chmod_test ok 7 - chmod passthrough correctly applied mode 0755 to /tmp/tmf_passthrough_1538579/chmod_test2 1..7 } ok 2 - chown passthrough to real filesystem { ok 1 - chown -1, -1 passthrough returned 1 ok 2 - File UID unchanged after chown -1, -1 ok 3 - chown to current user/group passthrough returned 1 ok 4 - File UID correct after chown ok 5 - File GID correct after chown 1..5 } 1..2 ok t/chmod-filetemp.t .................. # Seeded srand with seed '20260328' from local date. ok 1 1..1 ok t/chmod.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - Defaults { ok 1 - Directory /foo exists ok 2 - File /foo/bar exists ok 3 - Directory /foo is set to 0755 ok 4 - File /foo/bar is set to 0644 (umask: 0022, perms before: 0666, perms after 1: 0644, perms after 2: 100644) 1..4 } ok 2 - Changing mode (real vs. mocked) { ok 1 - Successfully created real directory ok 2 - Successfully chmod'ed real directory ok 3 - CORE::chmod() set the perms correctly ok 4 - Successfully deleted real directory ok 5 - Directory /foo exists ok 6 - File /foo/bar exists ok 7 - Directory /foo is now set to 0600 ok 8 - File /foo/bar is now set to 0600 ok 9 - Directory /foo is now set to 0600 ok 10 - File /foo/bar is now set to 0600 1..10 } ok 3 - Changing mode filehandle { # -------------- REAL MODE -------------- ok 1 - chmod on file ok 2 - chmod on filehandle # -------------- MOCK MODE -------------- ok 3 - chmod on file ok 4 - chmod on filehandle 1..4 } ok 4 - Providing a string as mode mask { ok 1 - Successfully created real directory ok 2 - CORE::chmod() threw a warning when trying to numify ok 3 - Successfully chmod'ed real directory ok 4 - No observed error ok 5 - CORE::chmod() set the perms correctly ok 6 - Successfully deleted real directory ok 7 - Directory /foo does not exist ok 8 - Successfully created mocked directory ok 9 - Directory /foo now exists ok 10 - chmod() threw a warning when trying to numify ok 11 - Successfully chmod'ed real directory ok 12 - No observed error ok 13 - chmod() set the perms correctly ok 14 - Successfully deleted real directory ok 15 - Directory /foo no longer exist 1..15 } ok 5 - File creation with non-default mode applies umask correctly { ok 1 - File with explicit mode 0644 gets 0644 after umask 1..1 } ok 6 - chmod method ignores umask { ok 1 - chmod(0755) gives exactly 0755 (umask not applied) ok 2 - chmod(0644) gives exactly 0644 (umask not applied) 1..2 } ok 7 - mkdir with non-default mode applies umask correctly { ok 1 - mkdir with mode 0700 ok 2 - mkdir(0700) gives 0700 after umask 1..2 } ok 8 - chmod masks mode to S_IFPERMS (high bits do not corrupt file type) { ok 1 - chmod with S_IFREG bits gives 0755, not corrupted mode ok 2 - File type preserved after chmod with high bits ok 3 - chmod on dir with high bits gives 0700 ok 4 - Directory type preserved after chmod with high bits 1..4 } ok 9 - chmod with broken symlink in multi-file list does not confess { ok 1 - chmod with broken symlink + regular file does not confess ok 2 - chmod returns 1 (one file changed) ok 3 - errno set to ENOENT for the broken symlink 1..3 } ok 10 - chmod with only broken symlink { ok 1 - chmod with only a broken symlink does not confess ok 2 - chmod returns 0 (no files changed) ok 3 - errno set to ENOENT 1..3 } 1..10 ok t/chown-chmod-nostrict.t ............ # Seeded srand with seed '20260328' from local date. ok 1 - Unmocked files and mixing unmocked and mocked files { ok 1 - Even without strict mode, you cannot mix mocked and unmocked files (chown) ok 2 - Even without strict mode, you cannot mix mocked and unmocked files (chmod) 1..2 } 1..1 ok t/chown.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - Default ownership { ok 1 - Directory /foo exists ok 2 - File /foo/bar exists ok 3 - /foo set UID correctly to 1002 ok 4 - /foo set GID correctly to 110 ok 5 - /foo/bar set UID correctly to 1002 ok 6 - /foo/bar set GID correctly to 110 1..6 } ok 2 - Change ownership of file to someone else { # $>: 1002, $): 110 110 ok 1 - chown file to some high, probably unavailable, UID/GID ok 2 - chown failed (EPERM): $>:1002, $):110 110 ok 3 - chown file to some high, probably unavailable, GID ok 4 - chown failed (EPERM): $>:1002, $):110 110 ok 5 - chown file to some high, probably unavailable, UID ok 6 - chown failed (EPERM): $>:1002, $):110 110 ok 7 - chown file to root ok 8 - chown failed (EPERM): $>:1002, $):110 110 ok 9 - chown file to root GID ok 10 - chown failed (EPERM): $>:1002, $):110 110 ok 11 - chown file to root UID ok 12 - chown failed (EPERM): $>:1002, $):110 110 1..12 } ok 3 - chown with bareword (nonexistent file) { ok 1 - $! starts clean ok 2 - Using bareword treats it as string ok 3 - Correct ENOENT error 1..3 } ok 4 - chown only user, only group, both { ok 1 - $! starts clean ok 2 - chown'ing file to only UID ok 3 - $! still clean ok 4 - chown'ing file to only GID ok 5 - $! still clean ok 6 - chown'ing file to both UID and GID ok 7 - $! still clean 1..7 } ok 5 - chown to different group of same user { 1..0 # SKIP This user only has one group } ok 6 - chown on typeglob / filehandle { ok 1 - $! starts clean ok 2 - Non-root chown on a file handle works ok 3 - $! stays clean ok 4 - Owner of the file is now there ok 5 - Group of the file is now there 1..5 } ok 7 - chown does not reset $! { ok 1 - $! is set to 3 for our test ok 2 - Successfully run chown ok 3 - $! is still 3 (not reset by chown) 1..3 } ok 8 - chown -1 preserves per-file ownership, not process identity { ok 1 - chown(-1, -1) succeeds ok 2 - uid preserved (not replaced with process uid) ok 3 - gid preserved (not replaced with process gid) ok 4 - chown(99, -1) succeeds ok 5 - uid changed to 99 ok 6 - gid still preserved after uid-only change ok 7 - chown(-1, 42) succeeds ok 8 - uid still preserved after gid-only change ok 9 - gid changed to 42 1..9 } ok 9 - chown uid-only and gid-only permission checks { ok 1 - non-root cannot chown uid-only to different user ok 2 - errno is EPERM for uid-only chown ok 3 - non-root cannot chown gid-only to foreign group ok 4 - errno is EPERM for gid-only chown ok 5 - non-root can chown gid to own group ok 6 - no error for allowed gid change ok 7 - non-root can chown uid to self ok 8 - no error for uid self-chown 1..8 } ok 10 - chown with broken symlink in multi-file list does not confess { ok 1 - chown with broken symlink + regular file does not confess ok 2 - chown returns 1 (one file changed) ok 3 - errno set to ENOENT for the broken symlink 1..3 } ok 11 - chown with only broken symlink { ok 1 - chown with only a broken symlink does not confess ok 2 - chown returns 0 (no files changed) ok 3 - errno set to ENOENT 1..3 } 1..11 ok t/creation_timestamps.t ............. # Seeded srand with seed '20260328' from local date. ok 1 - open > creates file: timestamps reset to now { ok 1 - open > succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 2 - open >> creates file: timestamps reset to now { ok 1 - open >> succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 3 - open +> creates file: timestamps reset to now { ok 1 - open +> succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 4 - open +>> creates file: timestamps reset to now { ok 1 - open +>> succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 5 - open > truncating existing file: mtime/ctime updated, atime unchanged { ok 1 - open > succeeds on existing file ok 2 - atime unchanged on truncation ok 3 - mtime updated on truncation ok 4 - ctime updated on truncation 1..4 } ok 6 - sysopen O_CREAT creates file: timestamps reset to now { ok 1 - sysopen O_CREAT succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 7 - sysopen O_CREAT|O_APPEND creates file: timestamps reset to now { ok 1 - sysopen O_CREAT|O_APPEND succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 8 - mkdir creates directory: timestamps reset to now { ok 1 - mkdir succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time ok 5 - atime updated from past value 1..5 } ok 9 - mkdir with perms creates directory: timestamps reset to now { ok 1 - mkdir with perms succeeds ok 2 - atime >= operation time ok 3 - mtime >= operation time ok 4 - ctime >= operation time 1..4 } 1..9 ok t/cwd_abs_path.t .................... # Seeded srand with seed '20260328' from local date. ok 1 - readlink returns mocked target ok 2 - Cwd::abs_path resolves mocked symlink ok 3 - Cwd::realpath resolves mocked symlink ok 4 - Cwd::fast_abs_path resolves mocked symlink ok 5 - abs_path(.) returns cwd when nothing is mocked ok 6 - abs_path follows chained symlinks ok 7 - abs_path resolves intermediate symlink in path ok 8 - abs_path resolves relative symlink target ok 9 - abs_path resolves .. in path with mocked file ok 10 - abs_path returns undef for circular symlinks ok 11 - $! is ELOOP for circular symlinks ok 12 - abs_path returns path for mocked regular file ok 13 - abs_path() with no args returns cwd ok 14 - abs_path follows symlink into deeper target path ok 15 - imported abs_path() resolves mocked symlink ok 16 - imported realpath() resolves mocked symlink ok 17 - GH \#139: readlink sees mocked target ok 18 - GH \#139: Cwd::abs_path sees mocked target ok 19 - abs_path resolves relative symlink with .. in target ok 20 - abs_path works while mock is in scope ok 21 - abs_path does not return mocked target after mock goes out of scope 1..21 ok t/detect-common-mistakes.t .......... # Seeded srand with seed '20260328' from local date. ok 1 - Removing trailing forward slash for directories { ok 1 - Create /foo/ ok 2 - Test::MockFile=HASH->isa('Test::MockFile') ok 3 - Trailing / is removed 1..3 } ok 2 - Checking for multiple forward slash in paths { ok 1 - dir() successful ok 2 - Double trailing forward slash ok 3 - dir() succesful ok 4 - Multiple trailing forward slash ok 5 - dir() succesful ok 6 - Double leading forward slash for dir ok 7 - dir() succesful ok 8 - Double leading forward slash for file ok 9 - dir() succesful ok 10 - Double forward slash in the middle for dir ok 11 - dir() succesful ok 12 - Double forward slash in the middle for file 1..12 } ok 3 - Relative paths { ok 1 - Success with ./ for dir ok 2 - Success with ./ for file ok 3 - Failure with ../ for dir ok 4 - Failure with ../ for file ok 5 - Failure with /../ for dir ok 6 - Success with /. for file ok 7 - Failure with /.. for file ok 8 - Failure with /../ for file ok 9 - Success with /./ for dir ok 10 - Success with /./ for file ok 11 - No problem with current directory paths (file with trailing forward slash) ok 12 - No problem with current directory paths (dir with trailing forward slash) ok 13 - No problem with current directory paths (dir with no trailing forward slash) 1..13 } 1..3 ok t/dir_interface.t ................... # Seeded srand with seed '20260328' from local date. ok 1 - ->dir() checks { ok 1 - Cannot do TMF->dir( "/etc", [@content], { 1 => 2 } ) ok 2 - Cannot do TMF->dir( "/etc", [@content] ) 1..2 } ok 2 - Scenario 1: ->dir() does not create dir, keywords do { ok 1 - Directory /foo1 does not exist yet ok 2 - Directory /foo1 got created ok 3 - Directory /foo1 now exists ok 4 - Correct contents of directory through ->contents() ok 5 - opendir() /foo1 successful ok 6 - readdir() on /foo1 successful ok 7 - Correct directory content through Perl core keywords ok 8 - closedir() on /foo1 successful 1..8 } ok 3 - Scenario 2: ->dir() on an already existing dir fails made with ->dir() { ok 1 - -d /foo2 succeeds, dir exists ok 2 - mkdir /foo2 fails, dir already exists ok 3 - opendir() /foo2 successful ok 4 - readdir() on /foo2 successful ok 5 - Correct directory content through Perl core keywords ok 6 - closedir() on /foo2 successful 1..6 } ok 4 - Scneario 3: Undef files with ->file() do not create dirs, adding content changes dir { ok 1 - -d /foo3 fails, does not exist yet ok 2 - -d /foo3 still fails after mocking file with no content ok 3 - mkdir /foo3 works ok 4 - -d /foo3 now succeeds ok 5 - Correct contents to /foo3 ok 6 - opendir() /foo3 successful ok 7 - readdir() on /foo3 successful ok 8 - Correct directory content through Perl core keywords ok 9 - closedir() on /foo3 successful ok 10 - /foo3/foo does not exist, even if /foo3 does ok 11 - After file->contents(), /foo3/foo exists ok 12 - Correct updated contents to /foo3 ok 13 - opendir() /foo3 successful ok 14 - readdir() on /foo3 successful ok 15 - Correct directory content through Perl core keywords ok 16 - closedir() on /foo3 successful 1..16 } ok 5 - Scenario 4: Creating ->file() with content creates dir { ok 1 - /foo4 does not exist yet ok 2 - /foo4 now exists, after creating file with content ok 3 - mkdir /foo4 fails, since dir already exists ok 4 - Correct contents to /foo4 ok 5 - opendir() /foo4 successful ok 6 - readdir() on /foo4 successful ok 7 - Correct directory content through Perl core keywords ok 8 - closedir() on /foo4 successful 1..8 } ok 6 - Scenario 5: Non-existent dir placeholders excluded from contents { ok 1 - Non-existent dir placeholder excluded from contents() ok 2 - opendir() /foo5 successful ok 3 - readdir() on /foo5 successful ok 4 - Correct directory content through Perl core keywords ok 5 - closedir() on /foo5 successful ok 6 - Existing subdirectory included in contents() 1..6 } ok 7 - Scenario 6: Non-existent file mock before dir() does not make dir exist { ok 1 - dir does not exist when only child is a non-existent file mock ok 2 - mkdir succeeds on the placeholder dir ok 3 - dir exists after mkdir 1..3 } ok 8 - Scenario 7: Existing file before dir() makes dir exist (regression) { ok 1 - dir exists when child file has content ok 2 - Correct contents with existing child file 1..2 } 1..8 ok t/dir_mtime.t ....................... # Seeded srand with seed '20260328' from local date. ok 1 - file creation updates parent dir mtime { ok 1 - directory has mtime ok 2 - dir mtime updated after file creation 1..2 } ok 2 - file creation without content does not update parent dir mtime { ok 1 - dir mtime NOT updated for file with undef contents 1..1 } ok 3 - unlink updates parent dir mtime { ok 1 - dir mtime updated after unlink 1..1 } ok 4 - mkdir updates parent dir mtime { ok 1 - parent dir mtime updated after mkdir 1..1 } ok 5 - rmdir updates parent dir mtime { ok 1 - parent dir mtime updated after rmdir 1..1 } ok 6 - open for write creates file and updates parent dir mtime { ok 1 - dir mtime updated when open creates new file 1..1 } ok 7 - open existing file for write does NOT update parent dir mtime { ok 1 - dir mtime NOT updated when opening existing file for write 1..1 } ok 8 - symlink creation updates parent dir mtime { ok 1 - dir mtime updated after symlink creation 1..1 } ok 9 - ctime also updates alongside mtime { ok 1 - directory has ctime ok 2 - dir ctime also updated 1..2 } ok 10 - no parent dir mocked means no crash { ok 1 - file created without mocked parent dir (no crash) 1..1 } 1..10 ok t/enoent_on_nonexistent.t ........... # Seeded srand with seed '20260328' from local date. ok 1 - -e on non-existent mock sets ENOENT { ok 1 - -e returns false for file mocked with undef contents ok 2 - $! is ENOENT (not EBADF) after -e on non-existent mock 1..2 } ok 2 - -e on non-existent mock (no content arg) { ok 1 - -e returns false for file mocked without content ok 2 - $! is ENOENT after -e on file mocked without content 1..2 } ok 3 - -f on non-existent mock sets ENOENT { ok 1 - -f returns false for file mocked with undef contents ok 2 - $! is ENOENT after -f on non-existent mock 1..2 } ok 4 - -d on non-existent mock sets ENOENT { ok 1 - -d returns false for non-existent dir mock ok 2 - $! is ENOENT after -d on non-existent dir mock 1..2 } ok 5 - stat on non-existent mock fails cleanly { ok 1 - stat returns empty list for non-existent mock not ok 2 - $! is ENOENT after stat on non-existent mock # TODO Overload::FileCheck XS clobbers errno on stat failure path # Failed test (with amnesty) '$! is ENOENT after stat on non-existent mock' # at t/enoent_on_nonexistent.t line 77. # +-----+----+-------+ # | GOT | OP | CHECK | # +-----+----+-------+ # | 0 | eq | 2 | # +-----+----+-------+ (If this table is too small, you can use the TABLE_TERM_SIZE=### env var to set a larger size, detected size is '74') 1..2 } ok 6 - lstat on non-existent mock fails cleanly { ok 1 - lstat returns empty list for non-existent mock ok 2 - $! is ENOENT after lstat on non-existent mock # TODO Overload::FileCheck XS clobbers errno on stat failure path 1..2 } ok 7 - -e succeeds for existing mock { ok 1 - -e returns true for file mocked with content ok 2 - $! is not set after successful -e 1..2 } ok 8 - -e on broken symlink sets ENOENT (not ELOOP) { ok 1 - -e returns false for broken symlink ok 2 - $! is ENOENT (not ELOOP) for broken symlink 1..2 } ok 9 - stat on broken symlink sets ENOENT { ok 1 - stat returns empty list for broken symlink ok 2 - $! is ENOENT after stat on broken symlink # TODO Overload::FileCheck XS clobbers errno on stat failure path 1..2 } ok 10 - -e on circular symlink sets ELOOP { ok 1 - -e returns false for circular symlink ok 2 - $! is ELOOP for circular symlink 1..2 } ok 11 - lstat on broken symlink succeeds (reports the link itself) { ok 1 - lstat returns stats for broken symlink (the link itself) ok 2 - $! is not set after successful lstat on broken symlink 1..2 } 1..11 ok t/fh-ref-leak.t ..................... # Seeded srand with seed '20260328' from local date. ok 1 - weak ref is defined before scope exit ok 2 - filehandle is garbage collected after -f (GH \#179) ok 3 - filehandle is garbage collected after -S (GH \#179) ok 4 - socketpair read does not hang after -S on dup'd filehandle (GH \#179) 1..4 ok t/file_access_hooks.t ............... # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - Using open on an unmocked file throws a croak ok 2 - Using a 2 arg open on an unmocked file throws a croak ok 3 - Using sysopen on an unmocked file throws a croak ok 4 - Using opendir on an unmocked directory throws a croak ok 5 - -e on an unmocked file throws a croak ok 6 - -e on an unmocked empty file name throws a croak ok 7 - -d on an unmocked dir throws a croak ok 8 - -l on an unmocked dir throws a croak # -------------- MOCK MODE -------------- ok 9 - -s t/data/example_email.csv ok 10 - Testing from a different source scope (DynaLoader) ok 11 - -d is allowed in certain packages without a die (DynaLoader) ok 12 - open STDIN isn't an error ok 13 - Stat on a file handle which didn't get filtered through MockFile works without a die 1..13 ok t/file_from_disk.t .................. ok 1 - open fake file for read ok 2 - Read line 1. ok 3 - Read line 2. ok 4 - open fake file for write ok 5 - file is written to ok 6 - The original file was unmodified 1..6 ok t/file_passthrough.t ................ # Seeded srand with seed '20260328' from local date. ok 1 - file_passthrough returns a mock object { ok 1 - returns a Test::MockFile object 1..1 } ok 2 - file_passthrough delegates to real filesystem { ok 1 - file does not exist yet on real FS ok 2 - can open file for writing via override ok 3 - -e sees the real file ok 4 - -f sees the real file ok 5 - -d correctly returns false ok 6 - -s returns correct size ok 7 - can open file for reading via override ok 8 - content matches what was written ok 9 - stat returns data ok 10 - stat size is correct ok 11 - can unlink via override ok 12 - file is gone after unlink 1..12 } ok 3 - file_passthrough coexists with regular mocks { ok 1 - regular mock file exists in mock world ok 2 - can open regular mock ok 3 - regular mock has mocked content ok 4 - passthrough file does not exist on disk yet ok 5 - can write to passthrough path ok 6 - passthrough file now exists on disk 1..6 } ok 4 - file_passthrough strict rule cleanup on scope exit { ok 1 - file does not exist (no strict violation) ok 2 - can create file in passthrough scope ok 3 - file exists while passthrough is alive ok 4 - strict mode violation after passthrough goes out of scope 1..4 } ok 5 - file_passthrough with glob pattern matches multiple files { ok 1 - main db file visible via -f ok 2 - wal file visible via -f ok 3 - shm file visible via -f ok 4 - stat works on main db file 1..4 } ok 6 - file_passthrough rejects undefined path { ok 1 - dies with undef path ok 2 - dies with empty path 1..2 } 1..6 ok t/filehandle_cleanup.t .............. # Seeded srand with seed '20260328' from local date. # --- Handle outlives its mock (reversed scope exit) --- ok 1 - open mocked file ok 2 - read from mocked file ok 3 - close() on orphaned handle does not crash # --- DESTROY on orphaned handle (scope exit without close) --- ok 4 - open mocked file ok 5 - DESTROY on orphaned handle does not crash # --- sysread on write-only handle returns EBADF --- ok 6 - open for write-only ok 7 - sysread on write-only handle returns undef ok 8 - errno is EBADF # --- syswrite with negative offset --- ok 9 - open for write ok 10 - syswrite with negative offset writes correct bytes ok 11 - negative offset selected from end of string ok 12 - open for write ok 13 - syswrite with out-of-bounds negative offset returns 0 ok 14 - warning emitted for out-of-bounds offset ok 15 - warning mentions offset # --- syswrite with positive offset --- ok 16 - open for write ok 17 - syswrite with positive offset writes correct bytes ok 18 - positive offset skipped beginning of buffer ok 19 - open for write ok 20 - syswrite with len > strlen writes available bytes ok 21 - file contains truncated write 1..21 ok t/filehandle_weakref.t .............. # Seeded srand with seed '20260328' from local date. # -------------- FILEHANDLE AFTER MOCK DESTRUCTION -------------- # When a mock goes out of scope, the weakened data ref in the tied # filehandle becomes undef. Operations must not crash. ok 1 - readline after mock destruction returns undef { ok 1 - readline does not crash after mock destruction ok 2 - readline returns undef 1..2 } ok 2 - getc after mock destruction returns undef { ok 1 - getc does not crash after mock destruction ok 2 - getc returns undef 1..2 } ok 3 - sysread after mock destruction returns 0 { ok 1 - sysread does not crash after mock destruction ok 2 - sysread returns 0 bytes ok 3 - errno is EBADF after sysread on destroyed mock 1..3 } ok 4 - print after mock destruction returns false { ok 1 - print does not crash after mock destruction ok 2 - print returns false when mock is destroyed ok 3 - errno is EBADF after print on destroyed mock 1..3 } ok 5 - printf after mock destruction returns false { ok 1 - printf does not crash after mock destruction ok 2 - printf returns false when mock is destroyed ok 3 - errno is EBADF after printf on destroyed mock 1..3 } ok 6 - syswrite after mock destruction returns 0 { ok 1 - syswrite does not crash after mock destruction ok 2 - syswrite returns 0 bytes ok 3 - errno is EBADF after syswrite on destroyed mock 1..3 } ok 7 - eof after mock destruction returns true { ok 1 - eof does not crash after mock destruction ok 2 - eof returns true (handle is dead) 1..2 } ok 8 - seek after mock destruction fails gracefully { ok 1 - seek does not crash after mock destruction ok 2 - seek returns 0 (failure) ok 3 - errno is EBADF after seek on destroyed mock 1..3 } ok 9 - tell after mock destruction still works { ok 1 - tell does not crash after mock destruction ok 2 - tell returns the last known position 1..2 } ok 10 - readline list context after mock destruction returns empty { ok 1 - readline (list) does not crash after mock destruction ok 2 - readline (list) returns empty list 1..2 } ok 11 - close after mock destruction succeeds { ok 1 - close does not crash after mock destruction ok 2 - close returns true 1..2 } 1..11 ok t/fileno.t .......................... # Seeded srand with seed '20260328' from local date. ok 1 - Opened file ok 2 - Refuse to support fileno ok 3 - Opened file 1..3 ok t/flock.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - flock LOCK_EX on mocked file succeeds { ok 1 - LOCK_EX succeeds on mocked file 1..1 } ok 2 - flock LOCK_SH on mocked file succeeds { ok 1 - LOCK_SH succeeds on mocked file 1..1 } ok 3 - flock LOCK_UN on mocked file succeeds { ok 1 - LOCK_EX succeeds ok 2 - LOCK_UN succeeds 1..2 } ok 4 - flock LOCK_EX|LOCK_NB on mocked file succeeds { ok 1 - LOCK_EX|LOCK_NB succeeds 1..1 } ok 5 - flock with sysopen on mocked file succeeds { ok 1 - LOCK_EX|LOCK_NB via sysopen ok 2 - LOCK_UN via sysopen 1..2 } ok 6 - flock on real file falls through to CORE::flock { ok 1 - LOCK_EX|LOCK_NB on real file succeeds ok 2 - LOCK_UN on real file succeeds 1..2 } ok 7 - reproducer from issue \#112 { ok 1 - flock succeeds (issue \#112 reproducer) 1..1 } 1..7 ok t/glob_real_files.t ................. # Seeded srand with seed '20260328' from local date. ok 1 - glob finds real .log file on disk ok 2 - glob finds all real files on disk ok 3 - glob returns empty for non-matching pattern ok 4 - angle bracket glob finds real .log file on disk ok 5 - glob returns both real and mocked files in sorted order ok 6 - glob returns mocked files that shadow real files without duplicates 1..6 ok t/globbing.t ........................ # Seeded srand with seed '20260328' from local date. ok 1 - glob(/*.txt) ok 2 - ok 3 - glob(/*.txt) ok 4 - ok 5 - glob(/*.{txt,jp{g}}) ok 6 - ok 7 - ok 8 - glob(/*.txt /*.jpg) ok 9 - ok 10 - Directory now exists ok 11 - Directory does not exist ok 12 - Created directory successfully ok 13 - Directory now exists ok 14 - 1..14 ok t/goto_is_available.t ............... # Seeded srand with seed '20260328' from local date. ok 1 - goto was first available on 5.016000 ok 2 - goto was available on 5.018000 ok 3 - goto was available on 5.020000 ok 4 - goto was broken on 5.022001 (7bdb4ff0943cf93297712faf504cdd425426e57f) ok 5 - goto was broken on 5.024000 (7bdb4ff0943cf93297712faf504cdd425426e57f) ok 6 - goto was broken on 5.026000 (7bdb4ff0943cf93297712faf504cdd425426e57f) ok 7 - goto works again for 5.028000 ok 8 - goto works on 5.030000 1..8 ok t/handle-corruption.t ............... # Seeded srand with seed '20260328' from local date. ok 1 - IO::Handle=GLOB->isa('IO::Handle') ok 2 - Succesfully opened file ok 3 - No error (string) ok 4 - No error (code) ok 5 - IO::File=GLOB->isa('IO::File') ok 6 - Successfully closed handle ok 7 - No error (string) ok 8 - No error (code) 1..8 ok t/import.t .......................... # Seeded srand with seed '20260328' from local date. # Happy Imports ok 1 - default mode is STRICT_MODE_DEFAULT { ok 1 - Exit Value Check 1..1 } ok 2 - import enable STRICT_MODE_ENABLED { ok 1 - Exit Value Check 1..1 } ok 3 - use Test::MockFile qw< strict > { ok 1 - Exit Value Check 1..1 } ok 4 - use Test::MockFile qw< nostrict > { ok 1 - Exit Value Check 1..1 } ok 5 - multiple - use Test::MockFile qw< strict > { ok 1 - Exit Value Check 1..1 } # Failed Imports ok 6 - use Test::MockFile qw< strict > + qw< nostrict > { ok 1 - Exit Value Check 1..1 } ok 7 - use Test::MockFile + qw< nostrict > { ok 1 - Exit Value Check 1..1 } 1..7 ok t/io_file_compat.t .................. # -------------- IO::File->new with mocked file -------------- ok 1 - IO::File->new opens a mocked file ok 2 - ... reads correct content ok 3 - ... EOF # -------------- IO::File->new read mode (default) -------------- ok 4 - IO::File->new with bare filename opens mocked file ok 5 - ... reads all lines # -------------- IO::File->new with explicit read mode '<' -------------- ok 6 - IO::File->new with '<' mode opens mocked file ok 7 - ... reads correct content # -------------- IO::File->new with write mode 'w' -------------- ok 8 - IO::File->new with 'w' mode opens mocked file ok 9 - ... content was written to mock # -------------- IO::File->new with append mode 'a' -------------- ok 10 - IO::File->new with 'a' mode opens mocked file ok 11 - ... content was appended # -------------- IO::File->new with read-write mode 'r+' -------------- ok 12 - IO::File->new with 'r+' mode opens mocked file ok 13 - ... reads existing content # -------------- IO::File->new on non-existent mock -------------- ok 14 - IO::File->new returns undef for non-existent mock # -------------- IO::File->new with numeric sysopen mode -------------- ok 15 - IO::File->new with O_RDONLY opens mocked file ok 16 - ... reads correct content via sysopen # -------------- IO::File->open method on existing object -------------- ok 17 - IO::File->new creates empty handle ok 18 - ... open method succeeds on mocked file ok 19 - ... reads correct content # -------------- IO::File with 2-arg embedded mode -------------- ok 20 - IO::File->new with '>/path' opens mocked file for write ok 21 - ... content was written # -------------- IO::File with write+truncate via sysopen mode -------------- ok 22 - IO::File->new with O_WRONLY|O_TRUNC opens mocked file ok 23 - ... old content was truncated # -------------- IO::File getline method on mocked file -------------- ok 24 - IO::File->new opens for getline test ok 25 - ... getline returns first line ok 26 - ... getline returns second line ok 27 - ... getline returns third line ok 28 - ... getline returns undef at EOF # -------------- IO::File->new on directory mock returns EISDIR -------------- ok 29 - IO::File->new on a directory returns undef ok 30 - ... errno is EISDIR # -------------- IO::File->new on directory mock via sysopen returns EISDIR -------------- ok 31 - IO::File->new with O_RDONLY on a directory returns undef ok 32 - ... errno is EISDIR # -------------- IO::File append mode preserves append semantics after seek -------------- ok 33 - IO::File->new with 'a' mode opens mocked file ok 34 - ... first append works ok 35 - ... append after seek still appends 1..35 ok t/manifest.t ........................ skipped: Test::CheckManifest is broken - https://github.com/reneeb/Test-CheckManifest/issues/20 t/mkdir.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - basic mkdir { ok 1 - REAL mkdir when dir is missing. ok 2 - - $! is unset. ok 3 - REAL rmdir when dir is there ok 4 - MOCK mkdir when dir is missing. ok 5 - - $! is unset. ok 6 - Perms are 0755 ok 7 - -d ok 8 - - $! is unset. ok 9 - MOCK rmdir when dir is there ok 10 - - $! is unset. ok 11 - Directory is not there with -d ok 12 - Directory is not there with -e 1..12 } ok 2 - undef dir name { ok 1 - REAL mkdir when undef is passed as the file name. ok 2 - - $! is ENOENT. ok 3 - - Returns 0 ok 4 - MOCK mkdir when undef is passed as the file name. ok 5 - - $! is ENOENT. ok 6 - - Returns 0 1..6 } ok 3 - REAL mkdir { ok 1 - put the real tempdir back ok 2 - A real mkdir through the shim ok 3 - - $! is unset. ok 4 - A real mkdir through the shim when it exists already ok 5 - - $! is EEXIST. 1..5 } ok 4 - mkdir when file exists { ok 1 - A real mkdir when the dir is already a file. ok 2 - - $! is EEXIST. ok 3 - A mock mkdir when the dir is already a file. ok 4 - - $! is EEXIST. ok 5 - A mock mkdir when the path is a mocked file but not on disk becomes a directory mock. ok 6 - $mock is now a directory 1..6 } ok 5 - mkdir when symlink exists { ok 1 - A real mkdir when the dir is already a symlink. ok 2 - - $! is EEXIST. ok 3 - A mock mkdir when the dir is already a symlink. ok 4 - - $! is EEXIST. ok 5 - A mock mkdir when the path is a mocked symlink but not on disk turns the mock object into a dir. ok 6 - $mock is now a directory 1..6 } ok 6 - mkdir with file perms { ok 1 - A real mkdir with 0770 perms. ok 2 - - $! is unset. ok 3 - permissions are the real file's permissions ok 4 - A mock mkdir with 0700 perms. ok 5 - - $! is unset. ok 6 - Permissions are the mock permissions of 0700 ok 7 - Remove the fake dir ok 8 - A mock mkdir with 0700 perms. ok 9 - - $! is unset. ok 10 - Permissions get umask applied. 1..10 } 1..6 ok t/mock_stat.t ....................... # Seeded srand with seed '20260328' from local date. # _abs_path_to_file ok 1 - no / prefix makes prepends path on it ok 2 - undef is undef ok 3 - _abs_path_to_file( '/lib' ) = '/lib' ok 4 - _abs_path_to_file( '/lib/' ) = '/lib' ok 5 - _abs_path_to_file( '/abc/.' ) = '/abc' ok 6 - _abs_path_to_file( '/abc/./' ) = '/abc' ok 7 - _abs_path_to_file( '/abc/./././.' ) = '/abc' ok 8 - _abs_path_to_file( '/from/here/or-not/..' ) = '/from/here' ok 9 - _abs_path_to_file( '/../../..' ) = '/' ok 10 - _abs_path_to_file( '/one/two/three/four/../../..' ) = '/one' ok 11 - _abs_path_to_file( '/a.b.c.d' ) = '/a.b.c.d' ok 12 - _abs_path_to_file( '/there/./xyz' ) = '/there/xyz' ok 13 - _abs_path_to_file( '/./foo' ) = '/foo' ok 14 - _abs_path_to_file( '/a/./b/./c' ) = '/a/b/c' ok 15 - _abs_path_to_file( '/there/..' ) = '/' ok 16 - _abs_path_to_file( '/..' ) = '/' ok 17 - _abs_path_to_file( '/../foo' ) = '/foo' ok 18 - _abs_path_to_file( '/there/sub/../file' ) = '/there/file' ok 19 - _abs_path_to_file( '/a/b/c/../../d' ) = '/a/d' ok 20 - _abs_path_to_file( '/' ) = '/' ok 21 - _abs_path_to_file( '/foo//bar' ) = '/foo/bar' ok 22 - _abs_path_to_file( '///foo///bar///' ) = '/foo/bar' # _fh_to_file ok 23 - _fh_to_file() ok 24 - _fh_to_file(0) ok 25 - _fh_to_file('') ok 26 - _fh_to_file(' ') ok 27 - _fh_to_file('/etc/passwd') ok 28 - _fh_to_file($fh) ok 29 - _fh_to_file($fh2) ok 30 - _fh_to_file($fh) when closed. # _find_file_or_fh ok 31 - _find_file_or_fh('/abc') ok 32 - _find_file_or_fh('/abc', 1) - follow ok 33 - _find_file_or_fh('/broken_link', 1) is undef when /broken_link is mocked. ok 34 - _find_file_or_fh('/aaaa', 1) - with circular links ok 35 - $! is ELOOP # _mock_stat ok 36 - An unmocked file will return FALLBACK_TO_REAL_OP() to tell XS to handle it ok 37 - no args fails cause we should have gotten a stat type. ok 38 - An unknown stat type fails cause this should never happen. ok 39 - empty string passes to XS ok 40 - A space string passes to XS ok 41 - /foo/bar mock stat ok 42 - /aaa mock stat when looped. ok 43 - Throws an ELOOP error ok 44 - /foo/baz mock stat when missing. ok 45 - Throws an ENOENT error for missing file ok 46 - lstat on /broken_link returns the stat on the symlink itself. ok 47 - stat on /broken_link returns 0 since what it points to doesn't exist. ok 48 - mocked file is executable ok 49 - default uid is current UID # GID 110 ok 50 - default fid is current GID ok 51 - Directory /quux exists ok 52 - Directory /quux/ also exists # path canonicalization — stat resolves . and .. components (GH #108) ok 53 - -d "/there/." resolves to mocked /there ok 54 - -e "/there/./xyz" resolves to mocked /there/xyz ok 55 - -f "/there/./xyz" resolves to mocked /there/xyz ok 56 - stat("/there/./xyz") returns stat data ok 57 - -d "/up/down/.." resolves to mocked /up # directory stat size returns blksize, not stringified arrayref length ok 58 - directory stat size is blksize (4096), not stringified ref length ok 59 - -s on directory returns blksize 1..59 ok t/multi_handle.t .................... # Seeded srand with seed '20260328' from local date. # -------------- Two read handles to the same file (#27) -------------- ok 1 - open first read handle ok 2 - open second read handle ok 3 - fh1 reads line 1 ok 4 - fh1 reads line 2 ok 5 - fh2 reads line 1 independently ok 6 - fh1 reads line 3 ok 7 - fh2 reads line 2 independently ok 8 - fh2 reads line 3 after fh1 is closed ok 9 - fh2 is at EOF # -------------- Read + write handles to the same file (#27) -------------- ok 10 - open read handle ok 11 - open append handle ok 12 - read handle sees original content ok 13 - read handle sees appended content ok 14 - file contents after both handles closed # -------------- fhs tracking cleanup (#27) -------------- ok 15 ok 16 - one handle tracked after first open ok 17 - two handles tracked after second open ok 18 - one handle tracked after closing first ok 19 - zero handles tracked after closing both # -------------- Sysopen multiple handles (#27) -------------- ok 20 - sysopen first handle ok 21 - sysopen second handle ok 22 - sysread from first handle ok 23 - sysread from second handle (independent position) 1..23 ok t/new_dir_interface.t ............... # Seeded srand with seed '20260328' from local date. ok 1 - ->dir() checks when going through ->new_dir() { ok 1 - Cannot do TMF->dir( "/etc", { 1 => 2 } ) ok 2 - Cannot do TMF->dir( "/etc", [@content], { 1 => 2 } ) ok 3 - Cannot do TMF->dir( "/etc", [@content] ) 1..3 } ok 2 - Scenario 1: ->new_dir() can create dir { ok 1 - Directory /foo1 exists ok 2 - Correct contents of directory through ->contents() ok 3 - opendir() /foo1 successful ok 4 - readdir() on /foo1 successful ok 5 - Correct directory content through Perl core keywords ok 6 - closedir() on /foo1 successful 1..6 } ok 3 - Scenario 2: ->new_dir() with mode sets the mode { ok 1 - /foo2 exists ok 2 - /foo2 exists ok 3 - We picked perms (0300) that are not the default (0755) ok 4 - Mode was set correctly ok 5 - Correct contents to /foo2 ok 6 - opendir() /foo2 successful ok 7 - readdir() on /foo2 successful ok 8 - Correct directory content through Perl core keywords ok 9 - closedir() on /foo2 successful 1..9 } ok 4 - Scenario 3: ->new_dir() after mkdir() has an error { ok 1 - /foo3 exists ok 2 - mkdir /foo3 fails, since dir already exists ok 3 - $! is set to an error: 17 (File exists) ok 4 - Correct contents to /foo3 ok 5 - opendir() /foo3 successful ok 6 - readdir() on /foo3 successful ok 7 - Correct directory content through Perl core keywords ok 8 - closedir() on /foo3 successful 1..8 } 1..4 ok t/open-noclose.t .................... # Seeded srand with seed '20260328' from local date. ok 1 - missing file argument ok 2 - missing file # empty file ok 3 - empty file ok 4 - file is not empty ok 5 ok 6 - /tmp/somewhere file should not be empty (on second read) 1..6 ok t/open.t ............................ # -------------- REAL MODE -------------- ok 1 - Open a real file bypassing PERLIO ok 2 - ... line 1 ok 3 - ... line 2 ok 4 - ... EOF # -------------- MOCK MODE -------------- ok 5 - Open a mocked file bypassing PERLIO ok 6 - ... line 1 ok 7 - ... line 2 ok 8 - ... EOF ok 9 - Real file is there ok 10 - Real file is not there # Following symlinks for open ok 11 - Open a mocked file via its symlink ok 12 - ... line 1 ok 13 - ... line 2 ok 14 - ... EOF ok 15 - Open a mocked file via its symlink when the file is missing fails. ok 16 - $! is ENOENT # Subtest: open modes ok 1 - Two-arg > open works ok 2 - No error ok 3 - Successfully closed open handle ok 4 - No error ok 5 - Two-arg >> open works ok 6 - No error ok 7 - Successfully closed open handle ok 8 - No error ok 9 - Two-arg < open works ok 10 - arg not changed ok 11 - No error ok 12 - Successfully closed open handle ok 13 - No error ok 14 - Two-arg open works ok 15 - arg not changed ok 16 - No error ok 17 - Successfully closed open handle ok 18 - No error ok 19 - Two-arg +< open fails ok 20 - No error ok 21 - Three-arg +< open fails ok 22 - No error ok 23 - Two-arg +> open fails ok 24 - No error ok 25 - Three-arg +> open fails ok 26 - No error ok 27 - Succesful three-arg pipe open write ok 28 - Successfully closed pipe ok 29 - No error ok 30 - Succesful two-arg pipe open write ok 31 - Successfully closed pipe ok 32 - No error ok 33 - Succesful three-arg pipe open read ok 34 - Succesfully read from pipe with three-arg ok 35 - Successfully closed pipe ok 36 - Succesful two-arg pipe open read ok 37 - Succesfully read from pipe with two-arg ok 38 - Successfully closed pipe ok 39 - No error 1..39 ok 17 - open modes # -------------- BROKEN SYMLINK OPEN -------------- ok 18 - open on broken symlink returns false ok 19 - open on broken symlink sets $! to ENOENT 1..19 ok t/open_broken_symlink_create.t ...... # Seeded srand with seed '20260328' from local date. # --- open('>') through broken symlink creates target file --- ok 1 - Symlink exists ok 2 - Target does not exist yet ok 3 - open('>') through broken symlink succeeds ok 4 - Target file now exists ok 5 - Re-open for reading through symlink ok 6 - Content written through broken symlink # --- open('>>') through broken symlink creates target file --- ok 7 - Target does not exist ok 8 - open('>>') through broken symlink succeeds ok 9 - Target file created by append # --- open('+>') through broken symlink creates target file --- ok 10 - Target does not exist ok 11 - open('+>') through broken symlink succeeds ok 12 - Target file created by +> # --- open('+>>') through broken symlink creates target file --- ok 13 - Target does not exist ok 14 - open('+>>') through broken symlink succeeds ok 15 - Target file created by +>> # --- open('<') through broken symlink returns ENOENT --- ok 16 - open('<') through broken symlink fails ok 17 - errno is ENOENT for read-only open through broken symlink # --- open('+<') through broken symlink returns ENOENT --- ok 18 - open('+<') through broken symlink fails ok 19 - errno is ENOENT for +< open through broken symlink # --- sysopen(O_CREAT) through broken symlink creates target file --- ok 20 - Target does not exist ok 21 - sysopen(O_WRONLY|O_CREAT) through broken symlink succeeds ok 22 - Target file created by sysopen O_CREAT ok 23 - Read back through symlink ok 24 - Content matches what was written # --- sysopen(O_RDWR|O_CREAT) through broken symlink creates target --- ok 25 - sysopen(O_RDWR|O_CREAT) through broken symlink succeeds ok 26 - Target file created by sysopen O_RDWR|O_CREAT # --- sysopen without O_CREAT through broken symlink returns ENOENT --- ok 27 - sysopen(O_RDONLY) through broken symlink fails ok 28 - errno is ENOENT for O_RDONLY through broken symlink ok 29 - sysopen(O_WRONLY) without O_CREAT fails ok 30 - errno is ENOENT for O_WRONLY without O_CREAT # --- open through chained broken symlink creates target --- ok 31 - First symlink exists ok 32 - Second symlink exists ok 33 - Target does not exist ok 34 - open('>') through double symlink succeeds ok 35 - Target file created through symlink chain # --- open('>') through circular symlink still returns ELOOP --- ok 36 - open('>') through circular symlink fails ok 37 - errno is ELOOP for circular symlink even with write mode 1..37 ok t/open_dir_symlink.t ................ # Seeded srand with seed '20260328' from local date. # --- open() on directory mocks returns EISDIR --- ok 1 - Directory mock exists ok 2 - open('<') on dir fails ok 3 - errno is EISDIR for read open on dir ok 4 - open('>') on dir fails ok 5 - errno is EISDIR for write open on dir ok 6 - open('>>') on dir fails ok 7 - errno is EISDIR for append open on dir ok 8 - open('+<') on dir fails ok 9 - errno is EISDIR for read-write open on dir ok 10 - open('+>') on dir fails ok 11 - errno is EISDIR for write-read open on dir # --- sysopen() on directory mocks returns EISDIR --- ok 12 - Directory mock exists ok 13 - sysopen(O_RDONLY) on dir fails ok 14 - errno is EISDIR for O_RDONLY sysopen on dir ok 15 - sysopen(O_WRONLY) on dir fails ok 16 - errno is EISDIR for O_WRONLY sysopen on dir ok 17 - sysopen(O_RDWR) on dir fails ok 18 - errno is EISDIR for O_RDWR sysopen on dir ok 19 - sysopen(O_WRONLY|O_CREAT) on dir fails ok 20 - errno is EISDIR even with O_CREAT on dir # --- sysopen() follows symlinks --- ok 21 - Symlink mock exists ok 22 - Target file exists ok 23 - sysopen(O_RDONLY) through symlink succeeds ok 24 - Read through symlink returns target contents ok 25 - sysopen(O_WRONLY|O_TRUNC) through symlink succeeds ok 26 - Write through symlink updates target file # --- sysopen() O_NOFOLLOW rejects symlinks --- ok 27 - sysopen(O_NOFOLLOW) on symlink fails ok 28 - errno is ELOOP for O_NOFOLLOW on symlink ok 29 - sysopen(O_NOFOLLOW) on regular file succeeds # --- sysopen() through broken symlink returns ENOENT --- ok 30 - Broken symlink mock exists ok 31 - sysopen(O_RDONLY) through broken symlink fails ok 32 - errno is ENOENT for broken symlink ok 33 - sysopen(O_WRONLY) through broken symlink fails ok 34 - errno is ENOENT for broken symlink write # --- sysopen() through circular symlink returns ELOOP --- ok 35 - sysopen through circular symlink fails ok 36 - errno is ELOOP for circular symlink # --- sysopen() O_TRUNC applied correctly --- ok 37 - sysopen(O_WRONLY|O_TRUNC) succeeds ok 38 - O_TRUNC clears file contents ok 39 - Contents after O_TRUNC write ok 40 - sysopen(O_RDONLY|O_TRUNC) on non-existent fails ok 41 - errno is ENOENT for O_TRUNC on non-existent ok 42 - Contents still undef (file not created) # --- directory mock state preserved after failed open --- ok 43 - Dir is still a directory after failed open ok 44 - Dir contents still returns arrayref 1..44 ok t/open_edge_cases.t ................. # Seeded srand with seed '20260328' from local date. ok 1 - +>> two-arg open mode parsing { ok 1 - open with +>> two-arg succeeds ok 2 - +>> appends to existing content 1..2 } ok 2 - +>> on new file creates it { ok 1 - +>> creates non-existent file ok 2 - +>> on new file writes correctly 1..2 } ok 3 - existing >> mode still works { ok 1 - >> two-arg still works ok 2 - >> appends correctly 1..2 } ok 4 - +> two-arg still works { ok 1 - +> two-arg works ok 2 - +> truncates on open ok 3 - +> write works 1..3 } ok 5 - opendir follows symlink to directory { ok 1 - opendir on symlink to dir succeeds ok 2 - readdir through symlink finds child file 1..2 } ok 6 - opendir on broken symlink fails with ENOENT { ok 1 - opendir on broken symlink fails ok 2 - errno is ENOENT for broken symlink 1..2 } ok 7 - opendir on symlink to file fails with ENOTDIR { ok 1 - opendir on symlink to file fails ok 2 - errno is ENOTDIR 1..2 } 1..7 ok t/open_return_undef.t ............... # Seeded srand with seed '20260328' from local date. ok 1 - open on non-existent file returns undef in scalar and list context { ok 1 - open returns undef in scalar context for non-existent file ok 2 - errno is ENOENT ok 3 - open returns 1-element list in list context (not empty) ok 4 - the single element is undef 1..4 } ok 2 - open on directory returns undef (EISDIR) { ok 1 - open on directory returns undef in scalar context ok 2 - errno is EISDIR ok 3 - open on directory returns 1-element list in list context ok 4 - the single element is undef 1..4 } ok 3 - open on broken symlink returns undef (ENOENT) { ok 1 - open on broken symlink returns undef in scalar context ok 2 - errno is ENOENT for broken symlink ok 3 - open on broken symlink returns 1-element list in list context ok 4 - the single element is undef 1..4 } ok 4 - open on circular symlink returns undef (ELOOP) { ok 1 - open on circular symlink returns undef in scalar context ok 2 - errno is ELOOP for circular symlink ok 3 - open on circular symlink returns 1-element list in list context ok 4 - the single element is undef 1..4 } 1..4 ok t/open_strict.t ..................... # Seeded srand with seed '20260328' from local date. ok 1 - open() to read a filehandle fails ok 2 - open() to dup a file descriptor works ok 3 - open() to re-perlify a file descriptor works 1..3 ok t/open_two_arg_special_chars.t ...... # Seeded srand with seed '20260328' from local date. ok 1 - 2-arg open with spaces in filename { ok 1 - open succeeds ok 2 - no die on filename with spaces ok 3 - read content correctly 1..3 } ok 2 - 2-arg open with @ in filename { ok 1 - open succeeds ok 2 - no die on filename with @ ok 3 - read content correctly 1..3 } ok 3 - 2-arg open with parentheses in filename { ok 1 - open succeeds ok 2 - no die on filename with parens ok 3 - read content correctly 1..3 } ok 4 - 2-arg open with hash in filename { ok 1 - open succeeds ok 2 - no die on filename with \# ok 3 - read content correctly 1..3 } ok 5 - 2-arg open with equals and comma in filename { ok 1 - open succeeds ok 2 - no die on = and , in filename ok 3 - read content correctly 1..3 } ok 6 - 2-arg write mode with special chars still works { ok 1 - 2-arg write open with spaces works ok 2 - content was written 1..2 } ok 7 - 2-arg append mode with special chars still works { ok 1 - 2-arg append open with special chars works ok 2 - content was appended 1..2 } ok 8 - 2-arg open still passes through for unmocked files { ok 1 - 2-arg open on unmocked special-char path returns false 1..1 } 1..8 ok t/opendir.t ......................... # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - Temp is created on disk. ok 2 - /tmp/yWyZNHRLkN can be read ok 3 - We read 3 entries in some order. Not predictable, but sort fixes that! ok 4 - undef when nothing left from readdir. ok 5 - close the fake dir handle ok 6 - warn on readdir when file handle is closed. ok 7 - opendir on a bad path returns false ok 8 - $! numeric is right. ok 9 - opendir on a file returns false ok 10 - $! numeric is right. ok 11 - We only warn if the file handle or glob is invalid. # -------------- MOCK MODE -------------- ok 12 - Mocked temp dir opens and returns true ok 13 - Read . from fake readdir ok 14 - Read .. from fake readdir ok 15 - tell dir in the middle of fake readdir is right. ok 16 - Read abc from fake readdir ok 17 - Read def from fake readdir ok 18 - tell dir at the end of fake readdir is right. ok 19 - Read from fake readdir but no more in the list. ok 20 - Read from fake readdir but no more in the list. ok 21 - Read from fake readdir but no more in the list. ok 22 - Read from fake readdir but no more in the list. ok 23 - rewinddir returns true. ok 24 - telldir afer rewinddir is right. ok 25 - Read the whole dir from fake readdir after rewinddir ok 26 - tell dir at the end of fake readdir is right. ok 27 - seekdir returns where it sought. ok 28 - Read the whole dir from fake readdir after seekdir ok 29 - opendir on a mocked file returns false ok 30 - $! numeric is right. ok 31 - Symlink and directories appears in directory content ok 32 - Did not get confused by internal files ok 33 - dir() detects mocked child file via keys %files_being_mocked ok 34 - readdir returns correct entries for dir with mocked children ok 35 - readdir in list context at EOF returns empty list, not (undef) ok 36 - while(@e = readdir $dh) collects all entries and terminates ok 37 - loop terminated without hitting safety limit # -------------- BAREWORD GUARD REGRESSION -------------- ok 38 - opendir with ref filehandle works ok 39 - readdir with ref fh reads . ok 40 - readdir with ref fh reads .. ok 41 - telldir with ref fh returns correct position ok 42 - readdir with ref fh reads aaa ok 43 - rewinddir with ref fh returns 1 ok 44 - telldir after rewinddir is 0 ok 45 - telldir is 2 after seekdir(2) ok 46 - readdir after seekdir(2) returns remaining entries ok 47 - closedir with ref fh returns 1 # opendir failure returns undef in list context (single-element list) ok 48 - opendir failure returns one element in list context ok 49 - opendir failure element is false ok 50 - opendir failure element is undef # -------------- closedir double-close returns EBADF -------------- ok 51 - first closedir succeeds ok 52 - second closedir warns about invalid dirhandle ok 53 - second closedir returns undef ok 54 - second closedir sets EBADF # -------------- seekdir with negative position clamps to 0 -------------- ok 55 - readdir returns first entry before seekdir ok 56 - seekdir(-1) clamps tell to 0 ok 57 - readdir after seekdir(-1) returns first entry ok 58 - readdir list after seekdir(-99) returns all entries # -------------- readdir on closed mock dirhandle warns -------------- ok 59 - closedir succeeds ok 60 - readdir on closed mock dh warns ok 61 - readdir on closed mock dh returns undef in scalar context ok 62 - readdir on closed mock dh warns in list context ok 63 - readdir on closed mock dh returns empty list in list context # -------------- telldir on closed mock dirhandle warns -------------- ok 64 - closedir succeeds ok 65 - telldir on closed mock dh warns ok 66 - telldir on closed mock dh returns undef # -------------- seekdir on closed mock dirhandle warns -------------- ok 67 - closedir succeeds ok 68 - seekdir on closed mock dh warns # -------------- rewinddir on closed mock dirhandle warns -------------- ok 69 - closedir succeeds ok 70 - rewinddir on closed mock dh warns 1..70 ok t/path.t ............................ # Seeded srand with seed '20260328' from local date. ok 1 - /some/nonexistant/path is set when the file isn't there. ok 2 - /some/nonexistant/path is set when the file is there. 1..2 ok t/perms.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - set_user and clear_user { ok 1 - open succeeds with 0000 mode when no mock user set ok 2 - open fails with 0000 mode when mock user is non-owner ok 3 - errno is EACCES ok 4 - open succeeds again after clear_user 1..4 } ok 2 - open read-only with owner read permission { ok 1 - owner can read 0400 file ok 2 - other user cannot read 0400 file 1..2 } ok 3 - open write-only with owner write permission { ok 1 - owner can write 0200 file ok 2 - other user cannot write 0200 file 1..2 } ok 4 - open read-write with owner rw permission { ok 1 - owner can rw 0600 file ok 2 - other user cannot rw 0600 file 1..2 } ok 5 - open with group permissions { 1..0 # SKIP umask strips group bits } ok 6 - open with other permissions { 1..0 # SKIP umask strips other bits } ok 7 - root can read/write any file { ok 1 - root can read 0000 file ok 2 - root can write 0000 file 1..2 } ok 8 - sysopen permission checks { ok 1 - owner can sysopen O_RDONLY on 0400 ok 2 - non-owner cannot sysopen O_RDONLY on 0400 ok 3 - sysopen errno is EACCES ok 4 - owner cannot sysopen O_WRONLY on 0400 (no write bit) ok 5 - sysopen errno is EACCES for write 1..5 } ok 9 - opendir permission checks { ok 1 - owner can opendir 0700 dir ok 2 - non-owner cannot opendir 0700 dir ok 3 - opendir errno is EACCES 1..3 } ok 10 - opendir group read permission { 1..0 # SKIP umask strips group bits } ok 11 - unlink permission checks on parent directory { ok 1 - parent owner can unlink child ok 2 - non-owner cannot unlink in 0755 dir (no write) ok 3 - unlink errno is EACCES 1..3 } ok 12 - mkdir permission checks on parent directory { ok 1 - parent owner can mkdir ok 2 - cannot mkdir in 0555 dir (no write) ok 3 - mkdir errno is EACCES 1..3 } ok 13 - rmdir permission checks on parent directory { ok 1 - parent owner can rmdir empty dir ok 2 - cannot rmdir in 0555 dir (no write) ok 3 - rmdir errno is EACCES 1..3 } ok 14 - chmod permission checks { ok 1 - owner can chmod ok 2 - non-owner cannot chmod ok 3 - chmod errno is EPERM ok 4 - root can chmod any file 1..4 } ok 15 - chown uses mock user identity { ok 1 - non-root mock user cannot chown to different user ok 2 - chown errno is EPERM ok 3 - root mock user can chown 1..3 } ok 16 - non-existent file returns ENOENT not EACCES { ok 1 - cannot open non-existent file 1..1 } ok 17 - user with multiple groups { 1..0 # SKIP umask strips group bits } ok 18 - open > on new file checks parent directory perms { ok 1 - cannot create file in read-only parent dir ok 2 - errno is EACCES ok 3 - can create file in writable parent dir 1..3 } 1..18 ok t/plugin-filetemp.t ................. # Seeded srand with seed '20260328' from local date. ok 1 - File::Temp is not loaded before Test::MockFile ok 2 - File::Temp is loaded ok 3 - we can open a tempfile ok 4 - Can open directory from tempdir ok 5 - we can open a tempfile under a tempdir ok 6 - print to a tempfile - scalar context ok 7 - opendir - newdir ok 8 - open a file created under newdir ok 9 - tempfile in scalar context 1..9 ok t/plugin.t .......................... # Seeded srand with seed '20260328' from local date. ok 1 - Cannot find a Test::MockFile plugin for Unknown { ok 1 - Exit Value Check ok 2 - Cannot find a Test::MockFile plugin for Unknown 1..2 } ok 2 - create Test/MockFile/Plugin dir for testing ok 3 - Loading a plugin from default namespace { ok 1 - Exit Value Check ok 2 - load and register plugin 1..2 } ok 4 - use Test::MockFile ( plugin => [ 'MyPlugin' ] ) { ok 1 - Exit Value Check ok 2 - load and register plugin 1..2 } # Testing a custom namespace ok 5 - create Test/MockFile/Plugin dir for testing ok 6 - Loading a plugin from default namespace { ok 1 - Exit Value Check ok 2 - load and register plugin from a custom namespace 1..2 } 1..6 ok t/pod-coverage.t .................... skipped: Author tests not required for installation t/pod.t ............................. skipped: Author tests not required for installation t/portability_errno.t ............... # Seeded srand with seed '20260328' from local date. ok 1 - sysopen O_NOFOLLOW on symlink sets ELOOP { ok 1 - sysopen O_NOFOLLOW on regular file succeeds ok 2 - sysopen O_NOFOLLOW on symlink fails ok 3 - $! is ELOOP (not hardcoded 40) 1..3 } ok 2 - rmdir non-empty directory sets ENOTEMPTY { ok 1 - rmdir on non-empty directory fails ok 2 - $! is ENOTEMPTY (not hardcoded 39) 1..2 } ok 3 - syswrite with non-numeric length warns { ok 1 - syswrite with non-numeric len returns 0 ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions non-numeric argument 1..4 } ok 4 - syswrite with negative length warns { ok 1 - syswrite with negative length returns 0 ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions negative length 1..4 } ok 5 - syswrite with offset outside string warns { ok 1 - syswrite with offset beyond string returns 0 ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions offset 1..4 } ok 6 - syswrite with valid negative offset works { ok 1 - syswrite with negative offset returns correct byte count ok 2 - correct substring written with negative offset 1..2 } ok 7 - syswrite with too-negative offset warns { ok 1 - syswrite with offset before start of string returns 0 ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions offset 1..4 } ok 8 - sysread with non-numeric length warns and returns undef { ok 1 - sysread with non-numeric len returns undef ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions non-numeric argument ok 5 - buffer is unchanged after failed sysread 1..5 } ok 9 - sysread with negative length warns and returns undef { ok 1 - sysread with negative length returns undef ok 2 - $! is set to EINVAL ok 3 - got a warning ok 4 - warning mentions negative length ok 5 - buffer is unchanged after failed sysread 1..5 } ok 10 - sysread with undef buffer initializes it { ok 1 - sysread with undef buffer returns 5 bytes ok 2 - buffer contains the read data 1..2 } ok 11 - sysread with zero length returns 0 { ok 1 - sysread with len=0 returns 0 ok 2 - buffer is empty after zero-length read 1..2 } 1..11 ok t/print_separators.t ................ # Seeded srand with seed '20260328' from local date. # --- output field separator ($,) --- ok 1 - print with $, = "," joins args with comma ok 2 - print with $, = "\t" joins args with tab ok 3 - print without $, concatenates directly ok 4 - print with $, and single arg has no separator ok 5 - print with multi-char $, works # --- verify printf is unaffected by $, --- ok 6 - printf ignores $, (format handles args) 1..6 ok t/read_write_helpers.t .............. # Seeded srand with seed '20260328' from local date. # -------------- read() tests -------------- ok 1 - read returns file contents in scalar context ok 2 - read returns lines in list context ok 3 - read handles missing trailing newline ok 4 - read on empty file returns empty string ok 5 - read on empty file returns empty list ok 6 - read on non-existent file returns undef in scalar context ok 7 - read on non-existent file returns empty list ok 8 - read with no newline gives single element list ok 9 - read respects custom $/ separator ok 10 - read with undef $/ returns single element in list context ok 11 - read dies on directory ok 12 - read dies on symlink # -------------- write() tests -------------- ok 13 - write sets file contents ok 14 - write returns the object ok 15 - file does not exist before write ok 16 - write brings non-existent file into existence ok 17 - contents are correct after write-create ok 18 - write concatenates multiple args ok 19 - write overwrites existing contents ok 20 - write with empty string empties the file ok 21 - write updates mtime ok 22 - write updates ctime ok 23 - write dies on directory ok 24 - write dies on symlink # -------------- append() tests -------------- ok 25 - append adds to existing contents ok 26 - append returns the object ok 27 - file does not exist before append ok 28 - append brings non-existent file into existence ok 29 - contents are correct after append-create ok 30 - append concatenates multiple args ok 31 - append updates mtime ok 32 - append updates ctime ok 33 - appending empty string is a no-op on contents ok 34 - append dies on directory ok 35 - append dies on symlink # -------------- chaining tests -------------- ok 36 - write->append chaining works 1..36 ok t/read_write_perms.t ................ # Seeded srand with seed '20260328' from local date. ok 1 - open write-only succeeds ok 2 - sysread on write-only handle returns undef ok 3 - sysread on write-only handle sets EBADF ok 4 - open read-only succeeds ok 5 - sysread on read-only handle returns byte count ok 6 - sysread on read-only handle reads data ok 7 - open read-write succeeds ok 8 - sysread on read-write handle returns byte count ok 9 - sysread on read-write handle reads data ok 10 - symlink lstat size = length of target path ok 11 - symlink to /x has size 2 ok 12 - symlink size matches long target path length ok 13 - stat on symlink returns target file size (follows symlink) ok 14 - lstat size of symlink = length of target path 1..14 ok t/readline.t ........................ # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - Temp file is on disk and right size ok 2 - Open a real file written by File::Temp ok 3 - $fh2 stringifies to a GLOB ok 4 - ... line 1 ok 5 - ... line 2 ok 6 - Fails to write to a read handle in mock mode. ok 7 - $! when the file is written to and it's a read file handle. ok 8 - Warns about writing to a read file handle # -------------- MOCK MODE -------------- ok 9 - Mocked temp file opens and returns true ok 10 - $fh is a IO::File ok 11 - $fh stringifies to a IO::File GLOB ok 12 - 1st read on $fh is "abc\n" ok 13 - 2nd read on $fh is "def\n" ok 14 - 3rd read on $fh via readline is "ghi\n" ok 15 - 4th read on $fh undef at EOF ok 16 - 5th read on $fh undef at EOF ok 17 - 6th read on $fh undef at EOF ok 18 - $foo->contents ok 19 - 7th read on $fh is "mno\n" ok 20 - 7th read on $fh is "pqr" ok 21 - 8th read on $fh undef at EOF ok 22 - 9th read on $fh undef at EOF ok 23 - Fails to write to a read handle in mock mode. ok 24 - $! when the file is written to and it's a read file handle. ok 25 - Warns about writing to a read file handle ok 26 - file handle clears from files_being_mocked hash on close ok 27 - files_being_mocked empties when $bar is cleared # -------------- REAL MODE -------------- ok 28 - Once the mock file object is cleared, the next open reverts to the file on disk. ok 29 - $fh2 stringifies to a GLOB ok 30 - ... line 1 ok 31 - ... line 1 ok 32 - Can't open a missing file "/tmp/0RMSidKb8d" ok 33 - What $! looks like when failing to open the missing file. # -------------- MOCK MODE -------------- ok 34 - Can't open a missing file "/tmp/0RMSidKb8d" ok 35 - What $! looks like when failing to open the missing file. # --------------------------------------- ok 36 - REAL multiline do slurp works ok 37 - MOCK multiline do slurp works # readline array. ok 38 - readline reads in an array of stuff. # -------------- readline on write-only handle -------------- ok 39 - readline on write-only handle returns undef ok 40 - readline on write-only handle warns ok 41 - readline in list context on write-only handle returns empty list ok 42 - readline list context on write-only handle warns # -------------- getc on write-only handle -------------- ok 43 - getc on write-only handle returns undef ok 44 - getc on write-only handle warns 1..44 ok t/readline_modes.t .................. # Seeded srand with seed '20260328' from local date. # -------------- SLURP MODE ($/ = undef) -------------- # Slurp from beginning of file ok 1 - Slurp from tell=0 returns entire contents ok 2 - EOF after slurp # Slurp from non-zero tell position ok 3 - Read first 4 bytes ok 4 - Slurp from tell=4 returns remainder ok 5 - EOF after partial slurp # Slurp empty file ok 6 - Slurp on empty file returns undef # Slurp in list context ok 7 - Slurp in list context returns single element # -------------- FIXED-RECORD MODE ($/ = \N) -------------- # Read in 5-byte records ok 8 - First 5-byte record ok 9 - Second 5-byte record ok 10 - Third record (partial, 3 bytes left) ok 11 - Fourth read returns undef (EOF) # Fixed-record in list context ok 12 - List context returns all fixed-size records # Fixed-record with 1-byte records ok 13 - 1-byte records return individual characters # Fixed-record larger than file ok 14 - Record larger than file returns all contents ok 15 - Second read returns undef # -------------- PARAGRAPH MODE ($/ = '') -------------- # Two paragraphs separated by blank line ok 16 - First paragraph with collapsed \n\n ok 17 - Second paragraph (last, no trailing blank) ok 18 - Third read returns undef (EOF) # Multiple blank lines between paragraphs (collapsed) ok 19 - First paragraph with collapsed separator ok 20 - Second paragraph after multiple blank lines # Leading blank lines are skipped ok 21 - First paragraph (leading blanks skipped) ok 22 - Second paragraph ok 23 - EOF # Single paragraph, no blank lines ok 24 - Single paragraph returned whole ok 25 - EOF # Paragraph mode in list context ok 26 - List context returns all paragraphs # File is only blank lines ok 27 - File with only newlines returns undef in paragraph mode # Paragraph without trailing newline ok 28 - First paragraph ends with collapsed \n\n ok 29 - Last paragraph without trailing newline # -------------- CUSTOM SEPARATOR ($/ = multi-char) -------------- # Multi-character record separator ok 30 - First record with :: separator ok 31 - Second record ok 32 - Third record (no trailing separator) ok 33 - EOF # Custom single-char separator (not newline) ok 34 - Comma-separated reading # -------------- GETC -------------- # getc reads one character at a time ok 35 - getc 1st char ok 36 - getc 2nd char ok 37 - getc 3rd char ok 38 - getc 4th char ok 39 - getc 5th char ok 40 - getc at EOF returns undef # getc after partial read ok 41 - Read first 3 bytes ok 42 - getc after read returns next char ok 43 - getc continues # getc on empty file ok 44 - getc on empty file returns undef # -------------- SEEK + READLINE INTERACTIONS -------------- # Seek then slurp ok 45 - Slurp after seek(5) returns remainder # Seek then fixed-record ok 46 - Fixed record after seek ok 47 - Partial record at end 1..47 ok t/readlink.t ........................ # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - readlink on missing file ok 2 - $! is ENOENT for a missing file readlink. ok 3 - readlink on a working symlink works. ok 4 - $! is 0 for a missing file readlink. ok 5 - readlink on a broken symlink still works. ok 6 - $! is 0 for a missing file readlink. ok 7 - readlink on a file is undef. ok 8 - $! is EINVAL for a readlink on a file. ok 9 - readlink on a dir is undef. ok 10 - $! is EINVAL for a readlink on a dir. ok 11 - Got expected warning for passing no value to readlink ok 12 - readlink without args is undef. ok 13 - $! is EINVAL or ENOENT for a readlink(undef) (got: 2) ok 14 - Got expected warning for passing no value to readlink ok 15 - readlink without args is undef. ok 16 - $! is EINVAL or ENOENT for a readlink() (got: 2) # Cleaning up... # -------------- MOCK MODE -------------- ok 17 - readlink on missing file ok 18 - $! is ENOENT for a missing file readlink. ok 19 - readlink on a working symlink works. ok 20 - $! is 0 for a missing file readlink. ok 21 - readlink on a broken symlink still works. ok 22 - $! is 0 for a missing file readlink. ok 23 - readlink on a file is undef. ok 24 - $! is EINVAL for a readlink on a file. ok 25 - readlink on a dir is undef. ok 26 - $! is EINVAL for a readlink on a dir. ok 27 - Got expected warning for passing no value to readlink ok 28 - readlink without args is undef. ok 29 - $! is EINVAL or ENOENT for a readlink(undef) (got: 2) not ok 30 - Got expected warning for passing no value to readlink # TODO Something's wrong with readlink's prototype and the warning is incorrect no matter what we do in the code. # Failed test (with amnesty) 'Got expected warning for passing no value to readlink' # at t/readlink.t line 106. # +---------------------------------+----+---------------------------------+ # | GOT | OP | CHECK | # +---------------------------------+----+---------------------------------+ # | Use of uninitialized value in r | =~ | (?^:^Use of uninitialized value | # | eadlink at t/readlink.t line 10 | | \$_ in readlink at ) | # | 6.\n | | | # +---------------------------------+----+---------------------------------+ (If this table is too small, you can use the TABLE_TERM_SIZE=### env var to set a larger size, detected size is '78') ok 31 - readlink without args is undef. ok 32 - $! is EINVAL or ENOENT for a readlink() (got: 2) # --- readlink on non-existent mocks returns ENOENT --- ok 33 - readlink on non-existent file mock is undef ok 34 - $! is ENOENT for readlink on non-existent file mock ok 35 - readlink on non-existent dir mock is undef ok 36 - $! is ENOENT for readlink on non-existent dir mock # --- readlink failure returns undef (not empty list) in list context --- ok 37 - readlink on non-link returns one element in list context ok 38 - readlink failure element is undef ok 39 - readlink on non-existent mock returns one element in list context ok 40 - readlink non-existent failure element is undef 1..40 ok t/relative_paths.t .................. # Seeded srand with seed '20260328' from local date. # -------------- rmdir: relative path still enforces ENOTEMPTY -------------- ok 1 - rmdir with relative path fails on non-empty dir ok 2 - errno is ENOTEMPTY for relative rmdir ok 3 - directory still exists after failed rmdir ok 4 - child still exists after failed rmdir # -------------- rmdir: relative path succeeds on empty dir -------------- ok 5 - rmdir with relative path succeeds on empty dir ok 6 - directory removed after rmdir # -------------- rmdir: relative path updates parent dir timestamps -------------- ok 7 - rmdir with relative path succeeds ok 8 - parent mtime updated after relative rmdir ok 9 - parent ctime updated after relative rmdir # -------------- mkdir: relative path updates parent dir timestamps -------------- ok 10 - mkdir with relative path succeeds ok 11 - parent mtime updated after relative mkdir ok 12 - parent ctime updated after relative mkdir # -------------- rename: relative paths update parent dir timestamps -------------- ok 13 - rename with relative paths succeeds ok 14 - parent mtime updated after relative rename ok 15 - parent ctime updated after relative rename ok 16 - renamed file has correct contents 1..16 ok t/rename.t .......................... # Seeded srand with seed '20260328' from local date. # -------------- rename: basic file rename -------------- ok 1 - rename returns true ok 2 - old file contents cleared ok 3 - new file has old contents # -------------- rename: non-existent source -------------- ok 4 - rename fails for non-existent source ok 5 - errno is ENOENT # -------------- rename: overwrite existing file -------------- ok 6 - rename overwrites existing file ok 7 - destination has new contents ok 8 - source is gone # -------------- rename: file to existing directory fails -------------- ok 9 - cannot rename file over directory ok 10 - errno is EISDIR # -------------- rename: preserves file mode -------------- ok 11 - rename preserves mode ok 12 - destination has source mode # -------------- rename: empty directory rename -------------- ok 13 - rename empty directory works ok 14 - old dir no longer exists ok 15 - new dir exists # -------------- rename: symlink rename -------------- ok 16 - rename symlink works ok 17 - old symlink is gone # -------------- rename: dir over existing file fails -------------- ok 18 - cannot rename dir over file ok 19 - errno is ENOTDIR # -------------- rename: file to self is no-op (POSIX) -------------- ok 20 - rename to self returns true ok 21 - file contents preserved after rename to self ok 22 - file still exists after rename to self # -------------- rename: directory to self is no-op (POSIX) -------------- ok 23 - rename dir to self returns true ok 24 - directory still exists after rename to self # -------------- rename: symlink to self is no-op (POSIX) -------------- ok 25 - rename symlink to self returns true ok 26 - symlink still a link after rename to self ok 27 - symlink target preserved after rename to self # -------------- rename: dir over non-empty dir fails (ENOTEMPTY) -------------- ok 28 - cannot rename dir over non-empty dir ok 29 - errno is ENOTEMPTY ok 30 - source dir still exists after failed rename ok 31 - dest dir still exists after failed rename ok 32 - child file still exists after failed rename # -------------- rename: dir over empty dir succeeds (POSIX) -------------- ok 33 - rename dir over empty dir succeeds ok 34 - source dir no longer exists ok 35 - dest dir exists after rename # -------------- rename: directory with child file re-keys children -------------- ok 36 - rename directory with child succeeds ok 37 - old directory no longer exists ok 38 - new directory exists ok 39 - child file exists under new directory path ok 40 - child file contents preserved after directory rename ok 41 - child file not accessible under old path # -------------- rename: directory with nested subdirectory -------------- ok 42 - rename directory with nested subdirectory succeeds ok 43 - nested subdirectory exists under new path ok 44 - deeply nested file exists under new path ok 45 - deeply nested file contents preserved ok 46 - deep file not accessible under old path ok 47 - nested subdir not accessible under old path # -------------- rename: directory readdir shows re-keyed children -------------- ok 48 - rename directory for readdir test ok 49 - readdir on renamed directory shows re-keyed children # -------------- rename: child mock object path updated after rename -------------- ok 50 - rename for path update test ok 51 - child mock object path updated to new prefix # -------------- rename: directory DESTROY cleanup works after rename -------------- ok 52 - rename for DESTROY test ok 53 - child accessible before DESTROY # -------------- rename: preserves inode and nlink -------------- ok 54 - rename preserves inode metadata ok 55 - inode preserved after rename ok 56 - nlink preserved after rename 1..56 ok t/rmdir.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - basic rmdir { ok 1 - REAL mkdir when dir is missing. ok 2 - - $! is unset. ok 3 - REAL rmdir when dir is there ok 4 - MOCK mkdir when dir is missing. ok 5 - - $! is unset. ok 6 - Perms are 0755 ok 7 - -d ok 8 - - $! is unset. ok 9 - MOCK rmdir when dir is there ok 10 - - $! is unset. ok 11 - Directory is not there with -d ok 12 - Directory is not there with -e 1..12 } ok 2 - undef rmdir { ok 1 - REAL mkdir when nothing is passed as the directory. ok 2 - - returns 0 ok 3 - REAL mkdir when undef is passed as the directory. ok 4 - - returns 0 ok 5 - MOCK rmdir when undef is passed as the directory. ok 6 - - returns 0 ok 7 - - $! is ENOENT (matches CORE::rmdir behavior) 1..7 } ok 3 - rmdir existing file { ok 1 - real rmdir on existing file. ok 2 - - $! is ENOTDIR. ok 3 - mock rmdir on existing file. ok 4 - - $! is ENOTDIR. 1..4 } ok 4 - rmdir existing symlink { ok 1 - real rmdir on existing file. ok 2 - - $! is ENOTDIR. ok 3 - mock rmdir on existing file. ok 4 - - $! is ENOTDIR. 1..4 } ok 5 - rmdir when nothing is there. { ok 1 - real rmdir on existing file. ok 2 - - $! is ENOENT. ok 3 - mock rmdir on existing file. ok 4 - - $! is ENOENT. 1..4 } ok 6 - rmdir non-empty directory fails { ok 1 - File exists ok 2 - Directory exists ok 3 - No errors yet ok 4 - rmdir failed because directory has files ok 5 - $! is ENOTEMPTY 1..5 } ok 7 - rmdir succeeds when only non-existent mocks exist in directory { ok 1 - Directory exists ok 2 - Ghost file does not exist ok 3 - rmdir succeeds on dir with only non-existent child mocks ok 4 - $! is not set ok 5 - Directory no longer exists after rmdir 1..5 } ok 8 - rmdir fails when at least one existing file is in directory { ok 1 - Directory exists ok 2 - Ghost file does not exist ok 3 - Real file exists ok 4 - rmdir fails when existing file is present ok 5 - $! is set ok 6 - Directory still exists 1..6 } 1..8 ok t/runtime-bareword-filehandles.t .... # Seeded srand with seed '20260328' from local date. ok 1 - Successfully handled bareword filehandles during runtime ok 2 - No observed error 1..2 ok t/seek.t ............................ # Seeded srand with seed '20260328' from local date. # --- SEEK_SET (whence=0) --- ok 1 - SEEK_SET to 0 returns '0 but true' ok 2 - SEEK_SET to 5 returns 5 ok 3 - Reading 3 bytes from position 5 gives FGH ok 4 - SEEK_SET to 10 (EOF) returns 10 ok 5 - SEEK_SET beyond EOF succeeds (POSIX allows seeking past end) ok 6 - SEEK_SET to negative returns 0 (failure) # --- SEEK_CUR (whence=1) --- ok 7 - Start at position 3 ok 8 - SEEK_CUR +4 from 3 gives 7 ok 9 - Reading from position 7 gives HI ok 10 - SEEK_CUR -3 from 9 gives 6 ok 11 - SEEK_CUR 0 returns current position (6) ok 12 - SEEK_CUR before start of file returns 0 ok 13 - SEEK_CUR beyond EOF succeeds (position 6 + 100 = 106) # --- SEEK_END (whence=2) --- ok 14 - SEEK_END with offset 0 = EOF position (10) ok 15 - SEEK_END -3 gives position 7 ok 16 - Reading 3 bytes from position 7 gives HIJ ok 17 - SEEK_END -10 gives position 0 ('0 but true') ok 18 - SEEK_END before start returns 0 (failure) ok 19 - SEEK_END +1 beyond file succeeds (10 + 1 = 11) # --- Invalid whence --- ok 20 - whence=3 returns false ok 21 - whence=3 sets $! to EINVAL ok 22 - whence=-1 returns false ok 23 - whence=-1 sets $! to EINVAL ok 24 - whence=99 returns false ok 25 - whence=99 sets $! to EINVAL # --- seek() via Perl builtin (not sysseek) --- ok 26 - seek() with SEEK_SET returns true ok 27 - tell position is 5 after seek() ok 28 - seek() with SEEK_CUR returns true ok 29 - tell position is 7 after relative seek() ok 30 - seek() with SEEK_END returns true ok 31 - tell position is 8 after SEEK_END -2 # --- Empty file --- ok 32 - SEEK_SET 0 on empty file returns '0 but true' ok 33 - SEEK_END 0 on empty file returns '0 but true' ok 34 - SEEK_CUR 0 on empty file returns '0 but true' ok 35 - SEEK_SET 1 on empty file succeeds (past EOF allowed) # --- Seek after write --- ok 36 - Seek back to start after write ok 37 - Read back what was written after seek ok 38 - SEEK_END -5 on written data gives position 6 ok 39 - Read 'World' from position 6 # --- Seek past EOF then read (should get EOF) --- ok 40 - SEEK_SET to 50 (past 10-byte file) succeeds ok 41 - sysread after seek past EOF returns 0 bytes ok 42 - buffer is empty after seek-past-EOF read ok 43 - eof() is true after seek past EOF # --- Seek past EOF then seek back and read --- ok 44 - Seek to position 100 (past EOF) ok 45 - eof() is true at position 100 ok 46 - Seek back to position 5 ok 47 - eof() is false at position 5 ok 48 - Can read normally after seeking back from past-EOF position ok 49 - eof() is true after reading to end # --- Seek past EOF with SEEK_CUR and SEEK_END --- ok 50 - SEEK_END +5 = 10 + 5 = 15 ok 51 - eof() is true at position 15 ok 52 - SEEK_CUR +10 from 15 = 25 ok 53 - eof() is true at position 25 ok 54 - Seek back to 0 ok 55 - eof() is false at position 0 # --- tell() on regular file handles --- ok 56 - tell() returns 0 at start of file ok 57 - tell() returns 10 after reading all content ok 58 - tell() returns 3 after seek to position 3 ok 59 - tell() returns 50 after seek past EOF # --- EOF warning mentions file path (not STDOUT) --- ok 60 - eof() on write-only handle emits one warning ok 61 - warning mentions the file path, not STDOUT ok 62 - warning does not mention STDOUT ok 63 - No mock files are in cache 1..63 ok t/stat-x.t .......................... # Seeded srand with seed '20260328' from local date. ok 1 - -x after unlink { ok 1 - File should exist ok 2 - File should be executable ok 3 - File should not exist ok 4 - File should not be executable 1..4 } ok 2 - -x with multiple files { ok 1 - First filename should not be executable ok 2 - Second filename should not be executable ok 3 - First filename should now exist ok 4 - First filename should now be executable ok 5 - Second filename should still not exist ok 6 - Second filename should still not be executable 1..6 } ok 3 - rmdir works for mocked directories { ok 1 - Created directory successfully ok 2 - Directory now exists ok 3 - No errors yet ok 4 - Successfully rmdir directory ok 5 - Still no errors ok 6 - Directory no longer exists 1..6 } 1..3 ok t/stat_defaults.t ................... # Seeded srand with seed '20260328' from local date. # --- nlink defaults --- ok 1 - regular file has nlink=1 { ok 1 - nlink is 1 for regular file 1..1 } ok 2 - directory has nlink=2 { ok 1 - nlink is 2 for directory 1..1 } ok 3 - symlink has nlink=1 { ok 1 - nlink is 1 for symlink 1..1 } ok 4 - mkdir sets nlink=2 { ok 1 - nlink is 2 after mkdir 1..1 } ok 5 - link increments nlink correctly from 1 { ok 1 - nlink starts at 1 before linking ok 2 - source nlink is 2 after link ok 3 - destination nlink is 2 after link 1..3 } ok 6 - user-specified nlink overrides default { ok 1 - user-specified nlink=5 is preserved 1..1 } # --- inode defaults --- ok 7 - each mock gets a unique inode { ok 1 - inode is non-zero ok 2 - inode is non-zero ok 3 - inode is non-zero ok 4 - file A and B have different inodes ok 5 - file B and C have different inodes ok 6 - file A and C have different inodes 1..6 } ok 8 - directory gets a unique inode { ok 1 - directory inode is non-zero ok 2 - file and directory have different inodes 1..2 } ok 9 - symlink gets a unique inode { ok 1 - symlink inode is non-zero ok 2 - symlink and target have different inodes 1..2 } ok 10 - hard links share the same inode { ok 1 - hard link has same inode as source 1..1 } ok 11 - user-specified inode overrides default { ok 1 - user-specified inode=42 is preserved 1..1 } 1..11 ok t/stat_timestamps.t ................. # Seeded srand with seed '20260328' from local date. # -------------- WRITE UPDATES mtime/ctime -------------- ok 1 - print updates mtime ok 2 - print updates ctime # -------------- SYSWRITE UPDATES mtime/ctime -------------- ok 3 - syswrite updates mtime ok 4 - syswrite updates ctime # -------------- READ (sysread) UPDATES atime -------------- ok 5 - sysread updates atime ok 6 - sysread does not update mtime ok 7 - sysread does not update ctime # -------------- READLINE UPDATES atime -------------- ok 8 - readline updates atime ok 9 - readline does not update mtime ok 10 - readline does not update ctime # -------------- READLINE (list context) UPDATES atime -------------- ok 11 - readline in list context updates atime ok 12 - read all three lines # -------------- GETC UPDATES atime -------------- ok 13 - getc returns first character ok 14 - getc updates atime # -------------- CHMOD UPDATES ctime -------------- ok 15 - chmod updates ctime ok 16 - chmod does not update mtime # -------------- CHOWN UPDATES ctime -------------- ok 17 - chown updates ctime ok 18 - chown does not update mtime # -------------- OPEN > UPDATES mtime/ctime (truncate) -------------- ok 19 - open > updates mtime ok 20 - open > updates ctime ok 21 - open > truncated contents # -------------- SYSOPEN O_TRUNC UPDATES mtime/ctime -------------- ok 22 - sysopen O_TRUNC updates mtime ok 23 - sysopen O_TRUNC updates ctime # -------------- SYSOPEN O_CREAT UPDATES mtime/ctime -------------- ok 24 - sysopen O_CREAT on new file updates mtime ok 25 - sysopen O_CREAT on new file updates ctime # -------------- OPEN >> does NOT update until write -------------- ok 26 - open >> alone does not update mtime ok 27 - open >> alone does not update ctime ok 28 - writing in append mode updates mtime ok 29 - writing in append mode updates ctime # -------------- READ+WRITE updates both atime and mtime -------------- ok 30 - read in +< mode updates atime ok 31 - write in +< mode updates mtime ok 32 - write in +< mode updates ctime # -------------- PRINTF UPDATES mtime/ctime -------------- ok 33 - printf updates mtime ok 34 - printf updates ctime ok 35 - printf wrote correctly # -------------- TRUNCATE UPDATES mtime/ctime -------------- ok 36 - truncate by path updates mtime ok 37 - truncate by path updates ctime ok 38 - truncate shortened contents # -------------- TRUNCATE via FH UPDATES mtime/ctime -------------- ok 39 - truncate via fh updates mtime ok 40 - truncate via fh updates ctime ok 41 - truncate via fh shortened contents # -------------- TRUNCATE extend UPDATES mtime/ctime -------------- ok 42 - truncate extend updates mtime ok 43 - truncate extend updates ctime ok 44 - truncate extended to 5 bytes # -------------- TRUNCATE same length still UPDATES mtime/ctime -------------- ok 45 - truncate to same length updates mtime ok 46 - truncate to same length updates ctime # -------------- LINK UPDATES parent dir mtime/ctime -------------- ok 47 - link updates parent dir mtime ok 48 - link updates parent dir ctime # -------------- SYMLINK UPDATES parent dir mtime/ctime -------------- ok 49 - symlink updates parent dir mtime ok 50 - symlink updates parent dir ctime # -------------- RENAME UPDATES both parent dirs mtime/ctime -------------- ok 51 - rename updates old parent dir mtime ok 52 - rename updates old parent dir ctime ok 53 - rename updates new parent dir mtime ok 54 - rename updates new parent dir ctime # -------------- RENAME same dir UPDATES parent dir mtime/ctime -------------- ok 55 - rename within same dir updates parent mtime ok 56 - rename within same dir updates parent ctime 1..56 ok t/strict-rules.t .................... # Seeded srand with seed '20260328' from local date. ok 1 - Cannot open an unmocked file in strict mode # add_strict_rule_for_filename ok 2 - can open a file with a custom rule ok 3 - cannot open a file under the directory ok 4 - open /cherry with multiple rules ok 5 - open /another with multiple rules ok 6 - clear_strict_rules removes all previous rules ok 7 - can open a file with a custom rule - regexp ok 8 - can open a file with a custom rule - regexp ok 9 - add_strict_rule_for_filename multiple rules ok 10 - add_strict_rule_for_filename multiple rules # add_strict_rule_for_command ok 11 - opendir fails without add_strict_rule_for_command ok 12 - add_strict_rule_for_command ok 13 - add_strict_rule_for_command - regexp ok 14 - add_strict_rule_for_command - list # add_strict_rule_generic ok 15 - no rules setup ok 16 - add_strict_rule_generic ok 17 - context set for open ok 18 - add_strict_rule_generic ok 19 - context uses normalized path ok 20 - add_strict_rule_generic - no exception ok 21 - add_strict_rule_generic - exception 1..21 ok t/strict-rules_file-temp-example.t .. # Seeded srand with seed '20260328' from local date. ok 1 - Cannot open an unmocked file in strict mode ok 2 - Cannot open directory from tempdir ok 3 - _setup_strict_rules_for_file_temp ok 4 - we can open a tempfile ok 5 - Can open directory from tempdir 1..5 ok t/strict-rules_scalar.t ............. # Seeded srand with seed '20260328' from local date. ok 1 - -e "/no/mocked" ok 2 - -l "/no/mocked" # add_strict_rule_for_command for stat / lstat ok 3 - command not supported ok 4 - -e "/no/mocked" ok 5 - -l "/no/mocked" ok 6 - -l "/this/path" mocked ok 7 - -l "/another/mocked" ok 8 - -e "/no/mocked" ok 9 - -l "/no/mocked" ok 10 - -l "/this/path" mocked ok 11 - -l "/another/path" mocked 1..11 ok t/symlink.t ......................... # Seeded srand with seed '20260328' from local date. ok 1 - Directory does not exist yet ok 2 - Directory now exists ok 3 - Directory with symlink content are correct ok 4 - Directory no longer has symlink ok 5 - lstat on live symlink returns stat data ok 6 - unlink symlink succeeds ok 7 - lstat on unlinked symlink returns empty list ok 8 - lstat on unlinked symlink sets ENOENT ok 9 - stat on unlinked symlink returns empty list # symlink() sets atime, mtime, ctime on the new symlink ok 10 - lstat on new symlink succeeds ok 11 - symlink atime set to current time ok 12 - symlink mtime set to current time ok 13 - symlink ctime set to current time # symlink() on existing path returns EEXIST ok 14 - symlink on existing file returns 0 ok 15 - symlink on existing file sets EEXIST 1..15 ok t/symlink_follow_ops.t .............. # Seeded srand with seed '20260328' from local date. ok 1 - chmod follows symlinks { ok 1 - chmod via symlink returns 1 ok 2 - target file permissions changed through symlink 1..2 } ok 2 - chmod on broken symlink fails with ENOENT { ok 1 - chmod on broken symlink returns 0 ok 2 - $! is ENOENT for broken symlink 1..2 } ok 3 - chmod follows chain of symlinks { ok 1 - chmod through symlink chain returns 1 ok 2 - target file permissions changed through symlink chain 1..2 } ok 4 - chown follows symlinks { ok 1 - chown via symlink returns 1 ok 2 - target uid set through symlink 1..2 } ok 5 - chown on broken symlink fails with ENOENT { ok 1 - chown on broken symlink returns 0 ok 2 - $! is ENOENT for broken symlink 1..2 } ok 6 - utime follows symlinks { ok 1 - utime via symlink returns 1 ok 2 - target atime set through symlink ok 3 - target mtime set through symlink 1..3 } ok 7 - utime on broken symlink fails with ENOENT { ok 1 - utime on broken symlink returns 0 ok 2 - $! is ENOENT for broken symlink 1..2 } ok 8 - utime follows chain of symlinks { ok 1 - utime through chain returns 1 ok 2 - target atime set through symlink chain ok 3 - target mtime set through symlink chain 1..3 } ok 9 - truncate follows symlinks (by path) { ok 1 - truncate via symlink returns true ok 2 - target file truncated through symlink 1..2 } ok 10 - truncate on broken symlink fails with ENOENT { ok 1 - truncate on broken symlink returns false ok 2 - $! is ENOENT for broken symlink 1..2 } ok 11 - truncate follows symlink to directory fails with EISDIR { ok 1 - truncate on symlink-to-dir returns false ok 2 - $! is EISDIR 1..2 } ok 12 - multiple files with symlinks in chmod { ok 1 - chmod on file + symlink returns 2 ok 2 - first file permissions changed ok 3 - second file (via symlink) permissions changed 1..3 } 1..12 ok t/symlink_link.t .................... # Seeded srand with seed '20260328' from local date. # -------------- symlink() builtin on mocked paths -------------- # symlink() on a non-existent file mock converts it to a symlink ok 1 - link path does not exist yet ok 2 - link path is not a symlink yet ok 3 - symlink() returns true on success ok 4 - -l detects the new symlink ok 5 - readlink returns the target # symlink() fails with EEXIST when destination already exists (file) ok 6 - symlink() returns 0 when destination exists ok 7 - $! is EEXIST # symlink() fails with EEXIST when destination is an existing dir ok 8 - symlink() returns 0 when destination is a dir ok 9 - $! is EEXIST # symlink() fails with EEXIST when destination is an existing symlink ok 10 - symlink() returns 0 when destination is already a symlink ok 11 - $! is EEXIST # symlink() updates parent directory content ok 12 - parent dir does not exist yet ok 13 - parent dir now exists (has_content set) ok 14 - parent dir lists the new symlink # symlink() can create a dangling symlink (target not mocked) ok 15 - symlink() succeeds even if target is not mocked ok 16 - the symlink exists ok 17 - readlink returns the dangling target # symlink() on a non-existent dir mock converts it to a symlink ok 18 - dir mock does not exist initially ok 19 - now it is a symlink ok 20 - it is NOT a directory anymore # symlink() on a non-existent symlink mock converts it to an existing symlink ok 21 - undef symlink mock does not exist ok 22 - now it is an existing symlink ok 23 - readlink returns new target # -------------- link() builtin on mocked paths -------------- # link() creates a hard link between two mocked files ok 24 - hardlink does not exist yet ok 25 - link() returns true on success ok 26 - hardlink now exists ok 27 - hardlink is a regular file ok 28 - hardlink has same contents as source # link() increments nlink on both source and destination ok 29 - source nlink incremented ok 30 - destination nlink matches source # link() preserves mode, uid, gid from source ok 31 - mode matches ok 32 - uid matches ok 33 - gid matches # link() fails with ENOENT when source does not exist ok 34 - link() returns 0 when source does not exist ok 35 - $! is ENOENT # link() fails with EEXIST when destination already exists ok 36 - link() returns 0 when destination exists ok 37 - $! is EEXIST # link() fails with EPERM when source is a directory ok 38 - link() returns 0 for directory source ok 39 - $! is EPERM # link() fails with EXDEV when destination is not mocked ok 40 - link() returns 0 when destination is not mocked ok 41 - $! is EXDEV (cannot cross mock/real boundary) # link() follows symlinks on source ok 42 - link() through symlink succeeds ok 43 - destination is a regular file (not symlink) ok 44 - destination has the symlink target contents # link() fails when symlink source is broken ok 45 - link() fails for broken symlink source ok 46 - $! is ENOENT # link() updates parent directory content ok 47 - parent dir does not exist yet ok 48 - parent dir now exists ok 49 - parent dir lists the new hard link # link() fails with ELOOP when symlink source is circular ok 50 - link() fails for circular symlink source ok 51 - $! is ELOOP (not ENOENT) # unlink() decrements nlink on the unlinked file ok 52 - source nlink is 2 after link ok 53 - stat on unlinked file returns undef (no longer exists) ok 54 - remaining hard link nlink decremented after unlink # unlink() on a file with nlink=1 decrements to 0 ok 55 - nlink is 1 before unlink ok 56 - file no longer exists after unlink # link() propagates nlink to all same-inode mocks (3+ hard links) ok 57 - link A to B succeeds ok 58 - A nlink=2 after first link ok 59 - B nlink=2 after first link ok 60 - link A to C succeeds ok 61 - A nlink=3 after second link ok 62 - B nlink=3 after second link (propagated) ok 63 - C nlink=3 after second link ok 64 - B has same inode as A ok 65 - C has same inode as A 1..65 ok t/sysopen.t ......................... # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - Sysopen for write ok 2 - 2 arg syswrite ok 3 - 3 arg syswrite ok 4 - 4 arg syswrite ok 5 - sysclose $fh ok 6 - file contents match what was written # -------------- MOCK MODE -------------- ok 7 - Sysopen for write ok 8 - 2 arg syswrite ok 9 - 3 arg syswrite ok 10 - 4 arg syswrite ok 11 - sysclose $fh ok 12 - Fake file contents match what was written ok 13 - mocked /tmp/kt43UciHaY is not present after mock file goes offline ok 14 - No mock files are in cache # -------------- REAL MODE -------------- ok 15 - Sysopen for read ok 16 - Read 2 into buf at EOL ok 17 - Confirm 2 line read ok 18 - Read into buf at pos 0 truncates the buffer. ok 19 - Confirm 2 line read ok 20 - Read 0 into buf at pos 0 truncates the buffer completely. ok 21 - Buffer is clear ok 22 - Read 2 into buf at pos 5 truncates after the buffer. ok 23 - Line is as expected. ok 24 - Read 3 into buf after EOL for the buffer fills in zeroes. ok 25 - Buffer has null bytes in the middle of it. ok 26 - Seek to near EOF ok 27 - Read 2 into buf since we're at EOF ok 28 - Buffer is clear ok 29 - 0 ok 30 - sysseek to start of file returns '0 but true' to make it so. ok 31 - sysseek to start of file returns true when checked with ok() ok 32 - sysseek to position 5 returns true. ok 33 - Seek 10 bytes forward from the current position. ok 34 - Current position is 15 bytes from start. ok 35 - Read 2 bytes from current position (15). ok 36 - Line is as expected. ok 37 - Seek 5 bytes back from end of file. ok 38 - Current position is 46 bytes from start. ok 39 - Read 3 bytes from current position (46). ok 40 - Line is as expected. # -------------- MOCK MODE -------------- ok 41 - Sysopen for read ok 42 - $fh stringifies to a IO::File GLOB ok 43 - Read 2 into buf at EOL ok 44 - Confirm 2 line read ok 45 - Read into buf at pos 0 truncates the buffer. ok 46 - Confirm 2 line read ok 47 - Read 0 into buf at pos 0 truncates the buffer completely. ok 48 - Buffer is clear ok 49 - Read 2 into buf at pos 5 truncates after the buffer. ok 50 - Line is as expected. ok 51 - Read 3 into buf after EOL for the buffer fills in zeroes. ok 52 - Buffer has null bytes in the middle of it. ok 53 - Seek to near EOF ok 54 - Read 2 into buf since we're at EOF ok 55 - Buffer is clear ok 56 - 0 ok 57 - sysseek to start of file returns '0 but true' to make it so. ok 58 - sysseek to start of file returns true when checked with ok() ok 59 - sysseek to position 5 returns true. ok 60 - Seek 10 bytes forward from the current position. ok 61 - Current position is 15 bytes from start. ok 62 - Read 2 bytes from current position (15). ok 63 - Line is as expected. ok 64 - Seek 5 bytes back from end of file. ok 65 - Current position is 46 bytes from start. ok 66 - Read 3 bytes from current position (46). ok 67 - Line is as expected. ok 68 - sysseek with invalid whence returns false ok 69 - sysseek with invalid whence sets EINVAL # -------------- REAL MODE -------------- ok 70 - Sysopen for read ok 71 - Read 2 into buf when buf is undef. ok 72 - Confirm 2 char is read # -------------- MOCK MODE -------------- ok 73 - Sysopen for read ok 74 - Read 2 into buf when buf is undef. ok 75 - Confirm 2 char is read ok 76 - No mock files are in cache # -------------- sysopen O_CREAT applies permissions from 4th arg -------------- ok 77 - Mock file does not exist before sysopen ok 78 - sysopen with O_CREAT and explicit perms ok 79 - Mock file exists after sysopen O_CREAT ok 80 - File permissions set from sysopen arg: got 0600, expected 0600 ok 81 - No mock files are in cache after perms test # -------------- sysopen O_CREAT without perms arg keeps default -------------- ok 82 - sysopen O_CREAT without 4th arg ok 83 - File permissions remain default: got 0644, expected 0644 ok 84 - No mock files are in cache after default perms test # -------------- sysopen O_CREAT on existing file does not change perms -------------- ok 85 - sysopen O_CREAT on existing file ok 86 - Permissions unchanged when O_CREAT on existing file ok 87 - No mock files are in cache after existing file test # O_NOFOLLOW on a symlink returns ELOOP ok 88 - sysopen with O_NOFOLLOW on symlink returns false ok 89 - sysopen with O_NOFOLLOW on symlink sets $! to ELOOP # sysopen on non-existent file without O_CREAT returns ENOENT for all modes ok 90 - mock file does not exist ok 91 - sysopen O_RDONLY on non-existent file returns false ok 92 - sysopen O_RDONLY on non-existent file sets ENOENT ok 93 - sysopen O_WRONLY on non-existent file returns false ok 94 - sysopen O_WRONLY on non-existent file sets ENOENT ok 95 - sysopen O_RDWR on non-existent file returns false ok 96 - sysopen O_RDWR on non-existent file sets ENOENT # sysopen O_WRONLY|O_CREAT on non-existent file succeeds (O_CREAT creates the file) ok 97 - mock file does not exist before O_CREAT ok 98 - sysopen O_WRONLY|O_CREAT succeeds ok 99 - file exists after O_CREAT # sysopen failure returns undef in list context (single-element list) ok 100 - sysopen failure returns one element in list context ok 101 - sysopen failure element is false ok 102 - sysopen failure element is undef (not "undef" string) 1..102 ok t/sysopen_strict.t .................. # Seeded srand with seed '20260328' from local date. ok 1 - sysopen() to read a filehandle fails 1..1 ok t/sysreadwrite_edge_cases.t ......... # Seeded srand with seed '20260328' from local date. # --- syswrite zero-length write returns 0 and writes nothing --- ok 1 - syswrite with len=0 returns 0 ok 2 - file contents unchanged after zero-length write # --- syswrite zero-length write on empty file --- ok 3 - syswrite len=0 on empty file returns 0 ok 4 - tell unchanged after zero-length write ok 5 - file still empty after zero-length write # --- syswrite with O_APPEND always appends regardless of seek --- ok 6 - syswrite with O_APPEND appends even after seek to 0 # --- syswrite with O_APPEND via open >> --- ok 7 - syswrite via open >> appends to file # --- seek past EOF then syswrite creates null-byte gap --- ok 8 - syswrite after seek past EOF fills gap with null bytes ok 9 - file is 12 bytes (2 + 8 null + 2) # --- seek past EOF then syswrite on file with existing content --- ok 10 - syswrite past existing content fills gap with nulls ok 11 - file is 9 bytes (5 + 3 null + 1) # --- syswrite with float len is truncated to int --- ok 12 - syswrite with float len 2.9 writes 2 bytes (truncated) ok 13 - only 2 bytes written with float len 2.9 # --- syswrite with non-numeric len warns and returns 0 --- ok 14 - syswrite with non-numeric len returns 0 ok 15 - errno is EINVAL for non-numeric len ok 16 - warning emitted for non-numeric len ok 17 - warning mentions non-numeric argument ok 18 - no data written with non-numeric len # --- syswrite with negative len warns and returns 0 --- ok 19 - syswrite with negative len returns 0 ok 20 - errno is EINVAL for negative len ok 21 - warning emitted for negative len ok 22 - warning mentions negative length ok 23 - no data written with negative len # --- syswrite offset 0 on empty buffer writes nothing --- ok 24 - syswrite with empty buffer and len=0 returns 0 ok 25 - tell unchanged ok 26 - file still empty # --- sysread with non-numeric len warns and returns undef --- ok 27 - sysread with non-numeric len returns undef ok 28 - errno is EINVAL for non-numeric len ok 29 - warning emitted for non-numeric len ok 30 - warning mentions non-numeric argument # --- sysread with negative len warns and returns undef --- ok 31 - sysread with negative len returns undef ok 32 - errno is EINVAL for negative len ok 33 - warning emitted for negative len ok 34 - warning mentions negative length # --- sysread with float len truncates to int --- ok 35 - sysread with float len 3.7 reads 3 bytes ok 36 - correct 3 bytes read with float len # --- sysread zero-length returns 0 and does not modify buffer --- ok 37 - sysread with len=0 returns 0 ok 38 - buffer truncated to empty by zero-length read at offset 0 ok 39 - tell unchanged after zero-length read # --- sysread with undef buffer initializes it to empty string --- ok 40 - sysread with undef buffer reads 3 bytes ok 41 - buffer correctly filled from undef # --- sysread with undef buffer and offset pads with null bytes --- ok 42 - sysread with undef buffer and offset reads 2 bytes ok 43 - buffer is null-padded then data at offset # --- sysread on write-only handle returns undef with EBADF --- ok 44 - sysread on write-only handle returns undef ok 45 - errno is EBADF for sysread on write-only handle # --- sysread at EOF returns 0 --- ok 46 - first read gets all content ok 47 - sysread at EOF returns 0 # --- syswrite then sysread in O_RDWR mode --- ok 48 - tell is 11 after syswrite ok 49 - sysread returns 5 ok 50 - read back what was written ok 51 - sysread returns 6 ok 52 - second read continues from tell position # --- syswrite multiple times accumulates content --- ok 53 - multiple syswrite calls accumulate correctly ok 54 - total length is 6 ok 55 - No mock files are in cache 1..55 ok t/Test-MockFile_file.t .............. # Seeded srand with seed '20260328' from local date. ok 1 - file() constructor — basic creation { ok 1 - file() returns a truthy object ok 2 - object is a Test::MockFile instance ok 3 - path() returns the mocked path 1..3 } ok 2 - file() with contents — existing file { ok 1 - contents() returns the file body ok 2 - exists() is true for file with contents ok 3 - is_file() returns 1 ok 4 - is_dir() returns 0 ok 5 - is_link() returns 0 1..5 } ok 3 - file() without contents — non-existent placeholder { ok 1 - contents() is undef for non-existent file ok 2 - exists() is false for non-existent file ok 3 - size() is undef for non-existent file 1..3 } ok 4 - file() with empty string — exists but empty { ok 1 - contents() is empty string ok 2 - exists() is true — empty file still exists ok 3 - size() is 0 for empty file 1..3 } ok 5 - size() and blocks() { ok 1 - size() matches content length ok 2 - blocks() computes correctly from size and blksize 1..2 } ok 6 - stat() returns 13-element list { ok 1 - stat() returns 13 elements ok 2 - mode has S_IFREG set ok 3 - stat[7] (size) is 3 ok 4 - atime is non-zero ok 5 - mtime is non-zero ok 6 - ctime is non-zero 1..6 } ok 7 - permissions() and chmod() { ok 1 - permissions() returns a value ok 2 - chmod(0644) sets permissions correctly ok 3 - chmod(0755) updates permissions ok 4 - mode still has S_IFREG after chmod ok 5 - permission bits match after chmod 1..5 } ok 8 - mtime(), ctime(), atime() — read and write { ok 1 - mtime() returns a positive epoch ok 2 - atime() returns a positive epoch ok 3 - ctime() returns a positive epoch ok 4 - mtime(epoch) sets the value ok 5 - atime(epoch) sets the value ok 6 - ctime(epoch) sets the value 1..6 } ok 9 - touch() — creates and updates times { ok 1 - file does not exist before touch ok 2 - file exists after touch() ok 3 - touch() creates empty file ok 4 - touch(epoch) sets mtime ok 5 - touch(epoch) sets atime 1..5 } ok 10 - write() — replaces contents { ok 1 - write() replaces contents ok 2 - write() returns $self for chaining 1..2 } ok 11 - write() — creates non-existent file { ok 1 - file does not exist before write() ok 2 - file exists after write() ok 3 - contents are correct 1..3 } ok 12 - append() — adds to contents { ok 1 - append() adds to contents ok 2 - append() returns $self for chaining 1..2 } ok 13 - append() — creates non-existent file { ok 1 - file does not exist before append() ok 2 - file exists after append() ok 3 - contents are correct 1..3 } ok 14 - read() — scalar context returns entire contents { ok 1 - read() in scalar returns all contents 1..1 } ok 15 - read() — list context returns lines { ok 1 - read() in list context splits on $/ 1..1 } ok 16 - unlink() — removes the file { ok 1 - file exists before unlink ok 2 - unlink() returns 1 on success ok 3 - file does not exist after unlink() ok 4 - contents() is undef after unlink() 1..4 } ok 17 - unlink() on non-existent file fails with ENOENT { ok 1 - file does not exist ok 2 - unlink() returns 0 for non-existent file ok 3 - errno is ENOENT 1..3 } ok 18 - chained write and append { ok 1 - write/append chaining works 1..1 } ok 19 - file() with custom stat attributes { ok 1 - uid from constructor ok 2 - gid from constructor ok 3 - mtime from constructor 1..3 } ok 20 - file() — filesystem ops work on mocked file { ok 1 - stat() on mocked path returns 13 elements ok 2 - stat[7] (size) is 12 ok 3 - -e returns true for mocked file ok 4 - -f returns true for mocked file ok 5 - -d returns false for file ok 6 - -s returns file size ok 7 - open succeeds on mocked file ok 8 - reading from mocked file handle works 1..8 } ok 21 - file() — open for write creates content { ok 1 - open > succeeds ok 2 - content written through handle appears in mock 1..2 } ok 22 - file() — multiple mock objects are independent { ok 1 - mock_a has correct contents ok 2 - mock_b has correct contents ok 3 - mock_a updated ok 4 - mock_b unchanged 1..4 } 1..22 ok t/touch.t ........................... # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - /tmp/kt43UciHaY is there ok 2 - unlink on a dir fails ok 3 - unlink /dir is non-zero (21) # -------------- MOCK MODE -------------- ok 4 - Directory does not exist yet ok 5 - Successfully created /dir ok 6 - Directory now exists ok 7 - unlink /link works. ok 8 - /link is now gone ok 9 - unlink /dir doesn't work. ok 10 - ... and throws a $! ok 11 - touch /dir doesn't work. ok 12 - touch /link doesn't work. ok 13 - Set mtime to 1970 ok 14 - Set ctime to 1970 ok 15 - Set atime to 1970 ok 16 - Touch a missing file. ok 17 - mtime is set. ok 18 - ctime is set. ok 19 - atime is set. ok 20 - /file exists with -e ok 21 - /file is removed via unlink method ok 22 - /file is missing via contents check ok 23 - /file is missing via size method ok 24 - /file is removed via -e check ok 25 - Set file to have stuff in it. ok 26 - Touch an existing file. ok 27 - mtime is set to 1234. ok 28 - ctime is set to 1234. ok 29 - atime is set to 1234. 1..29 ok t/trace.t ........................... # Seeded srand with seed '20260328' from local date. # --- :trace import tag --- ok 1 - use Test::MockFile qw< :trace > enables trace with strict { ok 1 - Exit Value Check ok 2 - trace output includes stat access 1..2 } # --- :trace with :nostrict --- ok 2 - use Test::MockFile qw< :trace :nostrict > { ok 1 - Exit Value Check ok 2 - trace output for unmocked -e access 1..2 } # --- trace without colon --- ok 3 - use Test::MockFile qw< trace nostrict > also works { ok 1 - Exit Value Check ok 2 - trace output works without colon prefix 1..2 } # --- :nostrict alias --- ok 4 - use Test::MockFile qw< :nostrict > alias works { ok 1 - Exit Value Check 1..1 } # --- trace includes caller location --- ok 5 - trace output includes caller location { ok 1 - Exit Value Check ok 2 - trace output includes 'at FILE line N' 1..2 } # --- trace does not fire for mocked files --- ok 6 - trace does not fire for mocked files { ok 1 - Exit Value Check ok 2 - no trace output for mocked file access 1..2 } # --- trace fires for open on unmocked files --- ok 7 - trace fires for open on unmocked files { ok 1 - Exit Value Check ok 2 - trace output for unmocked open 1..2 } 1..7 ok t/truncate.t ........................ # Seeded srand with seed '20260328' from local date. ok 1 - truncate by path — shorten contents { ok 1 - truncate returns true ok 2 - contents shortened to 5 bytes 1..2 } ok 2 - truncate by path — extend with null bytes { ok 1 - truncate returns true ok 2 - contents extended to 6 bytes ok 3 - padded with null bytes 1..3 } ok 3 - truncate by path — same length is no-op { ok 1 - truncate returns true ok 2 - contents unchanged 1..2 } ok 4 - truncate to zero { ok 1 - truncate to 0 returns true ok 2 - contents now empty 1..2 } ok 5 - truncate via filehandle { ok 1 - truncate via fh returns true ok 2 - contents shortened via fh 1..2 } ok 6 - truncate via sysopen filehandle { ok 1 - truncate via sysopen fh returns true ok 2 - contents shortened via sysopen fh 1..2 } ok 7 - truncate on non-existent mock file fails with ENOENT { ok 1 - truncate returns false ok 2 - $! is ENOENT 1..2 } ok 8 - truncate on directory fails with EISDIR { ok 1 - truncate returns false ok 2 - $! is EISDIR 1..2 } ok 9 - truncate with negative length fails with EINVAL { ok 1 - truncate returns false ok 2 - $! is EINVAL 1..2 } ok 10 - truncate on real file falls through to CORE::truncate { ok 1 - truncate real file returns true ok 2 - real file truncated to 5 bytes 1..2 } ok 11 - truncate on file with undef contents (created by open) { ok 1 - truncate returns false for non-existent ok 2 - $! is ENOENT ok 3 - truncate after open returns true ok 4 - contents shortened 1..4 } ok 12 - truncate via read-only filehandle fails with EINVAL { ok 1 - truncate on read-only fh returns false ok 2 - $! is EINVAL for read-only fh ok 3 - contents unchanged 1..3 } ok 13 - truncate via write-only filehandle succeeds { ok 1 - truncate on write-only fh succeeds ok 2 - contents truncated 1..2 } ok 14 - truncate via append filehandle succeeds { ok 1 - truncate on append fh succeeds ok 2 - contents shortened via append fh 1..2 } 1..14 ok t/unlink.t .......................... # Seeded srand with seed '20260328' from local date. ok 1 - unlink on a missing file { ok 1 - REAL CORE::unlink returns 0 files deleted. ok 2 - $! is set to ENOENT ok 3 - MOCKED unlink returns 0 files deleted. ok 4 - $! is set to ENOENT 1..4 } ok 2 - unlink on an existing directory { ok 1 - REAL CORE::unlink returns 0 files deleted. ok 2 - Directory does not exist yet ok 3 - Created directory successfully ok 4 - Directory now exists ok 5 - MOCKED unlink returns 0 files deleted. ok 6 - $! is set to EISDIR 1..6 } ok 3 - unlink on an existing file { ok 1 - REAL CORE::unlink returns 1 files deleted. ok 2 - $! remains 0 ok 3 - MOCKED unlink returns 1 files deleted. ok 4 - $! remains 0 1..4 } ok 4 - unlink on an unmocked file { ok 1 - MOCKED unlink returns 1 files deleted. ok 2 - $! remains 0 ok 3 - CORE::open fails since the file is removed from disk ok 4 - $! becomes ENOENT 1..4 } ok 5 - unlink with no args uses $_ { ok 1 - file exists before unlink ok 2 - unlink() with no args uses $_ and returns 1 ok 3 - file no longer exists after unlink() 1..3 } 1..5 ok t/utime.t ........................... # Seeded srand with seed '20260328' from local date. ok 1 - utime on mocked file { ok 1 - File exists ok 2 - utime returns 1 for success ok 3 - atime was updated ok 4 - mtime was updated 1..4 } ok 2 - utime updates ctime to current time { ok 1 - ctime was updated to current time 1..1 } ok 3 - utime with undef uses current time { ok 1 - utime with undef returns 1 ok 2 - atime set to current time when undef ok 3 - mtime set to current time when undef 1..3 } ok 4 - utime on multiple mocked files { ok 1 - utime returns 2 for two files ok 2 - file a atime updated ok 3 - file a mtime updated ok 4 - file b atime updated ok 5 - file b mtime updated 1..5 } ok 5 - utime on nonexistent mocked file { ok 1 - File does not exist ok 2 - utime returns 0 for nonexistent file ok 3 - $! is set to ENOENT 1..3 } ok 6 - utime on mocked directory { ok 1 - Created directory ok 2 - Directory exists ok 3 - utime on directory returns 1 ok 4 - dir atime updated ok 5 - dir mtime updated 1..5 } ok 7 - utime with no files returns 0 { ok 1 - utime with no files returns 0 1..1 } ok 8 - utime on mix of mocked and unmocked files { ok 1 - utime returns 2 for mixed mocked/unmocked ok 2 - mocked file atime updated ok 3 - mocked file mtime updated ok 4 - unmocked file atime updated ok 5 - unmocked file mtime updated 1..5 } ok 9 - utime on unmocked file passes through { ok 1 - utime on real file returns 1 ok 2 - real file atime was updated ok 3 - real file mtime was updated 1..3 } ok 10 - utime on unmocked file while mocked files exist { ok 1 - utime on unmocked file returns 1 ok 2 - unmocked file atime was updated ok 3 - unmocked file mtime was updated 1..3 } ok 11 - real utime with mixed existing/non-existing files sets ENOENT { ok 1 - non-existent file does not exist ok 2 - CORE::utime returns 1 (only the existing file succeeded) ok 3 - CORE::utime sets $! to ENOENT for the missing file ok 4 - existing file atime was updated ok 5 - existing file mtime was updated 1..5 } ok 12 - mocked utime on mix of existing and non-existing mocked files { ok 1 - existing mock is a file ok 2 - non-existing mock does not exist ok 3 - utime returns 1 (only existing file succeeded) ok 4 - $! is ENOENT for the non-existing mocked file ok 5 - existing mock atime was updated ok 6 - existing mock mtime was updated 1..6 } 1..12 ok t/utime_strict.t .................... # Seeded srand with seed '20260328' from local date. ok 1 - utime on unmocked file in strict mode dies { ok 1 - utime on unmocked file in strict mode triggers violation 1..1 } ok 2 - utime on mocked file in strict mode succeeds { ok 1 - utime on mocked file in strict mode works ok 2 - atime set correctly in strict mode ok 3 - mtime set correctly in strict mode 1..3 } 1..2 ok t/warnstrict.t ...................... # Seeded srand with seed '20260328' from local date. ok 1 - is_strict_mode returns true in warnstrict mode { ok 1 - is_strict_mode() is true 1..1 } ok 2 - is_warn_mode returns true in warnstrict mode { ok 1 - is_warn_mode() is true 1..1 } ok 3 - accessing unmocked file warns instead of dying { ok 1 - got one warning ok 2 - got warning about unmocked file access 1..2 } ok 4 - accessing mocked file does not warn { ok 1 - no warnings for mocked file access 1..1 } ok 5 - open on unmocked file warns instead of dying { ok 1 - got one warning ok 2 - got warning about unmocked open 1..2 } ok 6 - open on mocked file works normally { ok 1 - no warnings for mocked file open ok 2 - open succeeded 1..2 } ok 7 - multiple unmocked accesses all produce warnings { ok 1 - got 3 warnings for 3 unmocked accesses 1..1 } 1..7 ok t/write_tell.t ...................... # Seeded srand with seed '20260328' from local date. # --- tell() advances after print --- ok 1 - tell is 0 before any writes ok 2 - tell is 5 after printing 'Hello' ok 3 - tell is 11 after printing ' World' ok 4 - Contents are correct # --- tell() advances after printf --- ok 5 - tell is 4 after printf '%04d' ok 6 - tell is 10 after second printf ok 7 - Contents are correct # --- tell() advances after syswrite --- ok 8 - tell is 5 after syswrite of 5 bytes ok 9 - tell is 8 after syswrite of 3 more bytes ok 10 - Contents are correct # --- tell() after write then read (read+write mode) --- ok 11 - tell is 11 after writing 'Hello World' ok 12 - tell is 0 after seeking to start ok 13 - Read back 'Hello' ok 14 - tell is 5 after reading 5 bytes # --- tell() after append mode --- ok 15 - tell is 13 after appending to 'existing' ok 16 - Contents are correct # --- printing undef does not change tell --- ok 17 - tell is 3 after printing 'ABC' ok 18 - tell unchanged after printing undef ok 19 - Contents are correct # --- print with explicit output record separator --- ok 20 - tell is 6 after print with ORS (5 chars + newline) ok 21 - Contents include newline from output record separator # --- +< mode: seek + print overwrites at tell position --- ok 22 - tell is 6 after seek ok 23 - tell is 11 after printing 5 bytes at position 6 ok 24 - Overwrite at position 6 replaces 'World' with 'Perl!' # --- +< mode: seek + print does not extend past original when write fits --- ok 25 - Overwrite at position 3 replaces 2 bytes # --- +< mode: print at tell 0 overwrites from start --- ok 26 - Print at position 0 overwrites first 3 bytes # --- +< mode: print extending past end grows the file --- ok 27 - Print past end extends the file ok 28 - File length is 9 # --- >> mode: seek then print still appends --- ok 29 - Append mode ignores seek position # --- +< mode: interleaved read and write --- ok 30 - Read 'Hello' ok 31 - tell is 5 after read ok 32 - tell is 11 after write ok 33 - Interleaved read+write produces correct output # --- > mode: print writes at tell position (not append) --- ok 34 - tell is 8 after initial write ok 35 - tell is 4 after overwrite ok 36 - Overwrite in > mode at seek position # --- syswrite must NOT inherit output record separator ($\) --- ok 37 - tell is 5 after syswrite (no ORS added) ok 38 - syswrite ignores $\ — no newline appended # --- syswrite must NOT inherit output field separator ($,) --- ok 39 - tell is 5 after syswrite with $, set ok 40 - syswrite ignores $, — no separator # --- syswrite returns byte count, not boolean --- ok 41 - syswrite returns 5 for 5 bytes written ok 42 - syswrite returns 2 for 2 bytes written ok 43 - syswrite returns 3 even with $\ set (not 4) ok 44 - All syswrite data correct, no ORS # --- contrast: print DOES use $\ while syswrite does NOT --- ok 45 - print appends ORS, syswrite does not # --- syswrite on read-only handle returns EBADF --- ok 46 - syswrite on read-only handle returns 0 ok 47 - errno is EBADF for syswrite on read-only handle # --- syswrite with negative offset (counts from end of buffer) --- ok 48 - syswrite with negative offset returns bytes written ok 49 - syswrite with offset -2 writes last 2 bytes of buffer # --- syswrite with negative offset past buffer start → error --- ok 50 - syswrite with offset past buffer start returns 0 ok 51 - errno is EINVAL for out-of-bounds negative offset ok 52 - warning emitted for out-of-bounds negative offset ok 53 - no data written on out-of-bounds negative offset # --- syswrite with positive offset past buffer end → error --- ok 54 - syswrite with offset past buffer end returns 0 ok 55 - errno is EINVAL for out-of-bounds positive offset ok 56 - warning emitted for out-of-bounds positive offset ok 57 - no data written on out-of-bounds positive offset # --- syswrite with len exceeding available data (truncates silently) --- ok 58 - syswrite returns actual bytes written when len exceeds buffer ok 59 - syswrite truncates to available data # --- printf must NOT inherit output record separator ($\) --- ok 60 - tell is 8 after printf (no ORS added) ok 61 - printf ignores $\ — no newline appended # --- contrast: print uses $\, printf and syswrite do not --- ok 62 - print appends ORS; printf and syswrite do not ok 63 - No mock files are in cache 1..63 ok t/writeline.t ....................... # Seeded srand with seed '20260328' from local date. # -------------- REAL MODE -------------- ok 1 - tempfile originally writes out 16 bytes ok 2 - Open file for overwrite ok 3 - $real_fh stringifies to a GLOB ok 4 - Close $real_fh ok 5 - $! hasn't been cleared ok 6 - Temp file is on disk and right size assuming a re-write happened. # -------------- MOCK MODE -------------- ok 7 - Mocked temp file opens for write and returns true ok 8 - $fh is a IO::File ok 9 - $fh stringifies to a IO::File GLOB ok 10 - overwrite the contents ok 11 - $foo->contents reflects an overwrite ok 12 - Close $fh ok 13 - $! hasn't been cleared ok 14 - Re-open $fh for append ok 15 - Append line ok 16 - printf returns 1 (success) ok 17 - $foo->contents reflects an append ok 18 - Printing undef returns 1 (success) and is not a warning. ok 19 - Printing empty string returns 1 (success), not 0 ok 20 - print empty string is truthy (print or die pattern works) ok 21 - Close $fh ok 22 - $! hasn't been cleared # -------------- REAL MODE -------------- ok 23 - Temp file on disk is unaltered once $bar is clear. 1..23 ok All tests successful. Files=89, Tests=1553, 28 wallclock secs ( 0.27 usr 0.10 sys + 10.11 cusr 2.67 csys = 13.15 CPU) Result: PASS make[1]: Leaving directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' create-stamp debian/debhelper-build-stamp dh_prep dh_auto_install --destdir=debian/libtest-mockfile-perl/ make -j2 install DESTDIR=/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl AM_UPDATE_INFO_DIR=no PREFIX=/usr make[1]: Entering directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' Manifying 6 pod documents Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/FileHandle.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugin.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/DirHandle.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugins.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugin/FileTemp.pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::Plugin.3pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile.3pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::FileHandle.3pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::Plugin::FileTemp.3pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::Plugins.3pm Installing /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::DirHandle.3pm make[1]: Leaving directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' dh_installdocs dh_installchangelogs debian/rules override_dh_installexamples make[1]: Entering directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' dh_installexamples sed -i '1s|^#!perl|#!/usr/bin/perl|' /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039/debian/libtest-mockfile-perl/usr/share/doc/libtest-mockfile-perl/examples/* make[1]: Leaving directory '/build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039' dh_installman dh_perl dh_link dh_strip_nondeterminism dh_compress dh_fixperms dh_missing dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package 'libtest-mockfile-perl' in '../libtest-mockfile-perl_0.039-1_all.deb'. dpkg-genbuildinfo -O../libtest-mockfile-perl_0.039-1_amd64.buildinfo dpkg-genchanges -O../libtest-mockfile-perl_0.039-1_amd64.changes dpkg-genchanges: info: including full source code in upload dpkg-source -Zxz --after-build . dpkg-buildpackage: info: full upload (original source is included) -------------------------------------------------------------------------------- Build finished at 2026-03-28T06:02:28Z Finished -------- I: Built successfully +------------------------------------------------------------------------------+ | Changes Sat, 28 Mar 2026 06:02:28 +0000 | +------------------------------------------------------------------------------+ libtest-mockfile-perl_0.039-1_amd64.changes: -------------------------------------------- Format: 1.8 Date: Fri, 27 Mar 2026 20:41:21 +0100 Source: libtest-mockfile-perl Binary: libtest-mockfile-perl Architecture: source all Version: 0.039-1 Distribution: sid Urgency: medium Maintainer: Debian Perl Group Changed-By: gregor herrmann Description: libtest-mockfile-perl - Perl module that allows tests to validate code, without requiring Changes: libtest-mockfile-perl (0.039-1) unstable; urgency=medium . * Team upload. * Import upstream version 0.039. * Update debian/upstream/metadata. * Declare compliance with Debian Policy 4.7.3. * Remove «Rules-Requires-Root: no», which is the current default. * Remove «Priority: optional», which is the current default. Checksums-Sha1: 3fcea4555fd5d028f1a443b8159a289ce1290b31 1581 libtest-mockfile-perl_0.039-1.dsc 1667fef8ca85c6b2d5d2ea7f2e8e01efdb6ab58f 137424 libtest-mockfile-perl_0.039.orig.tar.gz a5a3eb7d13255bc80c3c45d13242105822fb4fec 2196 libtest-mockfile-perl_0.039-1.debian.tar.xz 5625e6df7e4514e58f214567983bfb31e9a840a4 65656 libtest-mockfile-perl_0.039-1_all.deb 63f7a69e03a7a4587f7fd3ef1c59cde9e06ea103 5882 libtest-mockfile-perl_0.039-1_amd64.buildinfo Checksums-Sha256: 2d9967fd47a5079338c938db0a0d673a439c353b3f1dfccf110ef38a4f8d0c8e 1581 libtest-mockfile-perl_0.039-1.dsc e1dc3e4f0144b5681ae624edebcfb28798ab2e8d7a2881faf7f16a694bd4c36e 137424 libtest-mockfile-perl_0.039.orig.tar.gz 17b036e01a599f03b335b6ba6303e65d4cf55804eae4d704aeed38e7cc972ca0 2196 libtest-mockfile-perl_0.039-1.debian.tar.xz 0250bcef907c2dbfd234f8b4797cf1c8d0077924405fad257caf60b160426470 65656 libtest-mockfile-perl_0.039-1_all.deb 8d416f52d0e75993752bdbdbf7126f9fa285c8909e87a8fac7a56b620605a03c 5882 libtest-mockfile-perl_0.039-1_amd64.buildinfo Files: 04477b6f6e8dcbc0664f07a7e2f4f043 1581 perl optional libtest-mockfile-perl_0.039-1.dsc 6dff8f16cc995bc6ae6f92638332ded5 137424 perl optional libtest-mockfile-perl_0.039.orig.tar.gz b2da84126ce992d7dc1f1c97e5d0c4ff 2196 perl optional libtest-mockfile-perl_0.039-1.debian.tar.xz 34cf3021e3267d40dc2303ad793fbcf8 65656 perl optional libtest-mockfile-perl_0.039-1_all.deb fe6917d3fb48e21266692fd55dc643c8 5882 perl optional libtest-mockfile-perl_0.039-1_amd64.buildinfo +------------------------------------------------------------------------------+ | Buildinfo Sat, 28 Mar 2026 06:02:28 +0000 | +------------------------------------------------------------------------------+ Format: 1.0 Source: libtest-mockfile-perl Binary: libtest-mockfile-perl Architecture: all source Version: 0.039-1 Checksums-Md5: 04477b6f6e8dcbc0664f07a7e2f4f043 1581 libtest-mockfile-perl_0.039-1.dsc 34cf3021e3267d40dc2303ad793fbcf8 65656 libtest-mockfile-perl_0.039-1_all.deb Checksums-Sha1: 3fcea4555fd5d028f1a443b8159a289ce1290b31 1581 libtest-mockfile-perl_0.039-1.dsc 5625e6df7e4514e58f214567983bfb31e9a840a4 65656 libtest-mockfile-perl_0.039-1_all.deb Checksums-Sha256: 2d9967fd47a5079338c938db0a0d673a439c353b3f1dfccf110ef38a4f8d0c8e 1581 libtest-mockfile-perl_0.039-1.dsc 0250bcef907c2dbfd234f8b4797cf1c8d0077924405fad257caf60b160426470 65656 libtest-mockfile-perl_0.039-1_all.deb Build-Origin: Debian Build-Architecture: amd64 Build-Date: Sat, 28 Mar 2026 06:02:27 +0000 Build-Path: /build/libtest-mockfile-perl-2fwAwc/libtest-mockfile-perl-0.039 Build-Tainted-By: usr-local-has-programs Installed-Build-Depends: autoconf (= 2.72-6), automake (= 1:1.18.1-4), autopoint (= 0.23.2-2), autotools-dev (= 20240727.1), base-files (= 14), base-passwd (= 3.6.8), bash (= 5.3-2), binutils (= 2.46-3), binutils-common (= 2.46-3), binutils-x86-64-linux-gnu (= 2.46-3), bsdextrautils (= 2.41.3-4), build-essential (= 12.12), bzip2 (= 1.0.8-6+b1), coreutils (= 9.10-1), cpp (= 4:15.2.0-5), cpp-13 (= 13.4.0-10), cpp-13-x86-64-linux-gnu (= 13.4.0-10), cpp-15 (= 15.2.0-16), cpp-15-x86-64-linux-gnu (= 15.2.0-16), cpp-x86-64-linux-gnu (= 4:15.2.0-5), dash (= 0.5.12-12), debconf (= 1.5.92), debhelper (= 13.31), debianutils (= 5.23.2), dh-autoreconf (= 22), dh-strip-nondeterminism (= 1.15.0-1), diffutils (= 1:3.12-1), dpkg (= 1.23.7), dpkg-dev (= 1.23.7), dwz (= 0.16-4), file (= 1:5.46-5+b1), findutils (= 4.10.0-3), g++ (= 4:15.2.0-5), g++-15 (= 15.2.0-16), g++-15-x86-64-linux-gnu (= 15.2.0-16), g++-x86-64-linux-gnu (= 4:15.2.0-5), gcc (= 4:15.2.0-5), gcc-13 (= 13.4.0-10), gcc-13-base (= 13.4.0-10), gcc-13-x86-64-linux-gnu (= 13.4.0-10), gcc-15 (= 15.2.0-16), gcc-15-base (= 15.2.0-16), gcc-15-x86-64-linux-gnu (= 15.2.0-16), gcc-16-base (= 16-20260322-1), gcc-x86-64-linux-gnu (= 4:15.2.0-5), gettext (= 0.23.2-2), gettext-base (= 0.23.2-2), grep (= 3.12-1), groff-base (= 1.23.0-10), gzip (= 1.13-1), hostname (= 3.25), init-system-helpers (= 1.69), intltool-debian (= 0.35.0+20060710.6), libacl1 (= 2.3.2-3), libarchive-zip-perl (= 1.68-1), libasan8 (= 16-20260322-1), libatomic1 (= 16-20260322-1), libattr1 (= 1:2.5.2-4), libaudit-common (= 1:4.1.2-1), libaudit1 (= 1:4.1.2-1+b1), libbinutils (= 2.46-3), libblkid1 (= 2.41.3-4), libbz2-1.0 (= 1.0.8-6+b1), libc-bin (= 2.42-14), libc-dev-bin (= 2.42-14), libc-gconv-modules-extra (= 2.42-14), libc6 (= 2.42-14), libc6-dev (= 2.42-14), libcap-ng0 (= 0.9.1-1), libcc1-0 (= 16-20260322-1), libcrypt1 (= 1:4.5.1-1), libctf-nobfd0 (= 2.46-3), libctf0 (= 2.46-3), libdata-uuid-perl (= 1.227-2), libdb5.3t64 (= 5.3.28+dfsg2-11), libdebconfclient0 (= 0.282+b2), libdebhelper-perl (= 13.31), libdpkg-perl (= 1.23.7), libelf1t64 (= 0.194-4), libfile-slurper-perl (= 0.014-1), libfile-stripnondeterminism-perl (= 1.15.0-1), libfilter-perl (= 1.65-1), libgcc-13-dev (= 13.4.0-10), libgcc-15-dev (= 15.2.0-16), libgcc-s1 (= 16-20260322-1), libgdbm-compat4t64 (= 1.26-1+b1), libgdbm6t64 (= 1.26-1+b1), libgmp10 (= 2:6.3.0+dfsg-5+b1), libgomp1 (= 16-20260322-1), libgoto-file-perl (= 0.005-2), libgprofng0 (= 2.46-3), libhwasan0 (= 16-20260322-1), libimporter-perl (= 0.026-2), libisl23 (= 0.27-2), libitm1 (= 16-20260322-1), libjansson4 (= 2.14-2+b4), liblong-jump-perl (= 0.000001-2), liblsan0 (= 16-20260322-1), liblzma5 (= 5.8.2-2), libmagic-mgc (= 1:5.46-5+b1), libmagic1t64 (= 1:5.46-5+b1), libmd0 (= 1.1.0-2+b2), libmount1 (= 2.41.3-4), libmpc3 (= 1.3.1-3), libmpfr6 (= 4.2.2-3), liboverload-filecheck-perl (= 0.014-1), libpam-modules (= 1.7.0-5+b1), libpam-modules-bin (= 1.7.0-5+b1), libpam-runtime (= 1.7.0-5), libpam0g (= 1.7.0-5+b1), libpcre2-8-0 (= 10.46-1+b1), libperl5.40 (= 5.40.1-7), libpipeline1 (= 1.5.8-2), libquadmath0 (= 16-20260322-1), libscope-guard-perl (= 0.21-2), libseccomp2 (= 2.6.0-2+b1), libselinux1 (= 3.9-4+b1), libsframe3 (= 2.46-3), libsmartcols1 (= 2.41.3-4), libssl3t64 (= 3.6.1-3), libstdc++-15-dev (= 15.2.0-16), libstdc++6 (= 16-20260322-1), libsub-identify-perl (= 0.14-4), libsuper-perl (= 1.20190531-1), libsystemd0 (= 260.1-1), libtest-mockmodule-perl (= 0.180.0-1), libtest-simple-perl (= 1.302219-1), libtest2-harness-perl (= 1.000163-1), libtest2-plugin-memusage-perl (= 0.002003-2), libtest2-plugin-nowarnings-perl (= 0.10-1), libtest2-plugin-uuid-perl (= 0.002010-1), libtest2-tools-explain-perl (= 0.02-2), libtext-glob-perl (= 0.11-3), libtinfo6 (= 6.6+20251231-1), libtool (= 2.5.4-9), libtsan2 (= 16-20260322-1), libubsan1 (= 16-20260322-1), libuchardet0 (= 0.0.8-2+b1), libudev1 (= 260.1-1), libunistring5 (= 1.4.2-1), libuuid-perl (= 0.37-1), libuuid1 (= 2.41.3-4), libxml2-16 (= 2.15.2+dfsg-0.1), libyaml-tiny-perl (= 1.76-1), libzstd1 (= 1.5.7+dfsg-3+b1), linux-libc-dev (= 6.19.8-1), m4 (= 1.4.21-1), make (= 4.4.1-3), man-db (= 2.13.1-1), mawk (= 1.3.4.20260302-1), ncurses-base (= 6.6+20251231-1), ncurses-bin (= 6.6+20251231-1), openssl-provider-legacy (= 3.6.1-3), patch (= 2.8-2), perl (= 5.40.1-7), perl-base (= 5.40.1-7), perl-modules-5.40 (= 5.40.1-7), po-debconf (= 1.0.22), rpcsvc-proto (= 1.4.3-1), sed (= 4.9-2), sensible-utils (= 0.0.26), sysvinit-utils (= 3.15-6), tar (= 1.35+dfsg-4), util-linux (= 2.41.3-4), xz-utils (= 5.8.2-2), zlib1g (= 1:1.3.dfsg+really1.3.2-1) Environment: DEB_BUILD_OPTIONS="parallel=2" LANG="C.UTF-8" LANGUAGE="en_GB:en" LC_COLLATE="C.UTF-8" LC_CTYPE="C.UTF-8" LD_LIBRARY_PATH="/usr/lib/libeatmydata" LD_PRELOAD="libeatmydata.so" SOURCE_DATE_EPOCH="1774640481" +------------------------------------------------------------------------------+ | Package contents Sat, 28 Mar 2026 06:02:28 +0000 | +------------------------------------------------------------------------------+ libtest-mockfile-perl_0.039-1_all.deb ------------------------------------- new Debian package, version 2.0. size 65656 bytes: control archive=1200 bytes. 768 bytes, 16 lines control 1306 bytes, 16 lines md5sums Package: libtest-mockfile-perl Version: 0.039-1 Architecture: all Maintainer: Debian Perl Group Installed-Size: 207 Depends: perl:any, liboverload-filecheck-perl, libtest-mockmodule-perl, libtext-glob-perl Section: perl Priority: optional Homepage: https://metacpan.org/release/Test-MockFile Description: Perl module that allows tests to validate code, without requiring a file system Test::MockFile intercepts file system calls for specific files so unit testing can take place without any files being altered on disk. This is useful for small tests where file interaction is discouraged. . A strict mode is even provided (and turned on by default) which can throw a die when files are accessed during your tests! drwxr-xr-x root/root 0 2026-03-27 19:41 ./ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/doc/ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/doc/libtest-mockfile-perl/ -rw-r--r-- root/root 466 2026-03-27 19:41 ./usr/share/doc/libtest-mockfile-perl/changelog.Debian.gz -rw-r--r-- root/root 6171 2026-03-22 22:45 ./usr/share/doc/libtest-mockfile-perl/changelog.gz -rw-r--r-- root/root 1219 2026-03-27 19:41 ./usr/share/doc/libtest-mockfile-perl/copyright drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/doc/libtest-mockfile-perl/examples/ -rw-r--r-- root/root 1638 2026-03-27 19:41 ./usr/share/doc/libtest-mockfile-perl/examples/examples.pl drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/man/ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/man/man3/ -rw-r--r-- root/root 10975 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile.3pm.gz -rw-r--r-- root/root 1816 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile::DirHandle.3pm.gz -rw-r--r-- root/root 3132 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile::FileHandle.3pm.gz -rw-r--r-- root/root 1178 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile::Plugin.3pm.gz -rw-r--r-- root/root 1159 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile::Plugin::FileTemp.3pm.gz -rw-r--r-- root/root 1119 2026-03-27 19:41 ./usr/share/man/man3/Test::MockFile::Plugins.3pm.gz drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/perl5/ drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/perl5/Test/ -rw-r--r-- root/root 133980 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile.pm drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/perl5/Test/MockFile/ -rw-r--r-- root/root 2390 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile/DirHandle.pm -rw-r--r-- root/root 17440 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile/FileHandle.pm -rw-r--r-- root/root 1055 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile/Plugin.pm drwxr-xr-x root/root 0 2026-03-27 19:41 ./usr/share/perl5/Test/MockFile/Plugin/ -rw-r--r-- root/root 2744 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile/Plugin/FileTemp.pm -rw-r--r-- root/root 1412 2026-03-22 22:46 ./usr/share/perl5/Test/MockFile/Plugins.pm +------------------------------------------------------------------------------+ | Post Build Sat, 28 Mar 2026 06:02:29 +0000 | +------------------------------------------------------------------------------+ +------------------------------------------------------------------------------+ | Cleanup Sat, 28 Mar 2026 06:02:29 +0000 | +------------------------------------------------------------------------------+ Purging /build/libtest-mockfile-perl-2fwAwc Not cleaning session: cloned chroot in use +------------------------------------------------------------------------------+ | Summary Sat, 28 Mar 2026 06:02:29 +0000 | +------------------------------------------------------------------------------+ Build Architecture: amd64 Build Type: full Build-Space: 1812 Build-Time: 33 Distribution: sid Host Architecture: amd64 Install-Time: 6 Job: /srv/debomatic/incoming/libtest-mockfile-perl_0.039-1.dsc Machine Architecture: amd64 Package: libtest-mockfile-perl Package-Time: 49 Source-Version: 0.039-1 Space: 1812 Status: successful Version: 0.039-1 -------------------------------------------------------------------------------- Finished at 2026-03-28T06:02:28Z Build needed 00:00:49, 1812k disk space