Skip to content

Commit

Permalink
HV-100 Further test refactoring. Splitting out CascadedValidationTest…
Browse files Browse the repository at this point in the history
…. Removing random depth generation in StatisticalValidationTest
  • Loading branch information
hferentschik committed Apr 20, 2012
1 parent 787473a commit 94d6b85
Show file tree
Hide file tree
Showing 13 changed files with 294 additions and 142 deletions.
Expand Up @@ -22,24 +22,33 @@
import javax.validation.TraversableResolver;
import javax.validation.metadata.ConstraintDescriptor;

import org.hibernate.validator.internal.metadata.BeanMetaDataManager;

/**
* A {@link ValidationContext} implementation which creates and manages violations of type {@link ConstraintViolation}.
*
* @author Gunnar Morling
*
* @param <T> The type of the root bean for which this context is created.
*
* @author Gunnar Morling
*/
public class StandardValidationContext <T> extends ValidationContext<T, ConstraintViolation<T>> {
public class StandardValidationContext<T> extends ValidationContext<T, ConstraintViolation<T>> {

protected StandardValidationContext(Class<T> rootBeanClass, T rootBean,
MessageInterpolator messageInterpolator,
ConstraintValidatorFactory constraintValidatorFactory,
TraversableResolver traversableResolver,
boolean failFast) {

super(rootBeanClass, rootBean, messageInterpolator, constraintValidatorFactory, traversableResolver, failFast);
MessageInterpolator messageInterpolator,
ConstraintValidatorFactory constraintValidatorFactory,
TraversableResolver traversableResolver,
boolean failFast) {

super(
rootBeanClass,
rootBean,
messageInterpolator,
constraintValidatorFactory,
traversableResolver,
failFast
);
}

@Override
public <U, V> ConstraintViolation<T> createConstraintViolation(
ValueContext<U, V> localContext, MessageAndPath messageAndPath,
Expand All @@ -50,7 +59,7 @@ public <U, V> ConstraintViolation<T> createConstraintViolation(
messageTemplate,
new MessageInterpolatorContext( descriptor, localContext.getCurrentValidatedValue() )
);

return new ConstraintViolationImpl<T>(
messageTemplate,
interpolatedMessage,
Expand Down
72 changes: 58 additions & 14 deletions performance/pom.xml
Expand Up @@ -32,18 +32,14 @@

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<profilingOptions>-agentpath:/Applications/Development/jprofiler7/bin/macos/libjprofilerti.jnilib=port=8849,nowait</profilingOptions>
<!--<profilingOptions>-agentpath:/Applications/Development/jprofiler7/bin/macos/libjprofilerti.jnilib=port=8849,nowait</profilingOptions>-->
<history.directory>${project.basedir}/history</history.directory>
</properties>

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Expand All @@ -53,10 +49,6 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand All @@ -83,13 +75,21 @@
<jmeterOutput>${project.basedir}/target/chronos/performancetest</jmeterOutput>
<historydir>${history.directory}</historydir>
<heap>1024m</heap>
<options>
<option>${profilingOptions}</option>
</options>
<loggc>false</loggc>
<jmeterVariables>
<property>
<name>validator</name>
<value>${validator.version}</value>
</property>
</jmeterVariables>
<!--<options>-->
<!--<option>${profilingOptions}</option>-->
<!--</options>-->
</configuration>
</plugin>
</plugins>
</build>

<reporting>
<plugins>
<plugin>
Expand All @@ -99,4 +99,48 @@
</plugin>
</plugins>
</reporting>

<profiles>
<profile>
<id>hv-4.3</id>
<activation>
<property>
<name>validator</name>
<value>hv-4.3</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
</dependency>
</dependencies>
<properties>
<validator.version>4.3</validator.version>
</properties>
</profile>
<profile>
<id>hv-4.2</id>
<activation>
<property>
<name>validator</name>
<value>hv-4.2</value>
</property>
</activation>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
</dependencies>
<properties>
<validator.version>4.2</validator.version>
</properties>
</profile>
</profiles>
</project>
15 changes: 12 additions & 3 deletions performance/readme.md
Expand Up @@ -6,16 +6,25 @@ The test are written as JUnit test and executed via Apache JMeter and the

## To start the JMeter GUI

mvn chronos-jmeter:jmetergui &
mvn chronos-jmeter:jmetergui -P hv-4.3 &

Then open a JMeter test file from _src/jmeter_
For JMeter to execute JUnit tests they have to be copied to <jmeter_install_dir>/lib/junit. This happens automatically
via _chronos-jmeter:jmetergui_ or _chronos-jmeter:jmeter_.

## To run the performance tests

mvn clean package chronos-jmeter:jmeter
mvn clean package chronos-jmeter:jmeter -P hv-4.3

## To generate a report

mvn chronos-jmeter:jmeteroutput chronos-report:report
mvn chronos-jmeter:jmeteroutput chronos-report:report

## Profiles

There are currently two profiles defined in order to run the tests against different Hibernate Validator versions.
You specify the profile version via the _-P_ command line switch.
The available profiles are:

* hv-4.3
* hv-4.2
70 changes: 2 additions & 68 deletions performance/src/jmeter/cascaded.jmx
Expand Up @@ -26,8 +26,8 @@
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Cascaded Validation" enabled="true">
<stringProp name="junitSampler.classname">org.hibernate.validator.perf.simple.SimpleValidationTest</stringProp>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Cascaded Validation (${validator.version})" enabled="true">
<stringProp name="junitSampler.classname">org.hibernate.validator.performance.simple.CascadedValidationTest</stringProp>
<stringProp name="junitsampler.constructorstring"></stringProp>
<stringProp name="junitsampler.method">testCascadedValidation</stringProp>
<stringProp name="junitsampler.pkg.filter"></stringProp>
Expand Down Expand Up @@ -76,72 +76,6 @@
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="false">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">5</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">5</stringProp>
<stringProp name="ThreadGroup.ramp_time">10</stringProp>
<longProp name="ThreadGroup.start_time">1332340789000</longProp>
<longProp name="ThreadGroup.end_time">1332340789000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Deep Validation" enabled="true">
<stringProp name="junitSampler.classname">org.hibernate.validator.perf.deep.DeepValidationTest</stringProp>
<stringProp name="junitsampler.constructorstring"></stringProp>
<stringProp name="junitsampler.method">testDeepValidation</stringProp>
<stringProp name="junitsampler.pkg.filter"></stringProp>
<stringProp name="junitsampler.success">Test successful</stringProp>
<stringProp name="junitsampler.success.code">1000</stringProp>
<stringProp name="junitsampler.failure">Test failed</stringProp>
<stringProp name="junitsampler.failure.code">0001</stringProp>
<stringProp name="junitsampler.error">An unexpected error occured</stringProp>
<stringProp name="junitsampler.error.code">9999</stringProp>
<stringProp name="junitsampler.exec.setup">false</stringProp>
<stringProp name="junitsampler.append.error">true</stringProp>
<stringProp name="junitsampler.append.exception">true</stringProp>
<boolProp name="junitsampler.junit4">true</boolProp>
<stringProp name="TestPlan.comments">A deep validation test</stringProp>
</JUnitSampler>
<hashTree/>
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>true</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="SplineVisualizer" testclass="ResultCollector" testname="Spline Visualizer" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
Expand Down
4 changes: 2 additions & 2 deletions performance/src/jmeter/simple-cached-validator-factory.jmx
Expand Up @@ -26,7 +26,7 @@
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Simple Validation (Shared Validator Factory)" enabled="true">
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Simple Validation (Shared Validator Factory, ${validator.version})" enabled="true">
<stringProp name="TestPlan.comments">A simple bean validation</stringProp>
<stringProp name="junitSampler.classname">org.hibernate.validator.performance.simple.SimpleValidationTest</stringProp>
<stringProp name="junitsampler.constructorstring"></stringProp>
Expand Down Expand Up @@ -138,7 +138,7 @@
<sampleCount>true</sampleCount>
</value>
</objProp>
<stringProp name="filename">foo</stringProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
Expand Down
Expand Up @@ -26,7 +26,7 @@
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Simple Validation (Recreated Validator Factory)" enabled="true">
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Simple Validation (Recreated Validator Factory, ${validator.version})" enabled="true">
<stringProp name="TestPlan.comments">A simple bean validation</stringProp>
<stringProp name="junitSampler.classname">org.hibernate.validator.performance.simple.SimpleValidationTest</stringProp>
<stringProp name="junitsampler.constructorstring"></stringProp>
Expand Down
20 changes: 13 additions & 7 deletions performance/src/jmeter/statistical.jmx
@@ -1,12 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="2.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Hibernate Validator Test Plan" enabled="true">
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Testing Validator peformance w/ random graph depth and random failures" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments"/>
<collectionProp name="Arguments.arguments">
<elementProp name="validator.version" elementType="Argument">
<stringProp name="Argument.name">validator.version</stringProp>
<stringProp name="Argument.value">${__property(validator)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
Expand All @@ -15,18 +21,18 @@
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">10</stringProp>
<stringProp name="LoopController.loops">200</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">10</stringProp>
<stringProp name="ThreadGroup.num_threads">10</stringProp>
<stringProp name="ThreadGroup.ramp_time">5</stringProp>
<longProp name="ThreadGroup.start_time">1332326233000</longProp>
<longProp name="ThreadGroup.end_time">1332326233000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Simple Validation (Shared Validator Factory)" enabled="true">
<JUnitSampler guiclass="JUnitTestSamplerGui" testclass="JUnitSampler" testname="Statistical Validation (${validator.version})" enabled="true">
<stringProp name="TestPlan.comments">A simple bean validation</stringProp>
<stringProp name="junitSampler.classname">org.hibernate.validator.performance.statistical.StatisticalValidationTest</stringProp>
<stringProp name="junitsampler.constructorstring"></stringProp>
Expand Down Expand Up @@ -138,7 +144,7 @@
<sampleCount>true</sampleCount>
</value>
</objProp>
<stringProp name="filename">foo</stringProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
Expand Down

0 comments on commit 94d6b85

Please sign in to comment.