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/24 21:33:37 UTC
[maven-surefire] branch docker-alpine updated: [JDK 11 Alpine
Linux] Surefire handled random order of pid and /procps does not filter pid
on busybox distributions
This is an automated email from the ASF dual-hosted git repository.
tibordigana pushed a commit to branch docker-alpine
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
The following commit(s) were added to refs/heads/docker-alpine by this push:
new dc1341c [JDK 11 Alpine Linux] Surefire handled random order of pid and /procps does not filter pid on busybox distributions
dc1341c is described below
commit dc1341c81cadcc21a5c77ce67b03868b70149a33
Author: tibordigana <ti...@apache.org>
AuthorDate: Thu Oct 24 23:33:25 2019 +0200
[JDK 11 Alpine Linux] Surefire handled random order of pid and /procps does not filter pid on busybox distributions
---
...ooterDeserializerProviderConfigurationTest.java | 2 +-
.../maven/surefire/booter/BooterDeserializer.java | 4 +--
.../apache/maven/surefire/booter/ForkedBooter.java | 2 +-
.../apache/maven/surefire/booter/PpidChecker.java | 15 +++++++----
.../apache/maven/surefire/booter/ProcessInfo.java | 10 +++----
.../maven/surefire/booter/PpidCheckerTest.java | 31 +++++++++++-----------
6 files changed, 35 insertions(+), 29 deletions(-)
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
index 3869911..4cdff1b 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/BooterDeserializerProviderConfigurationTest.java
@@ -244,7 +244,7 @@ public class BooterDeserializerProviderConfigurationTest
final File propsTest = booterSerializer.serialize( props, booterConfiguration, testProviderConfiguration, test,
readTestsFromInStream, 51L, 1 );
BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
- assertEquals( 51L, (Object) booterDeserializer.getPluginPid() );
+ assertEquals( "51", (Object) booterDeserializer.getPluginPid() );
return booterDeserializer.deserialize();
}
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
index 75aad1f..3312df5 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/BooterDeserializer.java
@@ -61,9 +61,9 @@ public class BooterDeserializer
/**
* @return PID of Maven process where plugin is executed; or null if PID could not be determined.
*/
- public Long getPluginPid()
+ public String getPluginPid()
{
- return properties.getLongProperty( PLUGIN_PID );
+ return properties.getProperty( PLUGIN_PID );
}
public ProviderConfiguration deserialize()
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
index 194dc88..93deb20 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ForkedBooter.java
@@ -188,7 +188,7 @@ public final class ForkedBooter
}
}
- private PingScheduler listenToShutdownCommands( Long ppid, ConsoleLogger logger )
+ private PingScheduler listenToShutdownCommands( String ppid, ConsoleLogger logger )
{
PpidChecker ppidChecker = ppid == null ? null : new PpidChecker( ppid );
commandReader.addShutdownListener( createExitHandler( ppidChecker ) );
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 99ca159..475fb71 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
@@ -74,14 +74,14 @@ final class PpidChecker
* The etime is in the form of [[dd-]hh:]mm:ss on Unix like systems.
* See the workaround https://issues.apache.org/jira/browse/SUREFIRE-1451.
*/
- static final Pattern UNIX_CMD_OUT_PATTERN = compile( "^(((\\d+)-)?(\\d{1,2}):)?(\\d{1,2}):(\\d{1,2})$" );
+ static final Pattern UNIX_CMD_OUT_PATTERN = compile( "^(((\\d+)-)?(\\d{1,2}):)?(\\d{1,2}):(\\d{1,2})\\s+(\\d+)$" );
- private final long ppid;
+ private final String ppid;
private volatile ProcessInfo parentProcessInfo;
private volatile boolean stopped;
- PpidChecker( long ppid )
+ PpidChecker( @Nonnull String ppid )
{
this.ppid = ppid;
}
@@ -170,7 +170,7 @@ final class PpidChecker
if ( previousOutputLine.isInvalid() )
{
Matcher matcher = UNIX_CMD_OUT_PATTERN.matcher( line );
- if ( matcher.matches() )
+ if ( matcher.matches() && ppid.equals( fromPID( matcher ) ) )
{
long pidUptime = fromDays( matcher )
+ fromHours( matcher )
@@ -182,7 +182,7 @@ final class PpidChecker
return previousOutputLine;
}
};
- String cmd = unixPathToPS() + " -o etime= " + ( IS_OS_LINUX ? "" : "-p " ) + ppid;
+ String cmd = unixPathToPS() + " -o etime,pid " + ( IS_OS_LINUX ? "" : "-p " ) + ppid;
return reader.execute( "/bin/sh", "-c", cmd );
}
@@ -305,6 +305,11 @@ final class PpidChecker
return s == null ? 0L : parseLong( s );
}
+ static String fromPID( Matcher matcher )
+ {
+ return matcher.group( 7 );
+ }
+
private static void checkValid( Scanner scanner )
throws IOException
{
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProcessInfo.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProcessInfo.java
index 77d7e8d..c7e22de 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProcessInfo.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ProcessInfo.java
@@ -42,20 +42,20 @@ final class ProcessInfo
* <br>
* <pre>/bin/ps -o etime= -p 123</pre>
*/
- static @Nonnull ProcessInfo unixProcessInfo( long pid, long etime )
+ static @Nonnull ProcessInfo unixProcessInfo( String pid, long etime )
{
return new ProcessInfo( pid, etime );
}
- static @Nonnull ProcessInfo windowsProcessInfo( long pid, long startTimestamp )
+ static @Nonnull ProcessInfo windowsProcessInfo( String pid, long startTimestamp )
{
return new ProcessInfo( pid, startTimestamp );
}
- private final Long pid;
+ private final String pid;
private final Comparable time;
- private ProcessInfo( Long pid, Comparable time )
+ private ProcessInfo( String pid, Comparable time )
{
this.pid = pid;
this.time = time;
@@ -76,7 +76,7 @@ final class ProcessInfo
return this == ERR_PROCESS_INFO;
}
- long getPID()
+ String getPID()
{
checkValid();
return pid;
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 ccccd61..2801ffd 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
@@ -65,7 +65,7 @@ public class PpidCheckerTest
@Test
public void shouldHavePidAtBegin()
{
- long expectedPid = Long.parseLong( ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim() );
+ String expectedPid = ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim();
PpidChecker checker = new PpidChecker( expectedPid );
ProcessInfo processInfo = IS_OS_UNIX ? checker.unix() : checker.windows();
@@ -89,7 +89,7 @@ public class PpidCheckerTest
@Test
public void shouldHavePid() throws Exception
{
- long expectedPid = Long.parseLong( ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim() );
+ String expectedPid = ManagementFactory.getRuntimeMXBean().getName().split( "@" )[0].trim();
System.out.println( "java version " + System.getProperty( "java.version" ) + " expectedPid=" + expectedPid );
PpidChecker checker = new PpidChecker( expectedPid );
@@ -134,7 +134,7 @@ public class PpidCheckerTest
@Test
public void shouldBeStopped()
{
- PpidChecker checker = new PpidChecker( 0L );
+ PpidChecker checker = new PpidChecker( "0" );
checker.stop();
assertThat( checker.canUse() )
@@ -151,9 +151,7 @@ public class PpidCheckerTest
@Test
public void shouldNotFindSuchPID()
{
- long ppid = 1_000_000L;
-
- PpidChecker checker = new PpidChecker( ppid );
+ PpidChecker checker = new PpidChecker( "1000000" );
setInternalState( checker, "parentProcessInfo", ProcessInfo.ERR_PROCESS_INFO );
assertThat( checker.canUse() )
@@ -170,9 +168,7 @@ public class PpidCheckerTest
@Test
public void shouldNotBeAlive()
{
- long ppid = 1_000_000L;
-
- PpidChecker checker = new PpidChecker( ppid );
+ PpidChecker checker = new PpidChecker( "1000000" );
assertThat( checker.canUse() )
.isTrue();
@@ -184,49 +180,54 @@ public class PpidCheckerTest
@Test
public void shouldParseEtime()
{
- Matcher m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "38" );
+ Matcher m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "38 1234567890" );
assertThat( m.matches() )
.isFalse();
- m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "05:38" );
+ m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "05:38 1234567890" );
assertThat( m.matches() )
.isTrue();
assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 0L );
assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
+ assertThat( PpidChecker.fromPID( m ) ).isEqualTo( "1234567890" );
- m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "00:05:38" );
+ m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "00:05:38 1234567890" );
assertThat( m.matches() )
.isTrue();
assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 0L );
assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
+ assertThat( PpidChecker.fromPID( m ) ).isEqualTo( "1234567890" );
- m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "01:05:38" );
+ m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "01:05:38 1234567890" );
assertThat( m.matches() )
.isTrue();
assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 0L );
assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
+ assertThat( PpidChecker.fromPID( m ) ).isEqualTo( "1234567890" );
- m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-01:05:38" );
+ m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-01:05:38 1234567890" );
assertThat( m.matches() )
.isTrue();
assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 2 * 24 * 3600L );
assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 38L );
+ assertThat( PpidChecker.fromPID( m ) ).isEqualTo( "1234567890" );
- m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-1:5:3" );
+ m = PpidChecker.UNIX_CMD_OUT_PATTERN.matcher( "02-1:5:3 1234567890" );
assertThat( m.matches() )
.isTrue();
assertThat( PpidChecker.fromDays( m ) ).isEqualTo( 2 * 24 * 3600L );
assertThat( PpidChecker.fromHours( m ) ).isEqualTo( 3600L );
assertThat( PpidChecker.fromMinutes( m ) ).isEqualTo( 300L );
assertThat( PpidChecker.fromSeconds( m ) ).isEqualTo( 3L );
+ assertThat( PpidChecker.fromPID( m ) ).isEqualTo( "1234567890" );
}
@Test