in reply to Re^4: Perl release v5.40.1 on a 32-bit box showing failed tests for atime and ctime in Time::HiRes
in thread Perl release v5.40.1 on a 32-bit box showing failed tests for atime and ctime in Time::HiRes

I don't know.

The only other test I can think of is to modify the test script to display the filename (around line 156) and additionally run stat on it

is $got_mtime, $mtime, "mtime set correctly"; # added lines follow note "File $filename"; system "stat $filename"; system "stat -f $filename"; # added lines before this };

The most obvious cause could be that the APIs aren't detected properly, but utime.t checks that the APIs have been found before running these tests.

You may want to open a ticket at https://github.com/Perl/perl5/issues

  • Comment on Re^5: Perl release v5.40.1 on a 32-bit box showing failed tests for atime and ctime in Time::HiRes
  • Download Code

Replies are listed 'Best First'.
Re^6: Perl release v5.40.1 on a 32-bit box showing failed tests for atime and ctime in Time::HiRes
by Intrepid (Curate) on Mar 13, 2025 at 19:02 UTC

    Follow-up to test errors on subsecond timestamps on files in perl 5.4.1, Time::HiRes

    tonyc, I put your additional lines of code into utime.t and this is the full output:

    # Testing for subsecond file timestamps (mtime) in /home/somian/build/perl/perl-debian-5.40/dist/Time-HiRes
    # Subsecond file timestamps in /home/somian/build/perl/perl-debian-5.40/dist/Time-HiRes: OK
    1..22
    # I am the main process 5420, starting the watchdog process...
    # I am the watchdog process 5421, sleeping for 360 seconds...
    # The watchdog process 5421 launched, continuing testing...
    # $^O = linux, atime = 1.111111111, mtime = 2.222222222
    # utime $fh
    ok 1 - One file changed
    not ok 2 - atime set correctly
    
    #   Failed test 'atime set correctly'
    #   at t/utime.t line 156.
    #          got: '1'
    #     expected: '1.111111111'
    # File Time-HiRes-utime-wUS033Puo
      File: Time-HiRes-utime-wUS033Puo
      Size: 0         	Blocks: 16         IO Block: 4096   regular empty file
    Device: 0,44	Inode: 38171226    Links: 1
    Access: (0600/-rw-------)  Uid: ( 1000/  somian)   Gid: ( 1000/  somian)
    Access: 1969-12-31 19:00:01.000000000 -0500
    Modify: 1969-12-31 19:00:02.000000000 -0500
    Change: 2025-03-13 14:30:24.401330294 -0400
     Birth: -
      File: "Time-HiRes-utime-wUS033Puo"
        ID: c5ff08d4ce0ba8ed Namelen: 143     Type: ecryptfs
    Block size: 4096       Fundamental block size: 4096
    Blocks: Total: 157996844  Free: 155774090  Available: 147729918
    Inodes: Total: 40206336   Free: 39635781
    not ok 3 - mtime set correctly
    
    #   Failed test 'mtime set correctly'
    #   at t/utime.t line 161.
    #          got: '2'
    #     expected: '2.222222222'
    #utime $filename
    ok 4 - One file changed
    not ok 5 - atime set correctly
    
    #   Failed test 'atime set correctly'
    #   at t/utime.t line 171.
    #          got: '1'
    #     expected: '1.111111111'
    not ok 6 - mtime set correctly
    
    #   Failed test 'mtime set correctly'
    #   at t/utime.t line 173.
    #          got: '2'
    #     expected: '2.222222222'
    #utime $filename round-trip
    ok 7 - One file changed
    ok 8 - One file changed
    ok 9 - atime round trip ok
    ok 10 - mtime round trip ok
    utime $filename and $fh
    ok 11 - Two files changed
    not ok 12 - File 1 atime set correctly
    
    #   Failed test 'File 1 atime set correctly'
    #   at t/utime.t line 198.
    #          got: '1'
    #     expected: '1.111111111'
    not ok 13 - File 1 mtime set correctly
    
    #   Failed test 'File 1 mtime set correctly'
    #   at t/utime.t line 200.
    #          got: '2'
    #     expected: '2.222222222'
    not ok 14 - File 2 atime set correctly
    
    #   Failed test 'File 2 atime set correctly'
    #   at t/utime.t line 206.
    #          got: '1'
    #     expected: '1.111111111'
    not ok 15 - File 2 mtime set correctly
    
    #   Failed test 'File 2 mtime set correctly'
    #   at t/utime.t line 208.
    #          got: '2'
    #     expected: '2.222222222'
    # utime undef sets time to now
    ok 16 - Two files changed
    ok 17 - File 1 atime set correctly
    ok 18 - File 1 mtime set correctly
    ok 19 - File 2 atime set correctly
    ok 20 - File 2 mtime set correctly
    # negative atime dies
    ok 21 - negative time error
    # negative mtime dies;
    ok 22 - negative time error
    # I am the main process 5420, terminating the watchdog process 5421 before it terminates me in 359 seconds (testing took 1 seconds).
    # kill KILL 5421 = 1
    # All done.
    # Looks like you failed 8 tests of 22.
    Dubious, test returned 8 (wstat 2048, 0x800)
    Failed 8/22 subtests 
    
    Test Summary Report
    -------------------
    ../dist/Time-HiRes/t/utime.t (Wstat: 2048 (exited 8) Tests: 22 Failed: 8)
      Failed tests:  2-3, 5-6, 12-15
      Non-zero exit status: 8
    Files=1, Tests=22,  2 wallclock secs ( 0.01 usr  0.01 sys +  0.22 cusr  0.06 csys =  0.30 CPU)
    Result: FAIL
    Finished test run at Thu Mar 13 14:30:25 2025.
    

    This time something jumps out at us: the filesystem is ecryptfs. I had forgotten that I followed the install-time prompts to set up encryption on my home dir. Could this be relevant to the test failures we're seeing? I am wondering if I try building perl and running the tests on another filesystem location, will that show different results for the tests in utime.t.

    Thanks again for hanging in there with me, tonyc.

    Mar 13, 2025 at 18:52 UTC