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/12/14 20:38:48 UTC

[maven-surefire] branch SUREFIRE-1614 updated (938d422 -> f517d34)

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

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


 discard 938d422  [SUREFIRE-1614] Fix corrupted stream warning
 discard de1c687  [SUREFIRE-1614] Add failing IT
     new f517d34  [SUREFIRE-1614] JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (938d422)
            \
             N -- N -- N   refs/heads/SUREFIRE-1614 (f517d34)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../its/JUnitPlatformStreamCorruptionIT.java       |  5 +-
 .../surefire-1614-stream-corruption/pom.xml        | 56 +++++++++++-----------
 .../test/java/com/example/demo/CustomRunner.java   | 23 +++++----
 .../example/demo/SurefireStreamCorruptionTest.java | 14 +++---
 .../junitplatform/JUnitPlatformProvider.java       | 45 +++++++++--------
 5 files changed, 77 insertions(+), 66 deletions(-)


[maven-surefire] 01/01: [SUREFIRE-1614] JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine

Posted by ti...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f517d349ede0e15229e3c48f45d10dabc72a3fc9
Author: Christian Stein <so...@gmail.com>
AuthorDate: Wed Dec 12 23:02:33 2018 +0100

    [SUREFIRE-1614] JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine
---
 .../its/JUnitPlatformStreamCorruptionIT.java       | 56 +++++++++++++++++++++
 .../surefire-1614-stream-corruption/pom.xml        | 35 +++++++++++++
 .../test/java/com/example/demo/CustomRunner.java   | 22 ++++++++
 .../example/demo/SurefireStreamCorruptionTest.java | 13 +++++
 .../junitplatform/JUnitPlatformProvider.java       | 58 +++++++++++-----------
 5 files changed, 156 insertions(+), 28 deletions(-)

diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformStreamCorruptionIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformStreamCorruptionIT.java
new file mode 100644
index 0000000..00a556c
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/JUnitPlatformStreamCorruptionIT.java
@@ -0,0 +1,56 @@
+package org.apache.maven.surefire.its;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.apache.maven.surefire.its.fixture.HelperAssertions.assumeJavaVersion;
+import static org.fest.assertions.Assertions.assertThat;
+import static org.hamcrest.CoreMatchers.startsWith;
+
+public class JUnitPlatformStreamCorruptionIT
+        extends SurefireJUnit4IntegrationTestCase
+{
+    @Before
+    public void setUp()
+    {
+        assumeJavaVersion( 1.8d );
+    }
+
+    @Test
+    public void warningIsNotEmitted() throws VerificationException
+    {
+        OutputValidator validator = unpack( "/surefire-1614-stream-corruption" )
+                .executeTest()
+                .verifyErrorFree( 1 );
+
+        List<String> lines = validator.loadLogLines(
+                startsWith( "[WARNING] Corrupted STDOUT by directly writing to native stream in forked JVM" ) );
+
+        assertThat( lines )
+                .isEmpty();
+    }
+}
diff --git a/surefire-its/src/test/resources/surefire-1614-stream-corruption/pom.xml b/surefire-its/src/test/resources/surefire-1614-stream-corruption/pom.xml
new file mode 100644
index 0000000..25726cb
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1614-stream-corruption/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.maven.plugins.surefire</groupId>
+    <artifactId>junit-platform-1.0.0</artifactId>
+    <version>1.0</version>
+    <name>[SUREFIRE-1614] JUnit 5: Vintage Output Stream Corruption</name>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <version>5.3.2</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${surefire.version}</version>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/CustomRunner.java b/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/CustomRunner.java
new file mode 100644
index 0000000..cdfa672
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/CustomRunner.java
@@ -0,0 +1,22 @@
+package com.example.demo;
+
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.TestClass;
+
+public class CustomRunner
+        extends BlockJUnit4ClassRunner
+{
+
+    public CustomRunner( Class<?> klass ) throws InitializationError
+    {
+        super( klass );
+    }
+
+    @Override
+    protected TestClass createTestClass( Class<?> testClass )
+    {
+        System.out.println( "Creating test class" );
+        return super.createTestClass( testClass );
+    }
+}
diff --git a/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/SurefireStreamCorruptionTest.java b/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/SurefireStreamCorruptionTest.java
new file mode 100644
index 0000000..6d877ad
--- /dev/null
+++ b/surefire-its/src/test/resources/surefire-1614-stream-corruption/src/test/java/com/example/demo/SurefireStreamCorruptionTest.java
@@ -0,0 +1,13 @@
+package com.example.demo;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith( CustomRunner.class )
+public class SurefireStreamCorruptionTest
+{
+    @Test
+    public void contextLoads()
+    {
+    }
+}
diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
index 177adef..fef72e6 100644
--- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
+++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java
@@ -27,6 +27,8 @@ import static java.util.logging.Level.WARNING;
 import static java.util.stream.Collectors.toList;
 import static org.apache.maven.surefire.booter.ProviderParameterNames.TESTNG_EXCLUDEDGROUPS_PROP;
 import static org.apache.maven.surefire.booter.ProviderParameterNames.TESTNG_GROUPS_PROP;
+import static org.apache.maven.surefire.report.ConsoleOutputCapture.startCapture;
+import static org.apache.maven.surefire.util.TestsToRun.fromClass;
 import static org.junit.platform.commons.util.StringUtils.isBlank;
 import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
 import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
@@ -44,7 +46,6 @@ import java.util.logging.Logger;
 
 import org.apache.maven.surefire.providerapi.AbstractProvider;
 import org.apache.maven.surefire.providerapi.ProviderParameters;
-import org.apache.maven.surefire.report.ConsoleOutputCapture;
 import org.apache.maven.surefire.report.ConsoleOutputReceiver;
 import org.apache.maven.surefire.report.ReporterException;
 import org.apache.maven.surefire.report.ReporterFactory;
@@ -104,22 +105,35 @@ public class JUnitPlatformProvider
     public RunResult invoke( Object forkTestSet )
                     throws TestSetFailedException, ReporterException
     {
-        if ( forkTestSet instanceof TestsToRun )
-        {
-            return invokeAllTests( (TestsToRun) forkTestSet );
-        }
-        else if ( forkTestSet instanceof Class )
-        {
-            return invokeAllTests( TestsToRun.fromClass( (Class<?>) forkTestSet ) );
-        }
-        else if ( forkTestSet == null )
+        ReporterFactory reporterFactory = parameters.getReporterFactory();
+        final RunResult runResult;
+        try
         {
-            return invokeAllTests( scanClasspath() );
+            RunListener runListener = reporterFactory.createReporter();
+            startCapture( ( ConsoleOutputReceiver ) runListener );
+            if ( forkTestSet instanceof TestsToRun )
+            {
+                invokeAllTests( (TestsToRun) forkTestSet, runListener );
+            }
+            else if ( forkTestSet instanceof Class )
+            {
+                invokeAllTests( fromClass( ( Class<?> ) forkTestSet ), runListener );
+            }
+            else if ( forkTestSet == null )
+            {
+                invokeAllTests( scanClasspath(), runListener );
+            }
+            else
+            {
+                throw new IllegalArgumentException(
+                        "Unexpected value of forkTestSet: " + forkTestSet );
+            }
         }
-        else
+        finally
         {
-            throw new IllegalArgumentException( "Unexpected value of forkTestSet: " + forkTestSet );
+            runResult = reporterFactory.close();
         }
+        return runResult;
     }
 
     private TestsToRun scanClasspath()
@@ -130,22 +144,10 @@ public class JUnitPlatformProvider
         return parameters.getRunOrderCalculator().orderTestClasses( scannedClasses );
     }
 
-    private RunResult invokeAllTests( TestsToRun testsToRun )
+    private void invokeAllTests( TestsToRun testsToRun, RunListener runListener )
     {
-        RunResult runResult;
-        ReporterFactory reporterFactory = parameters.getReporterFactory();
-        try
-        {
-            RunListener runListener = reporterFactory.createReporter();
-            ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) runListener );
-            LauncherDiscoveryRequest discoveryRequest = buildLauncherDiscoveryRequest( testsToRun );
-            launcher.execute( discoveryRequest, new RunListenerAdapter( runListener ) );
-        }
-        finally
-        {
-            runResult = reporterFactory.close();
-        }
-        return runResult;
+        LauncherDiscoveryRequest discoveryRequest = buildLauncherDiscoveryRequest( testsToRun );
+        launcher.execute( discoveryRequest, new RunListenerAdapter( runListener ) );
     }
 
     private LauncherDiscoveryRequest buildLauncherDiscoveryRequest( TestsToRun testsToRun )