summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-07-09 10:43:20 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-07-10 10:08:12 +0200
commit68293b19d4c07890ef43d59cd24755c5f182ed48 (patch)
tree5a49f93e744299c1b9a525725af274a48cade97f
parentb291c926937fdcf3635a8aa3b83571f591c8c022 (diff)
downloadphp-git-68293b19d4c07890ef43d59cd24755c5f182ed48.tar.gz
Enable symlink_link_linkinfo_is_link_* tests on Windows
We mark symlink_link_linkinfo_is_link_error2.phpt as XFAIL on Windows ZTS. Several Windows API file system functions ignore trailing spaces in absolute filenames after the final directory separator, which causes `link(' ', $link)` to actually call `CreateHardLink()` which then fails, because linking folders is not supported. However, with NTS builds (as well as on other systems), the $target is found to not exist, so the function fails without actually attempting to create the link. This needs further investigation.
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_basic1.phpt19
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_basic2.phpt16
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt3
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt4
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt25
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation2.phpt6
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt5
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation4.phpt6
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation5.phpt5
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation6.phpt3
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation7.phpt11
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation8.phpt7
-rw-r--r--ext/standard/tests/file/symlink_link_linkinfo_is_link_variation9.phpt32
13 files changed, 74 insertions, 68 deletions
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic1.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic1.phpt
index 89d6478d73..0c4733f7ac 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic1.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic1.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions: basic functionality - link to files
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -58,7 +59,8 @@ foreach($files as $file) {
// create soft link
var_dump( symlink($file, $sym_linkname) );
// checking information of link with linkinfo()
- var_dump( linkinfo($sym_linkname) );
+ $linkinfo = linkinfo($sym_linkname);
+ var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// checking if given file is soft link
var_dump( is_link($sym_linkname) );
// clear the cache
@@ -69,7 +71,8 @@ foreach($files as $file) {
// creating hard link
var_dump( link($file, $linkname) );
// checking information of link with linkinfo()
- var_dump( linkinfo($linkname) );
+ $linkinfo = linkinfo($sym_linkname);
+ var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// checking if given link is soft link; expected: false
var_dump( is_link($linkname) );
// clear the cache
@@ -95,20 +98,20 @@ rmdir($dirname);
-- Iteration 1 --
-- Testing on soft links --
bool(true)
-int(%d)
+bool(true)
bool(true)
-- Testing on hard links --
bool(true)
-int(%d)
+bool(true)
bool(false)
-- Iteration 2 --
-- Testing on soft links --
bool(true)
-int(%d)
+bool(true)
bool(true)
-- Testing on hard links --
bool(true)
-int(%d)
+bool(true)
bool(false)
Done
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic2.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic2.phpt
index fad0987540..cfc2cddd7d 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic2.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_basic2.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions: basic functionality - link to dirs
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -44,7 +45,8 @@ echo "\n-- Testing on soft links --\n";
// creating soft link to $dirname
var_dump( symlink("$file_path/$dirname", $sym_linkname) ); // this works, expected true
// gets information about soft link created to directory; expected: true
-var_dump( linkinfo($sym_linkname) );
+$linkinfo = linkinfo($sym_linkname);
+var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// checks if link created is soft link; expected: true
var_dump( is_link($sym_linkname) );
// clear the cache
@@ -60,7 +62,11 @@ var_dump( is_link($linkname) ); // link doesn't exists as not created, expected
clearstatcache();
// deleting the links
-unlink($sym_linkname);
+if (PHP_OS_FAMILY === 'Windows') {
+ rmdir($sym_linkname);
+} else {
+ unlink($sym_linkname);
+}
echo "Done\n";
?>
@@ -76,7 +82,7 @@ rmdir($dirname);
-- Testing on soft links --
bool(true)
-int(%d)
+bool(true)
bool(true)
-- Testing on hard links --
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
index ddee40ecdd..917c525f08 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error1.phpt
@@ -2,9 +2,6 @@
Test symlink(), linkinfo(), link() and is_link() functions : error conditions - symlink & linkinfo
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
if (substr(PHP_OS, 0, 3) == 'SUN') {
die('skip Not valid for Sun Solaris');
}
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
index 7e22741aa8..6ace6c5ac4 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_error2.phpt
@@ -2,8 +2,8 @@
Test symlink(), linkinfo(), link() and is_link() functions : error conditions - link & is_link
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows' && PHP_ZTS) {
+ die('xfail different handling of space as filename with ZTS/NTS on Windows');
}
?>
--FILE--
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt
index 4daaba4aa9..98f4f19bbb 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link name stored in an array/object
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -47,7 +48,8 @@ echo "\n-- Working with soft links --\n";
// creating soft link
var_dump( symlink($filename, $obj->linkname) );
// check if the link exists
-var_dump( linkinfo($obj->linkname) );
+$linkinfo = linkinfo($obj->linkname);
+var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link
var_dump( is_link($obj->linkname) );
// delete the link created
@@ -60,7 +62,8 @@ echo "\n-- Working with hard links --\n";
// creating hard link
var_dump( link($filename, $obj->linkname) );
// check if the link exists
-var_dump( linkinfo($obj->linkname) );
+$linkinfo = linkinfo($obj->linkname);
+var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link; expected: false as the link is a hardlink
var_dump( is_link($obj->linkname) );
// delete the link created
@@ -77,7 +80,8 @@ echo "\n-- Working with soft links --\n";
// creating soft link
var_dump( symlink($filename, $link_arr[0]) );
// check if the link exist
-var_dump( linkinfo($link_arr[0]) );
+$linkinfo = linkinfo($link_arr[0]);
+var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link
var_dump( is_link($link_arr[0]) );
// delete the link created
@@ -90,7 +94,8 @@ echo "\n-- Working with hard links --\n";
// creating hard link
var_dump( link($filename, $link_arr[0]) );
// check if the link exist
-var_dump( linkinfo($link_arr[0]) );
+$linkinfo = linkinfo($link_arr[0]);
+var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link; expected: false as this is a hardlink
var_dump( is_link($link_arr[0]) );
// delete the links created
@@ -114,23 +119,23 @@ rmdir($dirname);
-- Working with soft links --
bool(true)
-int(%d)
+bool(true)
bool(true)
-- Working with hard links --
bool(true)
-int(%d)
+bool(true)
bool(false)
*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members of an array ***
-- Working with soft links --
bool(true)
-int(%d)
+bool(true)
bool(true)
-- Working with hard links --
bool(true)
-int(%d)
+bool(true)
bool(false)
Done
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation2.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation2.phpt
index c88e426e6c..2c3017628c 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation2.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation2.phpt
@@ -1,11 +1,5 @@
--TEST--
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - hardlink to non-existent file
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
--FILE--
<?php
/* Prototype: bool symlink ( string $target, string $link );
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt
index 8207b698f3..a6b2c7e60e 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation3.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - access/update file through softlink
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation4.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation4.phpt
index 5bcf472447..fa39a9bf6d 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation4.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation4.phpt
@@ -1,11 +1,5 @@
--TEST--
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - access/update file through hard link
---SKIPIF--
-<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
-}
-?>
--FILE--
<?php
/* Prototype: bool symlink ( string $target, string $link );
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation5.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation5.phpt
index fe6edcdd90..c96471e84b 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation5.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation5.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - work on deleted link
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation6.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation6.phpt
index 8095972b73..6d70cbd790 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation6.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation6.phpt
@@ -2,9 +2,6 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link & dir perms.
--SKIPIF--
<?php
-if ( substr(PHP_OS, 0, 3) == 'WIN' ) {
- die('skip no symlinks on Windows');
-}
require __DIR__ . '/../skipif_root.inc';
?>
--FILE--
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation7.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation7.phpt
index ee49aaa5c9..a4d10769ae 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation7.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation7.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - try link to self
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -51,7 +52,11 @@ var_dump( symlink($dirname, $linkname) );
// create another link to $dirname
var_dump( symlink($linkname, $linkname) );
// delete link
-unlink($linkname);
+if (PHP_OS_FAMILY === 'Windows') {
+ rmdir($linkname);
+} else {
+ unlink($linkname);
+}
echo "\n*** Create hard link to file and then to itself ***\n";
// create hard link to $filename
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation8.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation8.phpt
index 883ea59884..4544c618e2 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation8.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation8.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - try link with same name in diff. dir
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -77,7 +78,7 @@ bool(true)
*** Create soft link in different directory with same filename ***
-Warning: symlink(): File exists in %s on line %d
+Warning: symlink(): %rFile exists|Permission denied%r in %s on line %d
bool(false)
bool(true)
Done
diff --git a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation9.phpt b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation9.phpt
index 04daa591b0..c5e1c4805f 100644
--- a/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation9.phpt
+++ b/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation9.phpt
@@ -2,8 +2,9 @@
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link & lstat[dev] value
--SKIPIF--
<?php
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- die('skip no symlinks on Windows');
+if (PHP_OS_FAMILY === 'Windows') {
+ require_once __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
@@ -45,8 +46,8 @@ var_dump( symlink($filename, $soft_link) );
// confirming that linkinfo() = lstat['dev'] , this should always match
$linkinfo = linkinfo($soft_link);
$s1 = lstat($soft_link);
-echo "linkinfo() returns : $linkinfo\n";
-echo "lstat() returns lstat['dev'] as $s1[0]\n";
+echo "linkinfo() returns integer !== -1: ";
+var_dump(is_int($linkinfo) && $linkinfo !== -1);
if( $s1[0] == $linkinfo )
echo "\nlinkinfo() value matches lstat['dev']\n";
else
@@ -60,8 +61,8 @@ var_dump( link($filename, $hard_link) );
// confirming that linkinfo() = lstat['dev'] , this should always match
$linkinfo = linkinfo($hard_link);
$s1 = lstat($hard_link);
-echo "linkinfo() returns : $linkinfo\n";
-echo "lstat() returns lstat['dev'] as $s1[0]\n";
+echo "linkinfo() returns integer !== -1: ";
+var_dump(is_int($linkinfo) && $linkinfo !== -1);
if( $s1[0] == $linkinfo )
echo "\nlinkinfo() value matches lstat['dev']\n";
else
@@ -77,15 +78,19 @@ var_dump( symlink($dirname, $soft_link) );
// confirming that linkinfo() = lstat['dev'], this should always match
$linkinfo = linkinfo($soft_link);
$s1 = lstat($soft_link);
-echo "linkinfo() returns : $linkinfo\n";
-echo "lstat() returns lstat['dev'] as $s1[0]\n";
+echo "linkinfo() returns integer !== -1: ";
+var_dump(is_int($linkinfo) && $linkinfo !== -1);
if( $s1[0] == $linkinfo )
echo "\nlinkinfo() value matches lstat['dev']\n";
else
echo "\nWarning: linkinfo() value doesnt match lstat['dev']\n";
// delete link
-unlink($soft_link);
+if (PHP_OS_FAMILY === 'Windows') {
+ rmdir($soft_link);
+} else {
+ unlink($soft_link);
+}
echo "Done\n";
?>
@@ -100,22 +105,19 @@ rmdir($dirname);
--EXPECTF--
*** Checking lstat() on soft link ***
bool(true)
-linkinfo() returns : %d
-lstat() returns lstat['dev'] as %d
+linkinfo() returns integer !== -1: bool(true)
linkinfo() value matches lstat['dev']
*** Checking lstat() on hard link ***
bool(true)
-linkinfo() returns : %d
-lstat() returns lstat['dev'] as %d
+linkinfo() returns integer !== -1: bool(true)
linkinfo() value matches lstat['dev']
*** Checking lstat() on a soft link to directory ***
bool(true)
-linkinfo() returns : %d
-lstat() returns lstat['dev'] as %d
+linkinfo() returns integer !== -1: bool(true)
linkinfo() value matches lstat['dev']
Done