Skip to content

Commit

Permalink
[SUREFIRE-1426] Fork crash doesn't fail build with -Dmaven.test.failu…
Browse files Browse the repository at this point in the history
…re.ignore=true

remove not needed local variable

Signed-off-by: Olivier Lamy <olamy@apache.org>

fix temporary debug

Signed-off-by: Olivier Lamy <olamy@apache.org>

[SUREFIRE-1426] Fork crash doesn't fail build with -Dmaven.test.failure.ignore=true, add an IT which show it  looks to be fixed with 3.0.0-M6 but was failing with 3.0.0-M5
proposal fix in case of SurefireBooterException (i.e cannot start surefire fork) error must be reported

Signed-off-by: Olivier Lamy <olamy@apache.org>
  • Loading branch information
olamy authored and Tibor17 committed Mar 25, 2022
1 parent 8bf29be commit 6e60b03
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 3 deletions.
Expand Up @@ -27,6 +27,7 @@
import org.apache.maven.surefire.api.cli.CommandLineOption;
import org.apache.maven.surefire.api.suite.RunResult;
import org.apache.maven.surefire.api.testset.TestSetFailedException;
import org.apache.maven.surefire.booter.SurefireBooterForkException;

import javax.annotation.Nonnull;
import java.io.File;
Expand Down Expand Up @@ -156,7 +157,14 @@ public static void reportExecution( SurefireReportParameters reportParameters, R

if ( reportParameters.isTestFailureIgnore() )
{
log.error( createErrorMessage( reportParameters, result, firstForkException ) );
String errorMessage = createErrorMessage( reportParameters, result, firstForkException );

if ( firstForkException instanceof SurefireBooterForkException )
{
throw new MojoExecutionException( errorMessage, firstForkException );
}

log.error( errorMessage );
}
else
{
Expand Down
Expand Up @@ -2000,6 +2000,7 @@ public static class Mojo
private List<String> includes;
private List<String> excludes;
private String test;
private boolean testFailureIgnore;

private JUnitPlatformProviderInfo createJUnitPlatformProviderInfo( Artifact junitPlatformArtifact,
TestClassPath testClasspathWrapper )
Expand Down Expand Up @@ -2075,13 +2076,13 @@ public void setSkip( boolean skip )
@Override
public boolean isTestFailureIgnore()
{
return false;
return testFailureIgnore;
}

@Override
public void setTestFailureIgnore( boolean testFailureIgnore )
{

this.testFailureIgnore = testFailureIgnore;
}

@Override
Expand Down
Expand Up @@ -19,12 +19,18 @@
* under the License.
*/

import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.surefire.AbstractSurefireMojoTest.Mojo;
import org.apache.maven.plugin.surefire.log.PluginConsoleLogger;
import org.apache.maven.surefire.api.suite.RunResult;
import org.apache.maven.surefire.api.testset.TestSetFailedException;
import org.apache.maven.surefire.booter.SurefireBooterForkException;
import org.codehaus.plexus.logging.Logger;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;

import java.io.File;
import java.util.ArrayList;
Expand All @@ -36,7 +42,13 @@
import static org.apache.maven.plugin.surefire.SurefireHelper.reportExecution;
import static org.apache.maven.surefire.shared.lang3.SystemUtils.IS_OS_WINDOWS;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assume.assumeTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.doNothing;
import static org.powermock.api.mockito.PowerMockito.mock;

/**
* Test of {@link SurefireHelper}.
Expand Down Expand Up @@ -120,6 +132,36 @@ public void shouldEscapeWindowsPath()
assertThat( escaped ).isEqualTo( root + "\\" + pathToJar );
}

@Test
public void shouldHandleFailWithoutExitCode() throws Exception
{
RunResult summary = new RunResult( 0, 0, 0, 0 );
Mojo plugin = new Mojo();
plugin.setTestFailureIgnore( true );

Logger logger = mock( Logger.class );
when( logger.isErrorEnabled() ).thenReturn( true );
doNothing().when( logger ).error( anyString() );
TestSetFailedException exc = new TestSetFailedException( "failure" );
reportExecution( plugin, summary, new PluginConsoleLogger( logger ), exc );
ArgumentCaptor<String> errorMessage = ArgumentCaptor.forClass( String.class );
verify( logger ).error( errorMessage.capture() );
assertThat( errorMessage.getValue() ).contains( "failure" );
}

@Test
public void shouldHandleFailIfJvmNonZeroExitCode() throws Exception
{
RunResult summary = new RunResult( 0, 0, 0, 0 );
Mojo plugin = new Mojo();
plugin.setTestFailureIgnore( true );

SurefireBooterForkException exc = new SurefireBooterForkException( "Unrecognized option: -Xxxx" );
e.expect( MojoExecutionException.class );
e.expectMessage( containsString( "Unrecognized option: -Xxxx" ) );
reportExecution( plugin, summary, new PluginConsoleLogger( mock( Logger.class ) ), exc );
}

@Test
public void shouldHandleFailIfNoTests() throws Exception
{
Expand Down
@@ -0,0 +1,47 @@
package org.apache.maven.surefire.its.jiras;

/*
* 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.SurefireJUnit4IntegrationTestCase;
import org.junit.Test;

import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;

/**
* Test https://issues.apache.org/jira/browse/SUREFIRE-1426
*
*/
public class Surefire1426JvmCrashShouldNotBeIgnoredIT
extends SurefireJUnit4IntegrationTestCase
{
@Test
public void mavenShouldFail() throws VerificationException
{
unpack( "surefire-1426-ignore-fail-jvm-crash" )
.maven()
.withFailure()
.debugLogging()
.executeTest()
.assertThatLogLine( containsString( "BUILD SUCCESS" ), is( 0 ) )
.verifyTextInLog( "BUILD FAILURE" );
}
}
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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.
-->

<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>SUREFIRE-1426</artifactId>
<version>1.0-SNAPSHOT</version>
<name>SUREFIRE-1426</name>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<argLine>-Dfile.encoding=UTF-8 -Duser.language=en -XFFOOOBEEER -Duser.region=US -showversion -Xmx6g -Xms2g -XX:+PrintGCDetails </argLine>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,44 @@
/*
* 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.
*/

public class PojoTest
{
private static int calls;

public void setUp()
{
System.out.println( "setUp called " + ++calls );
}

public void tearDown()
{
System.out.println( "tearDown called " + calls );
}

public void testSuccess()
{
assert true;
}

public void testFailure()
{
assert false;
}

}

0 comments on commit 6e60b03

Please sign in to comment.