summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Hoersken <info@marc-hoersken.de>2020-04-05 19:18:09 +0200
committerMarc Hoersken <info@marc-hoersken.de>2020-04-11 23:44:52 +0200
commit3f60a9e995c851a1dff2439cb16407d86cde7754 (patch)
treec1c50276226963c95764ed1ed9a795b26b98b708
parent6d13ef532598e4fc54dbf03c1373b0a3c4c597f5 (diff)
downloadcurl-3f60a9e995c851a1dff2439cb16407d86cde7754.tar.gz
tests: fix conflict between Cygwin/msys and Windows PIDs
Add 65536 to Windows PIDs to allow Windows specific treatment by having disjunct ranges for Cygwin/msys and Windows PIDs. See also: - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵ h=b5e1003722cb14235c4f166be72c09acdffc62ea - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵ h=448cf5aa4b429d5a9cebf92a0da4ab4b5b6d23fe Replaces #5178 Closes #5188
-rwxr-xr-xtests/dictserver.py11
-rw-r--r--tests/ftp.pm72
-rwxr-xr-xtests/negtelnetserver.py9
-rw-r--r--tests/server/util.c9
-rwxr-xr-xtests/smbserver.py11
5 files changed, 79 insertions, 33 deletions
diff --git a/tests/dictserver.py b/tests/dictserver.py
index 3211318c5..5641692d9 100755
--- a/tests/dictserver.py
+++ b/tests/dictserver.py
@@ -51,8 +51,11 @@ def dictserver(options):
"""
if options.pidfile:
pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
with open(options.pidfile, "w") as f:
- f.write("{0}".format(pid))
+ f.write(str(pid))
local_bind = (options.host, options.port)
log.info("[DICT] Listening on %s", local_bind)
@@ -85,7 +88,11 @@ class DictHandler(socketserver.BaseRequestHandler):
if VERIFIED_REQ in data:
log.debug("[DICT] Received verification request from test "
"framework")
- response_data = VERIFIED_RSP.format(pid=os.getpid())
+ pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
+ response_data = VERIFIED_RSP.format(pid=pid)
else:
log.debug("[DICT] Received normal request")
response_data = "No matches"
diff --git a/tests/ftp.pm b/tests/ftp.pm
index 5e92ce7f9..a29fad14f 100644
--- a/tests/ftp.pm
+++ b/tests/ftp.pm
@@ -42,6 +42,10 @@ use serverhelp qw(
datasockf_pidfilename
);
+use pathhelp qw(
+ os_is_win
+ );
+
#######################################################################
# portable_sleep uses Time::HiRes::sleep if available and falls back
# to the classic approach of using select(undef, undef, undef, ...).
@@ -55,7 +59,7 @@ sub portable_sleep {
if($Time::HiRes::VERSION) {
Time::HiRes::sleep($seconds);
}
- elsif ($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') {
+ elsif (os_is_win()) {
Win32::Sleep($seconds*1000);
}
else {
@@ -91,19 +95,23 @@ sub pidexists {
my $pid = $_[0];
if($pid > 0) {
+ # verify if currently existing Windows process
+ if ($pid > 65536 && os_is_win()) {
+ $pid -= 65536;
+ if($^O ne 'MSWin32') {
+ my $filter = "PID eq $pid";
+ my $result = `tasklist -fi \"$filter\" 2>nul`;
+ if(index($result, "$pid") != -1) {
+ return -$pid;
+ }
+ return 0;
+ }
+ }
+
# verify if currently existing and alive
if(kill(0, $pid)) {
return $pid;
}
-
- # verify if currently existing Windows process
- if($^O eq "msys") {
- my $filter = "PID eq $pid";
- my $result = `tasklist -fi \"$filter\" 2>nul`;
- if(index($result, "$pid") != -1) {
- return -$pid;
- }
- }
}
return 0;
@@ -116,17 +124,21 @@ sub pidterm {
my $pid = $_[0];
if($pid > 0) {
- # signal the process to terminate
- kill("TERM", $pid);
-
# request the process to quit
- if($^O eq "msys") {
- my $filter = "PID eq $pid";
- my $result = `tasklist -fi \"$filter\" 2>nul`;
- if(index($result, "$pid") != -1) {
- system("taskkill -fi \"$filter\" >nul 2>&1");
+ if ($pid > 65536 && os_is_win()) {
+ $pid -= 65536;
+ if($^O ne 'MSWin32') {
+ my $filter = "PID eq $pid";
+ my $result = `tasklist -fi \"$filter\" 2>nul`;
+ if(index($result, "$pid") != -1) {
+ system("taskkill -fi \"$filter\" >nul 2>&1");
+ }
+ return;
}
}
+
+ # signal the process to terminate
+ kill("TERM", $pid);
}
}
@@ -137,19 +149,23 @@ sub pidkill {
my $pid = $_[0];
if($pid > 0) {
- # signal the process to terminate
- kill("KILL", $pid);
-
# request the process to quit
- if($^O eq "msys") {
- my $filter = "PID eq $pid";
- my $result = `tasklist -fi \"$filter\" 2>nul`;
- if(index($result, "$pid") != -1) {
- system("taskkill -f -fi \"$filter\" >nul 2>&1");
- # Windows XP Home compatibility
- system("tskill $pid >nul 2>&1");
+ if ($pid > 65536 && os_is_win()) {
+ $pid -= 65536;
+ if($^O ne 'MSWin32') {
+ my $filter = "PID eq $pid";
+ my $result = `tasklist -fi \"$filter\" 2>nul`;
+ if(index($result, "$pid") != -1) {
+ system("taskkill -f -fi \"$filter\" >nul 2>&1");
+ # Windows XP Home compatibility
+ system("tskill $pid >nul 2>&1");
+ }
+ return;
}
}
+
+ # signal the process to terminate
+ kill("KILL", $pid);
}
}
diff --git a/tests/negtelnetserver.py b/tests/negtelnetserver.py
index 1efc64b56..7171092af 100755
--- a/tests/negtelnetserver.py
+++ b/tests/negtelnetserver.py
@@ -49,6 +49,9 @@ def telnetserver(options):
"""
if options.pidfile:
pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
with open(options.pidfile, "w") as f:
f.write(str(pid))
@@ -86,7 +89,11 @@ class NegotiatingTelnetHandler(socketserver.BaseRequestHandler):
if VERIFIED_REQ.encode('utf-8') in data:
log.debug("Received verification request from test framework")
- response = VERIFIED_RSP.format(pid=os.getpid())
+ pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
+ response = VERIFIED_RSP.format(pid=pid)
response_data = response.encode('utf-8')
else:
log.debug("Received normal request - echoing back")
diff --git a/tests/server/util.c b/tests/server/util.c
index 263f0cece..fa3d45118 100644
--- a/tests/server/util.c
+++ b/tests/server/util.c
@@ -269,6 +269,15 @@ int write_pidfile(const char *filename)
logmsg("Couldn't write pid file: %s %s", filename, strerror(errno));
return 0; /* fail */
}
+#if defined(WIN32) || defined(_WIN32)
+ /* store pid + 65536 to avoid conflict with Cygwin/msys PIDs, see also:
+ * - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
+ * h=b5e1003722cb14235c4f166be72c09acdffc62ea
+ * - https://cygwin.com/git/?p=newlib-cygwin.git;a=commit; ↵
+ * h=448cf5aa4b429d5a9cebf92a0da4ab4b5b6d23fe
+ */
+ pid += 65536;
+#endif
fprintf(pidfile, "%ld\n", pid);
fclose(pidfile);
logmsg("Wrote pid %ld to %s", pid, filename);
diff --git a/tests/smbserver.py b/tests/smbserver.py
index d320fb21e..30caa04b7 100755
--- a/tests/smbserver.py
+++ b/tests/smbserver.py
@@ -61,8 +61,11 @@ def smbserver(options):
"""
if options.pidfile:
pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
with open(options.pidfile, "w") as f:
- f.write("{0}".format(pid))
+ f.write(str(pid))
# Here we write a mini config for the server
smb_config = configparser.ConfigParser()
@@ -267,7 +270,11 @@ class TestSmbServer(imp_smbserver.SMBSERVER):
if requested_filename == VERIFIED_REQ:
log.debug("[SMB] Verifying server is alive")
- contents = VERIFIED_RSP.format(pid=os.getpid()).encode('utf-8')
+ pid = os.getpid()
+ # see tests/server/util.c function write_pidfile
+ if os.name == "nt":
+ pid += 65536
+ contents = VERIFIED_RSP.format(pid=pid).encode('utf-8')
self.write_to_fid(fid, contents)
return fid, filename