You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2018/03/03 05:55:35 UTC

maven-surefire git commit: [SUREFIRE-1475] PpidChecker.windows() assumes wmic is on the path

Repository: maven-surefire
Updated Branches:
  refs/heads/SUREFIRE-1475 [created] aee2bb45f


[SUREFIRE-1475] PpidChecker.windows() assumes wmic is on the path


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/aee2bb45
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/aee2bb45
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/aee2bb45

Branch: refs/heads/SUREFIRE-1475
Commit: aee2bb45f312d5f1a130bc668e92b342022f101d
Parents: 3ddcd1f
Author: Tibor17 <ti...@apache.org>
Authored: Sat Mar 3 06:55:12 2018 +0100
Committer: Tibor17 <ti...@apache.org>
Committed: Sat Mar 3 06:55:12 2018 +0100

----------------------------------------------------------------------
 .../apache/maven/surefire/booter/PpidChecker.java | 14 +++++++++++++-
 .../maven/surefire/booter/PpidCheckerTest.java    | 18 ++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/aee2bb45/surefire-booter/src/main/java/org/apache/maven/surefire/booter/PpidChecker.java
----------------------------------------------------------------------
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/PpidChecker.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/PpidChecker.java
index e5d39eb..462eacc 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/PpidChecker.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/PpidChecker.java
@@ -35,6 +35,7 @@ import static java.util.concurrent.TimeUnit.HOURS;
 import static java.util.concurrent.TimeUnit.MINUTES;
 import static java.util.regex.Pattern.compile;
 import static org.apache.commons.io.IOUtils.closeQuietly;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_UNIX;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
@@ -49,6 +50,10 @@ import static org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 final class PpidChecker
 {
     private static final String WMIC_CREATION_DATE = "CreationDate";
+    private static final String WINDOWS_SYSTEM_ROOT_ENV = "SystemRoot";
+    private static final String RELATIVE_PATH_TO_WMIC = "System32\\Wbem";
+    private static final String SYSTEM_PATH_TO_WMIC =
+            "%" + WINDOWS_SYSTEM_ROOT_ENV + "%\\" + RELATIVE_PATH_TO_WMIC + "\\";
 
     private final Queue<Process> destroyableCommands = new ConcurrentLinkedQueue<Process>();
 
@@ -184,8 +189,9 @@ final class PpidChecker
             }
         };
         String pid = String.valueOf( pluginPid );
+        String wmicPath = hasWmicStandardSystemPath() ? SYSTEM_PATH_TO_WMIC : "";
         return reader.execute( "CMD", "/A", "/X", "/C",
-                                     "wmic process where (ProcessId=" + pid + ") get " + WMIC_CREATION_DATE
+                wmicPath + "wmic process where (ProcessId=" + pid + ") get " + WMIC_CREATION_DATE
         );
     }
 
@@ -223,6 +229,12 @@ final class PpidChecker
         return new File( "/bin/ps" ).canExecute();
     }
 
+    private static boolean hasWmicStandardSystemPath()
+    {
+        String systemRoot = System.getenv( WINDOWS_SYSTEM_ROOT_ENV );
+        return isNotBlank( systemRoot ) && new File( systemRoot, RELATIVE_PATH_TO_WMIC + "\\wmic.exe" ).isFile();
+    }
+
     static long fromDays( Matcher matcher )
     {
         String s = matcher.group( 3 );

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/aee2bb45/surefire-booter/src/test/java/org/apache/maven/surefire/booter/PpidCheckerTest.java
----------------------------------------------------------------------
diff --git a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/PpidCheckerTest.java b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/PpidCheckerTest.java
index a58614d..84f0837 100644
--- a/surefire-booter/src/test/java/org/apache/maven/surefire/booter/PpidCheckerTest.java
+++ b/surefire-booter/src/test/java/org/apache/maven/surefire/booter/PpidCheckerTest.java
@@ -21,13 +21,19 @@ package org.apache.maven.surefire.booter;
 
 import org.junit.Test;
 
+import java.io.File;
 import java.lang.management.ManagementFactory;
 import java.util.regex.Matcher;
 
 import static org.apache.commons.lang3.SystemUtils.IS_OS_UNIX;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
 import static org.fest.assertions.Assertions.assertThat;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assume.assumeThat;
 import static org.junit.Assume.assumeTrue;
+import static org.powermock.reflect.Whitebox.invokeMethod;
 
 /**
  * Testing {@link PpidChecker} on a platform.
@@ -153,4 +159,16 @@ public class PpidCheckerTest
         assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
         assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 3L );
     }
+
+    @Test
+    public void shouldHaveSystemPathToWmicOnWindows() throws Exception
+    {
+        assumeTrue( IS_OS_WINDOWS );
+        assumeThat( System.getenv( "SystemRoot" ), is( notNullValue() ) );
+        assumeThat( System.getenv( "SystemRoot" ), is( not( "" ) ) );
+        assumeTrue( new File( System.getenv( "SystemRoot" ), "System32\\Wbem" ).isDirectory() );
+        assumeTrue( new File( System.getenv( "SystemRoot" ), "System32\\Wbem\\wmic.exe" ).isFile() );
+        assertThat( (Boolean) invokeMethod( PpidChecker.class, "hasWmicStandardSystemPath" ) ).isTrue();
+        assertThat( new File( System.getenv( "SystemRoot" ), "System32\\Wbem\\wmic.exe" ) ).isFile();
+    }
 }