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 2019/10/28 01:03:40 UTC

[maven-surefire] branch master updated: [SUREFIRE-1704] [JDK 11 Alpine Linux] long etime within hours has format 2h01 on busybox

This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/master by this push:
     new 0595e4e  [SUREFIRE-1704] [JDK 11 Alpine Linux] long etime within hours has format 2h01 on busybox
0595e4e is described below

commit 0595e4eeddf900ba2918c8761942fe699327b651
Author: tibordigana <ti...@apache.org>
AuthorDate: Fri Oct 25 01:05:16 2019 +0200

    [SUREFIRE-1704] [JDK 11 Alpine Linux] long etime within hours has format 2h01 on busybox
---
 .../apache/maven/surefire/booter/PpidChecker.java  | 25 ++++++++++++++++++++++
 .../maven/surefire/booter/PpidCheckerTest.java     | 15 +++++++++++++
 2 files changed, 40 insertions(+)

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 e523bea..4a89b59 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
@@ -76,6 +76,8 @@ final class PpidChecker
      */
     static final Pattern UNIX_CMD_OUT_PATTERN = compile( "^(((\\d+)-)?(\\d{1,2}):)?(\\d{1,2}):(\\d{1,2})\\s+(\\d+)$" );
 
+    static final Pattern BUSYBOX_CMD_OUT_PATTERN = compile( "^(\\d+)[hH](\\d{1,2})\\s+(\\d+)$" );
+
     private final String ppid;
 
     private volatile ProcessInfo parentProcessInfo;
@@ -174,6 +176,12 @@ final class PpidChecker
                                                  + fromSeconds( matcher );
                         return unixProcessInfo( ppid, pidUptime );
                     }
+                    matcher = BUSYBOX_CMD_OUT_PATTERN.matcher( line );
+                    if ( matcher.matches() && ppid.equals( fromBusyboxPID( matcher ) ) )
+                    {
+                        long pidUptime = fromBusyboxHours( matcher ) + fromBusyboxMinutes( matcher );
+                        return unixProcessInfo( ppid, pidUptime );
+                    }
                 }
                 return previousOutputLine;
             }
@@ -306,6 +314,23 @@ final class PpidChecker
         return matcher.group( 7 );
     }
 
+    static long fromBusyboxHours( Matcher matcher )
+    {
+        String s = matcher.group( 1 );
+        return s == null ? 0L : HOURS.toSeconds( parseLong( s ) );
+    }
+
+    static long fromBusyboxMinutes( Matcher matcher )
+    {
+        String s = matcher.group( 2 );
+        return s == null ? 0L : MINUTES.toSeconds( parseLong( s ) );
+    }
+
+    static String fromBusyboxPID( Matcher matcher )
+    {
+        return matcher.group( 3 );
+    }
+
     private static void checkValid( Scanner scanner )
             throws IOException
     {
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 2801ffd..cbe1ce3 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
@@ -231,6 +231,21 @@ public class PpidCheckerTest
     }
 
     @Test
+    public void shouldParseBusyboxHoursEtime()
+    {
+        Matcher m = PpidChecker.BUSYBOX_CMD_OUT_PATTERN.matcher( "38 1234567890" );
+        assertThat( m.matches() )
+                .isFalse();
+
+        m = PpidChecker.BUSYBOX_CMD_OUT_PATTERN.matcher( "05h38 1234567890" );
+        assertThat( m.matches() )
+                .isTrue();
+        assertThat( PpidChecker.fromBusyboxHours( m ) ).isEqualTo( 3600 * 5L );
+        assertThat( PpidChecker.fromBusyboxMinutes( m ) ).isEqualTo( 60 * 38L );
+        assertThat( PpidChecker.fromBusyboxPID( m ) ).isEqualTo( "1234567890" );
+    }
+
+    @Test
     public void shouldHaveSystemPathToWmicOnWindows() throws Exception
     {
         assumeTrue( IS_OS_WINDOWS );