[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit c546235573817a32155b0413029b4d0a8b1f80d6
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 Jenkinsfile|  2 +-
 .../apache/maven/surefire/booter/PpidChecker.java  | 74 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 3 files changed, 53 insertions(+), 29 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index e8e2179..5df67a0 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -32,7 +32,7 @@ properties(
 
 final def oses = ['linux', 'windows']
 final def mavens = env.BRANCH_NAME == 'master' ? ['3.2.x', '3.3.x', '3.5.x'] : 
['3.5.x']
-final def jdks = env.BRANCH_NAME == 'master' ? [7, 8, 9, 10] : [7, 10]
+final def jdks = [7, 8, 9, 10]
 
 final def options = ['-e', '-V', '-B', '-nsu', '-P', 'run-its']
 final def goals = ['clean', 'install', 'jacoco:report']
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 32e3ad7..b480441 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
@@ -22,13 +22,15 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +41,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +54,12 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT =
+IS_OS_WINDOWS ? createWindowsCreationDateFormat() : null;
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+  

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 0831fcfc4e65503dda49e2c6b48192d16148b23c
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 Jenkinsfile|  2 +-
 .../apache/maven/surefire/booter/PpidChecker.java  | 74 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 3 files changed, 53 insertions(+), 29 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index e8e2179..5792b1b 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -32,7 +32,7 @@ properties(
 
 final def oses = ['linux', 'windows']
 final def mavens = env.BRANCH_NAME == 'master' ? ['3.2.x', '3.3.x', '3.5.x'] : 
['3.5.x']
-final def jdks = env.BRANCH_NAME == 'master' ? [7, 8, 9, 10] : [7, 10]
+final def jdks = env.BRANCH_NAME == [7, 8, 9, 10]
 
 final def options = ['-e', '-V', '-B', '-nsu', '-P', 'run-its']
 final def goals = ['clean', 'install', 'jacoco:report']
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 32e3ad7..b480441 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
@@ -22,13 +22,15 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +41,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +54,12 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT =
+IS_OS_WINDOWS ? createWindowsCreationDateFormat() : null;
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
- 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 6f12946081b2963e6078d79adaced6dc6b17f35f
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 74 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 2 files changed, 52 insertions(+), 28 deletions(-)

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 32e3ad7..b480441 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
@@ -22,13 +22,15 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +41,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +54,12 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT =
+IS_OS_WINDOWS ? createWindowsCreationDateFormat() : null;
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit dbe936285d06863f5b5218457e5920b198f28905
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 73 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 2 files changed, 51 insertions(+), 28 deletions(-)

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 32e3ad7..97ca955 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
@@ -22,13 +22,15 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +41,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +54,11 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT = 
createWindowsCreationDateFormat();
 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";
@@ -151,7 +160,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +177,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 
WMIC_CREATION_DATE_TIMESTAMP_LENGTH );
+ 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit b67ce44f245e0418268c8d37ef4d807d28c520be
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 74 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 2 files changed, 52 insertions(+), 28 deletions(-)

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 32e3ad7..491a786 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
@@ -22,13 +22,16 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +42,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +55,11 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT = 
createWindowsCreationDateFormat();
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 8d04fd3601f6e42a1b9d79ea07346661f52e0f04
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 67 ++
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 2 files changed, 45 insertions(+), 28 deletions(-)

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 32e3ad7..ec8da79 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
@@ -22,13 +22,16 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +42,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +55,11 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT = 
createWindowsCreationDateFormat();
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 0919299a4031a2c5a34975a8fef14378289832e7
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 67 ++
 .../apache/maven/surefire/booter/ProcessInfo.java  |  6 +-
 2 files changed, 45 insertions(+), 28 deletions(-)

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 32e3ad7..03c5dad 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
@@ -22,13 +22,16 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +42,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +55,11 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT = 
createWindowsCreationDateFormat();
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 806044ec7539138ddf43b5a21912bd3738df2ef2
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 67 ++
 .../apache/maven/surefire/booter/ProcessInfo.java  |  2 +-
 2 files changed, 44 insertions(+), 25 deletions(-)

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 32e3ad7..03c5dad 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
@@ -22,13 +22,16 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
+import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +42,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +55,11 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT = 
createWindowsCreationDateFormat();
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
-{
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 611505db1dfd6b046d98ffa0340b55bb6a74a633
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 60 +-
 .../apache/maven/surefire/booter/ProcessInfo.java  |  2 +-
 2 files changed, 37 insertions(+), 25 deletions(-)

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 32e3ad7..5ba0119 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
@@ -22,13 +22,15 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
-import java.util.StringTokenizer;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +41,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +54,12 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_VALUE_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT
+= new SimpleDateFormat( "MMddHHmmss'.'SSS", Locale.ROOT );
 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";
@@ -151,7 +161,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,31 +178,36 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
-if ( !previousProcessInfo.isValid() )
+if ( !previousProcessInfo.isValid() && !line.isEmpty() )
 {
-StringTokenizer args = new StringTokenizer( line );
-if ( args.countTokens() == 1 )
+if ( hasHeader )
 {
-if ( hasHeader )
+// now the line is CreationDate, e.g. 
20180406142327.741074+120
+if ( line.length() != WMIC_CREATION_DATE_VALUE_LENGTH )
 {
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
-}
-else
-{
-hasHeader = WMIC_CREATION_DATE.equals( 
args.nextToken() );
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ line );
 }
+String startTimestamp = line.substring( 0, 

[maven-surefire] 01/01: [SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes

2018-04-08 Thread tibordigana
This is an automated email from the ASF dual-hosted git repository.

tibordigana pushed a commit to branch 1512
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git

commit 3c472ff6e1ca4fef9e3cf2beda35734d00af510b
Author: Tibor17 
AuthorDate: Sun Apr 8 12:24:39 2018 +0200

[SUREFIRE-1512] ProcessInfo for Windows is prone to timezone offset changes
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 47 +++---
 .../apache/maven/surefire/booter/ProcessInfo.java  |  2 +-
 2 files changed, 33 insertions(+), 16 deletions(-)

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 32e3ad7..d56a82a 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
@@ -22,6 +22,8 @@ package org.apache.maven.surefire.booter;
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.Locale;
 import java.util.Queue;
 import java.util.Scanner;
 import java.util.StringTokenizer;
@@ -29,6 +31,7 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.Integer.parseInt;
 import static java.lang.Long.parseLong;
 import static java.util.concurrent.TimeUnit.DAYS;
 import static java.util.concurrent.TimeUnit.HOURS;
@@ -39,6 +42,8 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_HP_UX;
 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.unixProcessInfo;
+import static org.apache.maven.surefire.booter.ProcessInfo.windowsProcessInfo;
 import static org.apache.maven.surefire.booter.ProcessInfo.ERR_PROCESS_INFO;
 import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
 
@@ -50,6 +55,12 @@ import static 
org.apache.maven.surefire.booter.ProcessInfo.INVALID_PROCESS_INFO;
  */
 final class PpidChecker
 {
+private static final int MINUTES_TO_MILLIS = 60 * 1000;
+// 25 chars 
https://superuser.com/questions/937380/get-creation-time-of-file-in-milliseconds/937401#937401
+private static final int WMIC_CREATION_DATE_FORMAT_LENGTH = 25;
+private static final int WMIC_CREATION_DATE_TIMESTAMP_LENGTH = 18;
+private static final SimpleDateFormat WMIC_CREATION_DATE_FORMAT
+= new SimpleDateFormat( "MMddHHmmss'.'SSS", Locale.ROOT );
 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";
@@ -151,7 +162,7 @@ final class PpidChecker
  + fromHours( matcher )
  + fromMinutes( matcher )
  + fromSeconds( matcher );
-return ProcessInfo.unixProcessInfo( pluginPid, 
pidUptime );
+return unixProcessInfo( pluginPid, pidUptime );
 }
 }
 return previousProcessInfo;
@@ -168,7 +179,7 @@ final class PpidChecker
 private boolean hasHeader;
 
 @Override
-ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo )
+ProcessInfo consumeLine( String line, ProcessInfo 
previousProcessInfo ) throws Exception
 {
 if ( !previousProcessInfo.isValid() )
 {
@@ -177,8 +188,18 @@ final class PpidChecker
 {
 if ( hasHeader )
 {
-String startTimestamp = args.nextToken();
-return ProcessInfo.windowsProcessInfo( pluginPid, 
startTimestamp );
+String creationDate = args.nextToken();
+if ( creationDate.length() != 
WMIC_CREATION_DATE_FORMAT_LENGTH )
+{
+throw new IllegalStateException( "WMIC 
CreationDate should have 25 characters "
++ creationDate );
+}
+String startTimestamp = creationDate.substring( 0, 
WMIC_CREATION_DATE_TIMESTAMP_LENGTH );
+int indexOfTimeZone = 
WMIC_CREATION_DATE_FORMAT_LENGTH - 4;
+long startTimestampMillisUTC =
+WMIC_CREATION_DATE_FORMAT.parse( 
startTimestamp ).getTime()
+