HHH-10925 Allow ignoring tests based on strategy
This commit is contained in:
parent
85388ec48f
commit
5ccaba123b
|
@ -12,15 +12,24 @@ import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.testing.envers.RequiresAuditStrategy;
|
||||||
import org.hibernate.testing.junit4.CustomRunner;
|
import org.hibernate.testing.junit4.CustomRunner;
|
||||||
|
import org.hibernate.testing.junit4.Helper;
|
||||||
|
|
||||||
|
import org.hibernate.envers.strategy.internal.DefaultAuditStrategy;
|
||||||
|
import org.hibernate.envers.strategy.spi.AuditStrategy;
|
||||||
import org.junit.runner.Runner;
|
import org.junit.runner.Runner;
|
||||||
import org.junit.runner.manipulation.NoTestsRemainException;
|
import org.junit.runner.manipulation.NoTestsRemainException;
|
||||||
|
import org.junit.runner.notification.RunNotifier;
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
import org.junit.runners.Suite;
|
import org.junit.runners.Suite;
|
||||||
import org.junit.runners.model.FrameworkMethod;
|
import org.junit.runners.model.FrameworkMethod;
|
||||||
import org.junit.runners.model.InitializationError;
|
import org.junit.runners.model.InitializationError;
|
||||||
|
import org.junit.runners.model.Statement;
|
||||||
import org.junit.runners.model.TestClass;
|
import org.junit.runners.model.TestClass;
|
||||||
|
|
||||||
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copied & modified from {@link Parameterized}.
|
* Copied & modified from {@link Parameterized}.
|
||||||
* <p/>
|
* <p/>
|
||||||
|
@ -32,13 +41,19 @@ import org.junit.runners.model.TestClass;
|
||||||
* annotations to work.
|
* annotations to work.
|
||||||
*
|
*
|
||||||
* @author Adam Warski (adam at warski dot org)
|
* @author Adam Warski (adam at warski dot org)
|
||||||
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
public class EnversRunner extends Suite {
|
public class EnversRunner extends Suite {
|
||||||
|
|
||||||
|
private static final Logger LOG = Logger.getLogger( EnversRunner.class );
|
||||||
|
|
||||||
private class TestClassCustomRunnerForParameters extends CustomRunner {
|
private class TestClassCustomRunnerForParameters extends CustomRunner {
|
||||||
private final int fParameterSetNumber;
|
private final int fParameterSetNumber;
|
||||||
|
|
||||||
private final List<Object[]> fParameterList;
|
private final List<Object[]> fParameterList;
|
||||||
|
|
||||||
|
private boolean ignoreAllTests;
|
||||||
|
|
||||||
TestClassCustomRunnerForParameters(Class<?> type, List<Object[]> parameterList, int i)
|
TestClassCustomRunnerForParameters(Class<?> type, List<Object[]> parameterList, int i)
|
||||||
throws InitializationError, NoTestsRemainException {
|
throws InitializationError, NoTestsRemainException {
|
||||||
super( type );
|
super( type );
|
||||||
|
@ -58,6 +73,48 @@ public class EnversRunner extends Suite {
|
||||||
return testInstance;
|
return testInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Statement withBeforeClasses(Statement statement) {
|
||||||
|
if ( !isAuditStrategyAllowed( getTestClass().getAnnotation( RequiresAuditStrategy.class ) ) ) {
|
||||||
|
LOG.infof( "Required audit strategy not available, test class '%s' skipped.", getTestClass().getName() );
|
||||||
|
ignoreAllTests = true;
|
||||||
|
return statement;
|
||||||
|
}
|
||||||
|
return super.withBeforeClasses( statement );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runChild(FrameworkMethod method, RunNotifier notifier) {
|
||||||
|
if ( !isAuditStrategyAllowed( method ) ) {
|
||||||
|
if ( !ignoreAllTests ) {
|
||||||
|
LOG.infof( "Required audit strategy not available, test '%s' skipped.", method.getName() );
|
||||||
|
}
|
||||||
|
notifier.fireTestIgnored( describeChild( method ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.runChild( method, notifier );
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAuditStrategyAllowed(FrameworkMethod method) {
|
||||||
|
return isAuditStrategyAllowed( Helper.locateAnnotation( RequiresAuditStrategy.class, method, getTestClass() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAuditStrategyAllowed(RequiresAuditStrategy auditStrategyAnn) {
|
||||||
|
if ( auditStrategyAnn == null ) {
|
||||||
|
// if there is no annotation, then execution is permissible
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if an annotation exists, verify its allowed
|
||||||
|
final String strategyNameInUse = getStrategyClassSimpleName();
|
||||||
|
for ( Class<? extends AuditStrategy> strategy : auditStrategyAnn.value() ) {
|
||||||
|
if ( strategy.getSimpleName().equals( strategyNameInUse ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private Object[] computeParams() throws Exception {
|
private Object[] computeParams() throws Exception {
|
||||||
try {
|
try {
|
||||||
return fParameterList.get( fParameterSetNumber );
|
return fParameterList.get( fParameterSetNumber );
|
||||||
|
@ -87,6 +144,15 @@ public class EnversRunner extends Suite {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getStrategyClassSimpleName() {
|
||||||
|
Object name = fParameterList.get( fParameterSetNumber )[ 0 ];
|
||||||
|
if ( name != null ) {
|
||||||
|
String strategyName = (String) name;
|
||||||
|
name = strategyName.substring( strategyName.lastIndexOf( "." ) + 1 );
|
||||||
|
}
|
||||||
|
return ( name != null ? name.toString() : DefaultAuditStrategy.class.getSimpleName() );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void sortMethods(List<FrameworkMethod> computedTestMethods) {
|
protected void sortMethods(List<FrameworkMethod> computedTestMethods) {
|
||||||
super.sortMethods( computedTestMethods );
|
super.sortMethods( computedTestMethods );
|
||||||
|
|
Loading…
Reference in New Issue