Diff of the two buildlogs: -- --- b1/build.log 2025-10-31 21:46:58.506021306 +0000 +++ b2/build.log 2025-10-31 21:47:21.246049734 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Thu Dec 3 16:09:19 -12 2026 -I: pbuilder-time-stamp: 1796357359 +I: Current time: Sat Nov 1 11:47:00 +14 2025 +I: pbuilder-time-stamp: 1761947220 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/forky-reproducible-base.tgz] I: copying local configuration @@ -22,53 +22,85 @@ dpkg-source: info: unpacking libtest-mockfile-perl_0.037-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/4070540/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/D01_modify_environment starting +debug: Running on codethink04-arm64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Oct 31 21:47 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='arm64' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='forky' - HOME='/root' - HOST_ARCH='arm64' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="3" [2]="3" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.3.3(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 nocheck' + DIRSTACK=() + DISTRIBUTION=forky + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='7c9fdaedd2cb463cae0599f8f522e532' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='4070540' - PS1='# ' - PS2='> ' + INVOCATION_ID=03a535efdc7c4f2aa66909ac86f287ea + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=4112464 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.LSIn58Ee/pbuilderrc_o2qV --distribution forky --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.LSIn58Ee/b1 --logfile b1/build.log libtest-mockfile-perl_0.037-1.dsc' - SUDO_GID='109' - SUDO_HOME='/var/lib/jenkins' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.LSIn58Ee/pbuilderrc_Qdrh --distribution forky --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.LSIn58Ee/b2 --logfile b2/build.log libtest-mockfile-perl_0.037-1.dsc' + SUDO_GID=109 + SUDO_HOME=/var/lib/jenkins + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink03-arm64 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Aug 10 2025 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/4070540/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -169,7 +201,7 @@ Get: 47 http://deb.debian.org/debian forky/main arm64 libtest2-plugin-nowarnings-perl all 0.10-1 [15.8 kB] Get: 48 http://deb.debian.org/debian forky/main arm64 libtest2-tools-explain-perl all 0.02-2 [9684 B] Get: 49 http://deb.debian.org/debian forky/main arm64 libtext-glob-perl all 0.11-3 [7676 B] -Fetched 12.6 MB in 0s (37.7 MB/s) +Fetched 12.6 MB in 0s (185 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19971 files and directories currently installed.) @@ -380,7 +412,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/libtest-mockfile-perl-0.037/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../libtest-mockfile-perl_0.037-1_source.changes +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for forky +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/libtest-mockfile-perl-0.037/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../libtest-mockfile-perl_0.037-1_source.changes dpkg-buildpackage: info: source package libtest-mockfile-perl dpkg-buildpackage: info: source version 0.037-1 dpkg-buildpackage: info: source distribution unstable @@ -404,1120 +440,15 @@ dh_auto_build make -j12 make[1]: Entering directory '/build/reproducible-path/libtest-mockfile-perl-0.037' +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/FileHandle.pm blib/lib/Test/MockFile/FileHandle.pm -cp lib/Test/MockFile/Plugin.pm blib/lib/Test/MockFile/Plugin.pm cp lib/Test/MockFile/Plugins.pm blib/lib/Test/MockFile/Plugins.pm cp lib/Test/MockFile/DirHandle.pm blib/lib/Test/MockFile/DirHandle.pm -cp lib/Test/MockFile.pm blib/lib/Test/MockFile.pm -cp lib/Test/MockFile/Plugin/FileTemp.pm blib/lib/Test/MockFile/Plugin/FileTemp.pm +cp lib/Test/MockFile/Plugin.pm blib/lib/Test/MockFile/Plugin.pm Manifying 6 pod documents make[1]: Leaving directory '/build/reproducible-path/libtest-mockfile-perl-0.037' - dh_auto_test - make -j12 test TEST_VERBOSE=1 -make[1]: Entering directory '/build/reproducible-path/libtest-mockfile-perl-0.037' -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.037 with Overload::FileCheck 0.013 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/chmod-filetemp.t .................. -# Seeded srand with seed '20261204' from local date. -ok 1 -1..1 -ok -t/chmod.t ........................... -# Seeded srand with seed '20261204' 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 -} -1..4 -ok -t/chown-chmod-nostrict.t ............ -# Seeded srand with seed '20261204' 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 '20261204' 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 1111 - ok 4 - /foo set GID correctly to 1111 - ok 5 - /foo/bar set UID correctly to 1111 - ok 6 - /foo/bar set GID correctly to 1111 - 1..6 -} -ok 2 - Change ownership of file to someone else { - # $>: 1111, $): 1111 1111 - ok 1 - chown file to some high, probably unavailable, UID/GID - ok 2 - chown failed (EPERM): $>:1111, $):1111 1111 - ok 3 - chown file to some high, probably unavailable, GID - ok 4 - chown failed (EPERM): $>:1111, $):1111 1111 - ok 5 - chown file to some high, probably unavailable, UID - ok 6 - chown failed (EPERM): $>:1111, $):1111 1111 - ok 7 - chown file to root - ok 8 - chown failed (EPERM): $>:1111, $):1111 1111 - ok 9 - chown file to root GID - ok 10 - chown failed (EPERM): $>:1111, $):1111 1111 - ok 11 - chown file to root UID - ok 12 - chown failed (EPERM): $>:1111, $):1111 1111 - 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 -} -1..7 -ok -t/detect-common-mistakes.t .......... -# Seeded srand with seed '20261204' 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 '20261204' 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 -} -1..5 -ok -t/file_access_hooks.t ............... -# Seeded srand with seed '20261204' 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/fileno.t .......................... -# Seeded srand with seed '20261204' from local date. -ok 1 - Opened file -ok 2 - Refuse to support fileno -ok 3 - Opened file -1..3 -ok -t/globbing.t ........................ -# Seeded srand with seed '20261204' 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 '20261204' from local date. -ok 1 - goto isn't available on 5.006002 -ok 2 - goto isn't available on 5.008008 -ok 3 - goto was first available on 5.016000 -ok 4 - goto was available on 5.018000 -ok 5 - goto was available on 5.020000 -ok 6 - goto was broken on 5.022001 (7bdb4ff0943cf93297712faf504cdd425426e57f) -ok 7 - goto was broken on 5.024000 (7bdb4ff0943cf93297712faf504cdd425426e57f) -ok 8 - goto was broken on 5.026000 (7bdb4ff0943cf93297712faf504cdd425426e57f) -ok 9 - goto works again for 5.028000 -ok 10 - goto works on 5.030000 -1..10 -ok -t/handle-corruption.t ............... -# Seeded srand with seed '20261204' 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 '20261204' 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/manifest.t ........................ skipped: Test::CheckManifest is broken - https://github.com/reneeb/Test-CheckManifest/issues/20 -t/mkdir.t ........................... -# Seeded srand with seed '20261204' 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 '20261204' 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' -# _fh_to_file -ok 12 - _fh_to_file() -ok 13 - _fh_to_file(0) -ok 14 - _fh_to_file('') -ok 15 - _fh_to_file(' ') -ok 16 - _fh_to_file('/etc/passwd') -ok 17 - _fh_to_file($fh) -ok 18 - _fh_to_file($fh2) -ok 19 - _fh_to_file($fh) when closed. -# _find_file_or_fh -ok 20 - _find_file_or_fh('/abc') -ok 21 - _find_file_or_fh('/abc', 1) - follow -ok 22 - _find_file_or_fh('/broken_link', 1) is undef when /broken_link is mocked. -ok 23 - _find_file_or_fh('/aaaa', 1) - with circular links -ok 24 - $! is ELOOP -# _mock_stat -ok 25 - An unmocked file will return FALLBACK_TO_REAL_OP() to tell XS to handle it -ok 26 - no args fails cause we should have gotten a stat type. -ok 27 - An unknown stat type fails cause this should never happen. -ok 28 - empty string passes to XS -ok 29 - A space string passes to XS -ok 30 - /foo/bar mock stat -ok 31 - /aaa mock stat when looped. -ok 32 - Throws an ELOOP error -ok 33 - /foo/baz mock stat when missing. -ok 34 - lstat on /broken_link returns the stat on the symlink itself. -ok 35 - stat on /broken_link is an empty array since what it points to doesn't exist. -ok 36 - mocked file is executable -ok 37 - default uid is current UID -# GID 1111 -ok 38 - default fid is current GID -ok 39 - Directory /quux exists -ok 40 - Directory /quux/ also exists -1..40 -ok -t/new_dir_interface.t ............... -# Seeded srand with seed '20261204' 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 (0777) - 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 '20261204' 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 -1..17 -ok -t/open_strict.t ..................... -# Seeded srand with seed '20261204' 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/opendir.t ......................... -# Seeded srand with seed '20261204' from local date. -# -------------- REAL MODE -------------- -ok 1 - Temp is created on disk. -ok 2 - /tmp/GuWKYlJ45K 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 -1..32 -ok -t/path.t ............................ -# Seeded srand with seed '20261204' 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/plugin-filetemp.t ................. -# Seeded srand with seed '20261204' 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 '20261204' 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/readline.t ........................ -# Seeded srand with seed '20261204' 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 when it goes out of scope. -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/F4LDJv2Q4G" -ok 33 - What $! looks like when failing to open the missing file. -# -------------- MOCK MODE -------------- -ok 34 - Can't open a missing file "/tmp/F4LDJv2Q4G" -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. -1..38 -ok -t/readlink.t ........................ -# Seeded srand with seed '20261204' 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 ENOENT for a readlink(undef) -ok 14 - Got expected warning for passing no value to readlink -ok 15 - readlink without args is undef. -ok 16 - $! is ENOENT for a readlink(undef) -# 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 ENOENT for a readlink(undef) -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 119. -# +---------------------------------+----+---------------------------------+ -# | GOT | OP | CHECK | -# +---------------------------------+----+---------------------------------+ -# | Use of uninitialized value in r | =~ | (?^:^Use of uninitialized value | -# | eadlink at t/readlink.t line 11 | | \$_ in readlink at ) | -# | 9.\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 ENOENT for a readlink(undef) -1..32 -ok -t/rmdir.t ........................... -# Seeded srand with seed '20261204' 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 - REAL mkdir when undef is passed as the directory. - ok 6 - - returns 0 - 1..6 -} -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 set to correct perror (39) - 1..5 -} -1..6 -ok -t/runtime-bareword-filehandles.t .... -# Seeded srand with seed '20261204' from local date. -ok 1 - Successfully handled bareword filehandles during runtime -ok 2 - No observed error -1..2 -ok -t/stat-x.t .......................... -# Seeded srand with seed '20261204' 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/strict-rules.t .................... -# Seeded srand with seed '20261204' 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 '20261204' 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 '20261204' 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 '20261204' 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 -1..4 -ok -t/sysopen.t ......................... -# Seeded srand with seed '20261204' 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/Xfdy_q9VxN 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() -# -------------- MOCK MODE -------------- -ok 32 - Sysopen for read -ok 33 - $fh stringifies to a IO::File GLOB -ok 34 - Read 2 into buf at EOL -ok 35 - Confirm 2 line read -ok 36 - Read into buf at pos 0 truncates the buffer. -ok 37 - Confirm 2 line read -ok 38 - Read 0 into buf at pos 0 truncates the buffer completely. -ok 39 - Buffer is clear -ok 40 - Read 2 into buf at pos 5 truncates after the buffer. -ok 41 - Line is as expected. -ok 42 - Read 3 into buf after EOL for the buffer fills in zeroes. -ok 43 - Buffer has null bytes in the middle of it. -ok 44 - Seek to near EOF -ok 45 - Read 2 into buf since we're at EOF -ok 46 - Buffer is clear -ok 47 - 0 -ok 48 - sysseek to start of file returns '0 but true' to make it so. -ok 49 - sysseek to start of file returns true when checked with ok() -# -------------- REAL MODE -------------- -ok 50 - Sysopen for read -ok 51 - Read 2 into buf when buf is undef. -ok 52 - Confirm 2 char is read -# -------------- MOCK MODE -------------- -ok 53 - Sysopen for read -ok 54 - Read 2 into buf when buf is undef. -ok 55 - Confirm 2 char is read -ok 56 - No mock files are in cache -1..56 -ok -t/sysopen_strict.t .................. -# Seeded srand with seed '20261204' from local date. -ok 1 - sysopen() to read a filehandle fails -1..1 -ok -t/Test-MockFile_file.t .............. -# Seeded srand with seed '20261204' from local date. -ok 1 - Todo -1..1 -ok -t/touch.t ........................... -# Seeded srand with seed '20261204' from local date. -# -------------- REAL MODE -------------- -ok 1 - /tmp/Xfdy_q9VxN 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/unlink.t .......................... -# Seeded srand with seed '20261204' 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 -} -1..4 -ok -t/writeline.t ....................... -# Seeded srand with seed '20261204' 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 - Append line with a printf -ok 17 - $foo->contents reflects an append -ok 18 - Printing undef returns 0 and is not a warning. -ok 19 - Close $fh -ok 20 - $! hasn't been cleared -# -------------- REAL MODE -------------- -ok 21 - Temp file on disk is unaltered once $bar is clear. -1..21 -ok -All tests successful. -Files=42, Tests=444, 8 wallclock secs ( 0.15 usr 0.06 sys + 4.66 cusr 1.69 csys = 6.56 CPU) -Result: PASS -make[1]: Leaving directory '/build/reproducible-path/libtest-mockfile-perl-0.037' +dh: command-omitted: The call to "dh_auto_test" was omitted due to "DEB_BUILD_OPTIONS=nocheck" create-stamp debian/debhelper-build-stamp dh_prep dh_auto_install --destdir=debian/libtest-mockfile-perl/ @@ -1525,9 +456,9 @@ make[1]: Entering directory '/build/reproducible-path/libtest-mockfile-perl-0.037' Manifying 6 pod documents Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile.pm +Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugin.pm Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/DirHandle.pm Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugins.pm -Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugin.pm Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/FileHandle.pm Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/perl5/Test/MockFile/Plugin/FileTemp.pm Installing /build/reproducible-path/libtest-mockfile-perl-0.037/debian/libtest-mockfile-perl/usr/share/man/man3/Test::MockFile::Plugins.3pm @@ -1563,12 +494,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/4112464/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/4070540 and its subdirectories -I: Current time: Thu Dec 3 16:09:57 -12 2026 -I: pbuilder-time-stamp: 1796357397 +I: removing directory /srv/workspace/pbuilder/4112464 and its subdirectories +I: Current time: Sat Nov 1 11:47:20 +14 2025 +I: pbuilder-time-stamp: 1761947240