/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.performance;
import java.util.Objects;
import java.util.stream.Stream;
import org.hibernate.validator.performance.cascaded.CascadedValidation;
import org.hibernate.validator.performance.simple.SimpleValidation;
import org.hibernate.validator.performance.statistical.StatisticalValidation;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.ChainedOptionsBuilder;
import org.openjdk.jmh.runner.options.CommandLineOptionException;
import org.openjdk.jmh.runner.options.CommandLineOptions;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
/**
* Class containing main method to run all performance tests.
*
* @author Marko Bekhta
* @author Guillaume Smet
*/
public final class BenchmarkRunner {
private static final Stream<? extends Class<?>> DEFAULT_TEST_CLASSES = Stream.of(
SimpleValidation.class.getName(),
CascadedValidation.class.getName(),
StatisticalValidation.class.getName(),
// Benchmarks specific to Bean Validation 2.0
// Tests are located in a separate source folder only added for implementations compatible with BV 2.0
"org.hibernate.validator.performance.multilevel.MultiLevelContainerValidation"
).map( BenchmarkRunner::classForName ).filter( Objects::nonNull );
private BenchmarkRunner() {
}
public static void main(String[] args) throws RunnerException, CommandLineOptionException {
Options commandLineOptions = new CommandLineOptions( args );
ChainedOptionsBuilder builder = new OptionsBuilder().parent( commandLineOptions );
if ( !commandLineOptions.getResult().hasValue() ) {
builder.result( "target/jmh-results.json" );
}
if ( !commandLineOptions.getResultFormat().hasValue() ) {
builder.resultFormat( ResultFormatType.JSON );
}
if ( commandLineOptions.getIncludes().isEmpty() ) {
DEFAULT_TEST_CLASSES.forEach( testClass -> builder.include( testClass.getName() ) );
}
Options opt = builder.build();
new Runner( opt ).run();
}
private static Class<?> classForName(String qualifiedName) {
try {
return Class.forName( qualifiedName );
}
catch (ClassNotFoundException e) {
// silently ignore the error
}
return null;
}
}