Bug #64060 [PATCH]: Test lstat_stat_variation7 incorrectly fails on certain file systems

"[email protected]" <[email protected]>
Newsgroups gmane.comp.php.quality-assurance
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=64060&edit=1

 ID:                 64060
 Patch added by:     [email protected]
 Reported by:        m dot voelker at gmail dot com
 Summary:            Test lstat_stat_variation7 incorrectly fails on
                     certain file systems
 Status:             Open
 Type:               Bug
 Package:            Testing related
 Operating System:   Linux
 PHP Version:        5.4.11
 Block user comment: N
 Private report:     N

 New Comment:

The following pull request has been associated:

Patch Name: Fix #64060: Test lstat_stat_variation7 incorrectly fails on certain f…
On GitHub:  https://github.com/php/php-src/pull/6194
Patch:      https://github.com/php/php-src/pull/6194.patch


Previous Comments:
------------------------------------------------------------------------
[2013-01-23 23:13:07] m dot voelker at gmail dot com

Description:
------------
This applies to PHP 5.4.11 as well as 5.3.21.

Test ext/standard/tests/file/lstat_stat_variation7.phpt may incorrectly fail on delayed allocation file systems (in this case XFS on Linux).

Problem:
http://php.net/manual/en/function.stat.php
field 12 is "number of 512-byte blocks allocated"

The test does not fclose() the test file after writing to it, therefore zero 512-byte blocks are allocated even though the file size is 45056 bytes.

Fix:
Change lstat_stat_variation7.phpt from

// writing to an empty file
echo "*** Testing stat() on file after data is written in it ***\n";
$fh = fopen($file_name,"w");
$old_stat = stat($file_name);
clearstatcache();
fwrite($fh, str_repeat((binary)"Hello World", $old_stat['blksize']));
$new_stat = stat($file_name);

to

// writing to an empty file
echo "*** Testing stat() on file after data is written in it ***\n";
$fh = fopen($file_name,"w");
$old_stat = stat($file_name);
clearstatcache();
fwrite($fh, str_repeat((binary)"Hello World", $old_stat['blksize']));
fclose($fh);
$new_stat = stat($file_name);

and the test succeeds.


Test script:
---------------
File: ext/standard/tests/file/lstat_stat_variation7.php

To confirm, modify $file_name = "$file_path/lstat_stat_variation7.tmp"; to use a different file system and run ext/standard/tests/file/lstat_stat_variation7.sh.


Expected result:
----------------
Build of PHP 5.4.11

Test executed on ext2:

*** Testing stat() on file after data is written in it ***
bool(true)
bool(true)
bool(true)

--- Done ---


Actual result:
--------------
Same test executed on XFS:

*** Testing stat() on file after data is written in it ***
bool(true)
bool(true)
Error: stat1 is not lesser than stat2 at key value: 12
Error: stat1 is not lesser than stat2 at key value: blocks

 Dumping stat array 1...
...

  ["size"]=>
  int(0)
...
  ["blocks"]=>
  int(0)

 Dumping stat array 2...
...
  ["size"]=>
  int(45056)
...
  ["blocks"]=>
  int(0)



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=64060&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.