You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:27:00 UTC
[sling-tooling-jenkins] 20/27: @trivial Converted mixed tabs and
spaces indentation to spaces
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.performance.base-0.0.2
in repository https://gitbox.apache.org/repos/asf/sling-tooling-jenkins.git
commit 4f20e50861d5c40a46f84ad99176d8f0b1dc79d9
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Thu Mar 12 16:38:37 2015 +0000
@trivial Converted mixed tabs and spaces indentation to spaces
* applied patch sent by Vlad Băilescu
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/performance/base@1666248 13f79535-47bb-0310-9956-ffa450edef68
---
.../performance/FrameworkPerformanceMethod.java | 574 ++++++++++-----------
.../sling/performance/PerformanceRunner.java | 408 +++++++--------
.../org/apache/sling/performance/ReportLogger.java | 182 +++----
3 files changed, 582 insertions(+), 582 deletions(-)
diff --git a/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java b/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
index 42ee110..1e002f4 100644
--- a/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
+++ b/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
@@ -35,21 +35,21 @@ import org.junit.runners.model.FrameworkMethod;
class FrameworkPerformanceMethod extends FrameworkMethod {
- private Object target;
- private PerformanceSuiteState performanceSuiteState;
- private PerformanceRunner.ReportLevel reportLevel = PerformanceRunner.ReportLevel.ClassLevel;
+ private Object target;
+ private PerformanceSuiteState performanceSuiteState;
+ private PerformanceRunner.ReportLevel reportLevel = PerformanceRunner.ReportLevel.ClassLevel;
private String testCaseName = "";
private String className;
- public FrameworkPerformanceMethod(Method method, Object target,
- PerformanceSuiteState performanceSuiteState, PerformanceRunner.ReportLevel reportLevel) {
- super(method);
- this.target = target;
- this.performanceSuiteState = performanceSuiteState;
- this.reportLevel = reportLevel;
+ public FrameworkPerformanceMethod(Method method, Object target,
+ PerformanceSuiteState performanceSuiteState, PerformanceRunner.ReportLevel reportLevel) {
+ super(method);
+ this.target = target;
+ this.performanceSuiteState = performanceSuiteState;
+ this.reportLevel = reportLevel;
if (target instanceof IdentifiableTestCase) {
this.testCaseName = ((IdentifiableTestCase) target).testCaseName();
- }
+ }
// Name of the test class, as the report logger needs it
// This can be overwritten by tests by implementing IdentifiableTestClass
@@ -61,284 +61,284 @@ class FrameworkPerformanceMethod extends FrameworkMethod {
}
- @Override
- public Object invokeExplosively(Object target, Object... params)
- throws Throwable {
- // Executes the test method on the supplied target
-
- // Check if this is the first test running from this specific
- // PerformanceSuite
- // and run the BeforeSuite methods
- if ((performanceSuiteState != null)
- && (performanceSuiteState.getBeforeSuiteMethod() != null)
- && (performanceSuiteState.getTargetObjectSuite() != null)
- && (performanceSuiteState.getNumberOfExecutedMethods() == 0)
- && !performanceSuiteState.testSuiteName
- .equals(ParameterizedTestList.TEST_CASE_ONLY)) {
- performanceSuiteState.getBeforeSuiteMethod().invoke(
- performanceSuiteState.getTargetObjectSuite());
- }
-
- // In case of a PerformanceSuite we need to run the methods annotated
- // with Before and After
- // ourselves as JUnit can't find them (JUnit is looking for them in the
- // test suite class);
- // in case we don't have to deal with a PerformanceSuite just skip this
- // as JUnit will run the methods itself
- if ((performanceSuiteState != null)
- && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
-
- recursiveCallSpecificMethod(this.target.getClass(), this.target, Before.class);
- }
-
- // Need to count the number of tests run from the PerformanceSuite
- // so that we can call the AfterSuite method after the last test from
- // the suite
- // has run and the AfterSuite needs to run
- performanceSuiteState.incrementNumberOfExecutedTestMethods();
-
- Object response = null;
-
- Method testMethodToInvoke = this.getMethod();
-
- PerformanceTest performanceAnnotation = testMethodToInvoke
- .getAnnotation(PerformanceTest.class);
-
- // retrieve the test configuration options
- int warmuptime = performanceAnnotation.warmuptime();
- int runtime = performanceAnnotation.runtime();
- int warmupinvocations = performanceAnnotation.warmupinvocations();
- int runinvocations = performanceAnnotation.runinvocations();
-
- DescriptiveStatistics statistics = new DescriptiveStatistics();
-
- if (warmupinvocations != 0) {
- // Run the number of invocation specified in the annotation
- // for warming up the system
- for (int invocationIndex = 0; invocationIndex < warmupinvocations; invocationIndex++) {
-
- recursiveCallSpecificMethod(this.target.getClass(), this.target, BeforeMethodInvocation.class);
-
- // TODO: implement the method to run a before a specific test
- // method
- // recursiveCallSpecificMethod(this.target.getClass(),
- // this.target, BeforeSpecificTest.class);
-
- response = super.invokeExplosively(this.target, params);
-
- // TODO: implement the method to run a after a specific test
- // method
- // recursiveCallSpecificMethod(this.target.getClass(),
- // this.target, AfterSpecificTest.class);
-
- recursiveCallSpecificMethod(this.target.getClass(),
- this.target, AfterMethodInvocation.class);
- }
- } else {
- // Run a few iterations to warm up the system
- long warmupEnd = System.currentTimeMillis() + warmuptime * 1000;
- while (System.currentTimeMillis() < warmupEnd) {
- recursiveCallSpecificMethod(this.target.getClass(),
- this.target, BeforeMethodInvocation.class);
-
- // TODO: implement the method to run a before a specific test
- // method
- // recursiveCallSpecificMethod(this.target.getClass(),
- // this.target, BeforeSpecificTest.class);
-
- response = super.invokeExplosively(this.target, params);
-
- // recursiveCallSpecificMethod(this.target.getClass(),
- // this.target, AfterSpecificTest.class);
- // TODO: implement the method to run a after a specific test
- // method
-
- recursiveCallSpecificMethod(this.target.getClass(),
- this.target, AfterMethodInvocation.class);
- }
- }
-
- // System.out.println("Warmup ended - test :" +
- // testMethodToInvoke.getName());
- if (runinvocations != 0) {
- // Run the specified number of iterations and capture the execution
- // times
- for (int invocationIndex = 0; invocationIndex < runinvocations; invocationIndex++) {
-
- response = this.invokeTimedTestMethod(testMethodToInvoke,
- statistics, params);
- }
- } else {
- // Run test iterations and capture the execution times
- long runtimeEnd = System.currentTimeMillis() + runtime * 1000;
-
- while (System.currentTimeMillis() < runtimeEnd) {
-
- response = this.invokeTimedTestMethod(testMethodToInvoke,
- statistics, params);
-
- }
- }
-
- if (statistics.getN() > 0) {
- ReportLogger.writeReport(this.performanceSuiteState.testSuiteName, testCaseName, className, getMethod().getName(),
+ @Override
+ public Object invokeExplosively(Object target, Object... params)
+ throws Throwable {
+ // Executes the test method on the supplied target
+
+ // Check if this is the first test running from this specific
+ // PerformanceSuite
+ // and run the BeforeSuite methods
+ if ((performanceSuiteState != null)
+ && (performanceSuiteState.getBeforeSuiteMethod() != null)
+ && (performanceSuiteState.getTargetObjectSuite() != null)
+ && (performanceSuiteState.getNumberOfExecutedMethods() == 0)
+ && !performanceSuiteState.testSuiteName
+ .equals(ParameterizedTestList.TEST_CASE_ONLY)) {
+ performanceSuiteState.getBeforeSuiteMethod().invoke(
+ performanceSuiteState.getTargetObjectSuite());
+ }
+
+ // In case of a PerformanceSuite we need to run the methods annotated
+ // with Before and After
+ // ourselves as JUnit can't find them (JUnit is looking for them in the
+ // test suite class);
+ // in case we don't have to deal with a PerformanceSuite just skip this
+ // as JUnit will run the methods itself
+ if ((performanceSuiteState != null)
+ && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
+
+ recursiveCallSpecificMethod(this.target.getClass(), this.target, Before.class);
+ }
+
+ // Need to count the number of tests run from the PerformanceSuite
+ // so that we can call the AfterSuite method after the last test from
+ // the suite
+ // has run and the AfterSuite needs to run
+ performanceSuiteState.incrementNumberOfExecutedTestMethods();
+
+ Object response = null;
+
+ Method testMethodToInvoke = this.getMethod();
+
+ PerformanceTest performanceAnnotation = testMethodToInvoke
+ .getAnnotation(PerformanceTest.class);
+
+ // retrieve the test configuration options
+ int warmuptime = performanceAnnotation.warmuptime();
+ int runtime = performanceAnnotation.runtime();
+ int warmupinvocations = performanceAnnotation.warmupinvocations();
+ int runinvocations = performanceAnnotation.runinvocations();
+
+ DescriptiveStatistics statistics = new DescriptiveStatistics();
+
+ if (warmupinvocations != 0) {
+ // Run the number of invocation specified in the annotation
+ // for warming up the system
+ for (int invocationIndex = 0; invocationIndex < warmupinvocations; invocationIndex++) {
+
+ recursiveCallSpecificMethod(this.target.getClass(), this.target, BeforeMethodInvocation.class);
+
+ // TODO: implement the method to run a before a specific test
+ // method
+ // recursiveCallSpecificMethod(this.target.getClass(),
+ // this.target, BeforeSpecificTest.class);
+
+ response = super.invokeExplosively(this.target, params);
+
+ // TODO: implement the method to run a after a specific test
+ // method
+ // recursiveCallSpecificMethod(this.target.getClass(),
+ // this.target, AfterSpecificTest.class);
+
+ recursiveCallSpecificMethod(this.target.getClass(),
+ this.target, AfterMethodInvocation.class);
+ }
+ } else {
+ // Run a few iterations to warm up the system
+ long warmupEnd = System.currentTimeMillis() + warmuptime * 1000;
+ while (System.currentTimeMillis() < warmupEnd) {
+ recursiveCallSpecificMethod(this.target.getClass(),
+ this.target, BeforeMethodInvocation.class);
+
+ // TODO: implement the method to run a before a specific test
+ // method
+ // recursiveCallSpecificMethod(this.target.getClass(),
+ // this.target, BeforeSpecificTest.class);
+
+ response = super.invokeExplosively(this.target, params);
+
+ // recursiveCallSpecificMethod(this.target.getClass(),
+ // this.target, AfterSpecificTest.class);
+ // TODO: implement the method to run a after a specific test
+ // method
+
+ recursiveCallSpecificMethod(this.target.getClass(),
+ this.target, AfterMethodInvocation.class);
+ }
+ }
+
+ // System.out.println("Warmup ended - test :" +
+ // testMethodToInvoke.getName());
+ if (runinvocations != 0) {
+ // Run the specified number of iterations and capture the execution
+ // times
+ for (int invocationIndex = 0; invocationIndex < runinvocations; invocationIndex++) {
+
+ response = this.invokeTimedTestMethod(testMethodToInvoke,
+ statistics, params);
+ }
+ } else {
+ // Run test iterations and capture the execution times
+ long runtimeEnd = System.currentTimeMillis() + runtime * 1000;
+
+ while (System.currentTimeMillis() < runtimeEnd) {
+
+ response = this.invokeTimedTestMethod(testMethodToInvoke,
+ statistics, params);
+
+ }
+ }
+
+ if (statistics.getN() > 0) {
+ ReportLogger.writeReport(this.performanceSuiteState.testSuiteName, testCaseName, className, getMethod().getName(),
statistics, ReportLogger.ReportType.TXT, reportLevel);
- }
-
- // In case of a PerformanceSuite we need to run the methods annotated
- // with Before and After
- // ourselves as JUnit can't find them; in case we don't have to deal
- // with a PerformanceSuite
- // just skip this as JUnit will run the methods itself
- if ((performanceSuiteState != null)
- && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
-
- recursiveCallSpecificMethod(this.target.getClass(), this.target, After.class);
- }
-
- // Check if this is the last test running from a PerformanceSuite
- // and run the AfterSuite method
- if ((performanceSuiteState != null)
- && (performanceSuiteState.getAfterSuiteMethod() != null)
- && (performanceSuiteState.getTargetObjectSuite() != null)
- && (performanceSuiteState.getNumberOfExecutedMethods() == performanceSuiteState.getNumberOfMethodsInSuite())
- && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
- performanceSuiteState.getAfterSuiteMethod().invoke(performanceSuiteState.getTargetObjectSuite());
- }
-
- return response;
- }
-
- /**
- * Method that runs 1 invocation of the timed test method
- *
- * @param testMethodToInvoke
- * the test method to invoke
- * @param statistics
- * the statistics object that collects the results
- * @param params
- * the parameters for the invocation of the test method
- * @return the response from the method invocation
- * @throws Throwable
- */
- private Object invokeTimedTestMethod(Method testMethodToInvoke,
- DescriptiveStatistics statistics, Object... params)
- throws Throwable {
-
- Object response = null;
-
- recursiveCallSpecificMethod(this.target.getClass(), this.target,
- BeforeMethodInvocation.class);
-
- // TODO: implement the method to run a before a specific test method
- // recursiveCallSpecificMethod(this.target.getClass(), this.target,
- // BeforeSpecificTest.class);
-
- // timing the test method execution
- // System.out.println("Start test: " + testMethodToInvoke.getName());
- long start = System.nanoTime();
- response = super.invokeExplosively(this.target, params);
- long timeMilliseconds = TimeUnit.MILLISECONDS.convert(System.nanoTime() - start, TimeUnit.NANOSECONDS);
- statistics.addValue(timeMilliseconds);
-
- // System.out.println("End test: " + testMethodToInvoke.getName());
-
- // System.out.println("Test execution time (ms): " + timeMilliseconds);
-
- // TODO: implement the method to run a after a specific test method
- // recursiveCallSpecificMethod(this.target.getClass(), this.target,
- // AfterSpecificTest.class);
-
- recursiveCallSpecificMethod(this.target.getClass(), this.target, AfterMethodInvocation.class);
-
- return response;
- }
-
- /**
- * Recursively call a specific method annotated with a custom annotation
- *
- * @param test
- * the test class that contains the method
- * @param instance
- * the instance on which will run the method
- * @param methodAnnotation
- * the method annotation to look for
- * @throws InvocationTargetException
- * @throws InvalidAttributesException
- * @throws IllegalAccessException
- * @throws InstantiationException
- */
- @SuppressWarnings({ "rawtypes" })
- private void recursiveCallSpecificMethod(Class test, Object instance,
- Class<? extends Annotation> methodAnnotation)
- throws InvocationTargetException, InvalidAttributesException,
- IllegalAccessException, InstantiationException {
- if (test.getSuperclass() != null) {
- recursiveCallSpecificMethod(test.getSuperclass(), instance,
- methodAnnotation);
- }
-
- Method testMethod = getSpecificTestMethod(test, methodAnnotation);
- if (testMethod != null) {
- if (!testMethod.isAccessible()) {
- testMethod.setAccessible(true);
- }
- testMethod.invoke(instance);
- }
- }
-
- /**
- * Get the method annotated with the custom annotation
- *
- * @param testClass
- * the test class on which to look for the method
- * @param methodAnnotation
- * the method annotation to look for
- * @return
- * @throws InvalidAttributesException
- * @throws IllegalAccessException
- * @throws InstantiationException
- */
- @SuppressWarnings({ "rawtypes" })
- private Method getSpecificTestMethod(Class testClass,
- Class<? extends Annotation> methodAnnotation)
- throws InvalidAttributesException, IllegalAccessException,
- InstantiationException {
-
- Method[] methodsToReturn = getSpecificMethods(testClass, methodAnnotation);
- Method methodToReturn = null;
- if (methodsToReturn.length == 1) {
- methodToReturn = methodsToReturn[0];
- } else if (methodsToReturn.length > 1) {
- throw new InvalidAttributesException("Only 1 non parameterized before method accepted");
- }
-
- return methodToReturn;
- }
-
- /**
- * Retrieve all the specific methods from test class
- *
- * @param testClass
- * the test class that we need to search in
- * @param annotation
- * the annotation that we should look for
- * @return the list with the methods that have the specified annotation
- */
- @SuppressWarnings({ "rawtypes" })
- private Method[] getSpecificMethods(Class testClass,
- Class<? extends Annotation> annotation) {
- Method[] allMethods = testClass.getDeclaredMethods();
-
- List<Method> methodListResult = new ArrayList<Method>();
-
- for (Method testMethod : allMethods) {
- if (testMethod.isAnnotationPresent(annotation)) {
- methodListResult.add(testMethod);
- }
- }
- return methodListResult.toArray(new Method[] {});
- }
+ }
+
+ // In case of a PerformanceSuite we need to run the methods annotated
+ // with Before and After
+ // ourselves as JUnit can't find them; in case we don't have to deal
+ // with a PerformanceSuite
+ // just skip this as JUnit will run the methods itself
+ if ((performanceSuiteState != null)
+ && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
+
+ recursiveCallSpecificMethod(this.target.getClass(), this.target, After.class);
+ }
+
+ // Check if this is the last test running from a PerformanceSuite
+ // and run the AfterSuite method
+ if ((performanceSuiteState != null)
+ && (performanceSuiteState.getAfterSuiteMethod() != null)
+ && (performanceSuiteState.getTargetObjectSuite() != null)
+ && (performanceSuiteState.getNumberOfExecutedMethods() == performanceSuiteState.getNumberOfMethodsInSuite())
+ && !performanceSuiteState.testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
+ performanceSuiteState.getAfterSuiteMethod().invoke(performanceSuiteState.getTargetObjectSuite());
+ }
+
+ return response;
+ }
+
+ /**
+ * Method that runs 1 invocation of the timed test method
+ *
+ * @param testMethodToInvoke
+ * the test method to invoke
+ * @param statistics
+ * the statistics object that collects the results
+ * @param params
+ * the parameters for the invocation of the test method
+ * @return the response from the method invocation
+ * @throws Throwable
+ */
+ private Object invokeTimedTestMethod(Method testMethodToInvoke,
+ DescriptiveStatistics statistics, Object... params)
+ throws Throwable {
+
+ Object response = null;
+
+ recursiveCallSpecificMethod(this.target.getClass(), this.target,
+ BeforeMethodInvocation.class);
+
+ // TODO: implement the method to run a before a specific test method
+ // recursiveCallSpecificMethod(this.target.getClass(), this.target,
+ // BeforeSpecificTest.class);
+
+ // timing the test method execution
+ // System.out.println("Start test: " + testMethodToInvoke.getName());
+ long start = System.nanoTime();
+ response = super.invokeExplosively(this.target, params);
+ long timeMilliseconds = TimeUnit.MILLISECONDS.convert(System.nanoTime() - start, TimeUnit.NANOSECONDS);
+ statistics.addValue(timeMilliseconds);
+
+ // System.out.println("End test: " + testMethodToInvoke.getName());
+
+ // System.out.println("Test execution time (ms): " + timeMilliseconds);
+
+ // TODO: implement the method to run a after a specific test method
+ // recursiveCallSpecificMethod(this.target.getClass(), this.target,
+ // AfterSpecificTest.class);
+
+ recursiveCallSpecificMethod(this.target.getClass(), this.target, AfterMethodInvocation.class);
+
+ return response;
+ }
+
+ /**
+ * Recursively call a specific method annotated with a custom annotation
+ *
+ * @param test
+ * the test class that contains the method
+ * @param instance
+ * the instance on which will run the method
+ * @param methodAnnotation
+ * the method annotation to look for
+ * @throws InvocationTargetException
+ * @throws InvalidAttributesException
+ * @throws IllegalAccessException
+ * @throws InstantiationException
+ */
+ @SuppressWarnings({ "rawtypes" })
+ private void recursiveCallSpecificMethod(Class test, Object instance,
+ Class<? extends Annotation> methodAnnotation)
+ throws InvocationTargetException, InvalidAttributesException,
+ IllegalAccessException, InstantiationException {
+ if (test.getSuperclass() != null) {
+ recursiveCallSpecificMethod(test.getSuperclass(), instance,
+ methodAnnotation);
+ }
+
+ Method testMethod = getSpecificTestMethod(test, methodAnnotation);
+ if (testMethod != null) {
+ if (!testMethod.isAccessible()) {
+ testMethod.setAccessible(true);
+ }
+ testMethod.invoke(instance);
+ }
+ }
+
+ /**
+ * Get the method annotated with the custom annotation
+ *
+ * @param testClass
+ * the test class on which to look for the method
+ * @param methodAnnotation
+ * the method annotation to look for
+ * @return
+ * @throws InvalidAttributesException
+ * @throws IllegalAccessException
+ * @throws InstantiationException
+ */
+ @SuppressWarnings({ "rawtypes" })
+ private Method getSpecificTestMethod(Class testClass,
+ Class<? extends Annotation> methodAnnotation)
+ throws InvalidAttributesException, IllegalAccessException,
+ InstantiationException {
+
+ Method[] methodsToReturn = getSpecificMethods(testClass, methodAnnotation);
+ Method methodToReturn = null;
+ if (methodsToReturn.length == 1) {
+ methodToReturn = methodsToReturn[0];
+ } else if (methodsToReturn.length > 1) {
+ throw new InvalidAttributesException("Only 1 non parameterized before method accepted");
+ }
+
+ return methodToReturn;
+ }
+
+ /**
+ * Retrieve all the specific methods from test class
+ *
+ * @param testClass
+ * the test class that we need to search in
+ * @param annotation
+ * the annotation that we should look for
+ * @return the list with the methods that have the specified annotation
+ */
+ @SuppressWarnings({ "rawtypes" })
+ private Method[] getSpecificMethods(Class testClass,
+ Class<? extends Annotation> annotation) {
+ Method[] allMethods = testClass.getDeclaredMethods();
+
+ List<Method> methodListResult = new ArrayList<Method>();
+
+ for (Method testMethod : allMethods) {
+ if (testMethod.isAnnotationPresent(annotation)) {
+ methodListResult.add(testMethod);
+ }
+ }
+ return methodListResult.toArray(new Method[] {});
+ }
@Override
public String getName() {
diff --git a/src/main/java/org/apache/sling/performance/PerformanceRunner.java b/src/main/java/org/apache/sling/performance/PerformanceRunner.java
index ecd1bbc..bb646fe 100644
--- a/src/main/java/org/apache/sling/performance/PerformanceRunner.java
+++ b/src/main/java/org/apache/sling/performance/PerformanceRunner.java
@@ -50,80 +50,80 @@ import java.util.List;
public class PerformanceRunner extends BlockJUnit4ClassRunner {
- protected LinkedList<FrameworkMethod> tests = new LinkedList<FrameworkMethod>();
- private List<PerformanceSuiteState> suitesState = new ArrayList<PerformanceSuiteState>();
- public ReportLevel reportLevel = ReportLevel.ClassLevel;
-
- public static enum ReportLevel{
- ClassLevel,
- MethodLevel
- }
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface Parameters {
- public ReportLevel reportLevel() default ReportLevel.ClassLevel;
- }
-
- public PerformanceRunner(Class<?> clazz) throws InitializationError {
- super(clazz);
-
- // set the report level for the tests that are run with the PerformanceRunner
- // by default set to class level for legacy tests compatibility
- if (clazz.getAnnotation(Parameters.class) != null){
- reportLevel = clazz.getAnnotation(Parameters.class).reportLevel();
- }
-
- try {
- computeTests();
- } catch (Exception e) {
- throw new InitializationError(e);
- }
- }
-
- /**
- * Compute the tests that will be run
- *
- * @throws Exception
- */
- protected void computeTests() throws Exception {
- // add normal JUnit tests
- tests.addAll(super.computeTestMethods());
-
- // add the performance tests
- tests.addAll(computePerformanceTests());
-
- // This is called here to ensure the test class constructor is called at
- // least
- // once during testing.
- createTest();
- }
-
- /**
- * Compute performance tests
- *
- * @return the list containing the performance test methods
- * @throws Exception
- */
- protected Collection<? extends FrameworkMethod> computePerformanceTests()
- throws Exception {
- List<FrameworkMethod> tests = new LinkedList<FrameworkMethod>();
-
- List<Object> testObjects = new ArrayList<Object>();
- List<Object> testObjectsTmp = new ArrayList<Object>();
-
-
- ParameterizedTestList testCenter = new ParameterizedTestList();
-
- // Retrieve the test objects included in the Performance test suite
- for (FrameworkMethod method : getTestClass().getAnnotatedMethods(
- PerformanceTestSuite.class)) {
- Object targetObject = getTestClass().getJavaClass().newInstance();
- if (method.getMethod().getReturnType()
- .equals(ParameterizedTestList.class)) {
- testCenter = (ParameterizedTestList) method.getMethod().invoke(
- targetObject);
- testObjectsTmp = testCenter.getTestObjectList();
+ protected LinkedList<FrameworkMethod> tests = new LinkedList<FrameworkMethod>();
+ private List<PerformanceSuiteState> suitesState = new ArrayList<PerformanceSuiteState>();
+ public ReportLevel reportLevel = ReportLevel.ClassLevel;
+
+ public static enum ReportLevel{
+ ClassLevel,
+ MethodLevel
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface Parameters {
+ public ReportLevel reportLevel() default ReportLevel.ClassLevel;
+ }
+
+ public PerformanceRunner(Class<?> clazz) throws InitializationError {
+ super(clazz);
+
+ // set the report level for the tests that are run with the PerformanceRunner
+ // by default set to class level for legacy tests compatibility
+ if (clazz.getAnnotation(Parameters.class) != null){
+ reportLevel = clazz.getAnnotation(Parameters.class).reportLevel();
+ }
+
+ try {
+ computeTests();
+ } catch (Exception e) {
+ throw new InitializationError(e);
+ }
+ }
+
+ /**
+ * Compute the tests that will be run
+ *
+ * @throws Exception
+ */
+ protected void computeTests() throws Exception {
+ // add normal JUnit tests
+ tests.addAll(super.computeTestMethods());
+
+ // add the performance tests
+ tests.addAll(computePerformanceTests());
+
+ // This is called here to ensure the test class constructor is called at
+ // least
+ // once during testing.
+ createTest();
+ }
+
+ /**
+ * Compute performance tests
+ *
+ * @return the list containing the performance test methods
+ * @throws Exception
+ */
+ protected Collection<? extends FrameworkMethod> computePerformanceTests()
+ throws Exception {
+ List<FrameworkMethod> tests = new LinkedList<FrameworkMethod>();
+
+ List<Object> testObjects = new ArrayList<Object>();
+ List<Object> testObjectsTmp = new ArrayList<Object>();
+
+
+ ParameterizedTestList testCenter = new ParameterizedTestList();
+
+ // Retrieve the test objects included in the Performance test suite
+ for (FrameworkMethod method : getTestClass().getAnnotatedMethods(
+ PerformanceTestSuite.class)) {
+ Object targetObject = getTestClass().getJavaClass().newInstance();
+ if (method.getMethod().getReturnType()
+ .equals(ParameterizedTestList.class)) {
+ testCenter = (ParameterizedTestList) method.getMethod().invoke(
+ targetObject);
+ testObjectsTmp = testCenter.getTestObjectList();
// Iterate through all the test cases and see if they have a factory
for (Object testObject : testObjectsTmp) {
@@ -156,138 +156,138 @@ public class PerformanceRunner extends BlockJUnit4ClassRunner {
testObjects.add(testObject);
}
}
- } else {
- throw new InitializationError(
- "Wrong signature for the @PerformanceTestSuite method");
- }
- }
-
- // Retrieve the methods before running the methods from the test suite
- List<FrameworkMethod> beforeSuiteMethods = getTestClass()
- .getAnnotatedMethods(BeforeSuite.class);
- if (beforeSuiteMethods.size() > 1) {
- throw new InitializationError(
- "Only one @BeforeSuite method is allowed for a @PerformanceSuite");
- }
-
- // Retrieve the methods before running the methods from the test suite
- List<FrameworkMethod> afterSuiteMethods = getTestClass()
- .getAnnotatedMethods(AfterSuite.class);
- if (afterSuiteMethods.size() > 1) {
- throw new InitializationError(
- "Only one @AfterSuite method is allowed for a @PerformanceSuite");
- }
-
- PerformanceSuiteState current = null;
- boolean suiteAlreadyRegistered = false;
-
- for (PerformanceSuiteState suiteState : suitesState) {
- if (suiteState.testSuiteName.equals(testCenter.getTestSuiteName())) {
- suiteAlreadyRegistered = true;
- suiteState.incrementNumberOfTestMethodsInSuite();
- current = suiteState;
- break;
- }
- }
-
- // Create a new PerformanceSuiteState object
- PerformanceSuiteState newSuite = new PerformanceSuiteState(
- testCenter.getTestSuiteName());
-
- if (!suiteAlreadyRegistered) {
- if (beforeSuiteMethods.size() == 1) {
- newSuite.setBeforeSuiteMethod(beforeSuiteMethods.get(0).getMethod());
- }
- if (afterSuiteMethods.size() == 1) {
- newSuite.setAfterSuiteMethod(afterSuiteMethods.get(0).getMethod());
- }
-
- current = newSuite;
- newSuite.setTargetObjectSuite(getTestClass().getJavaClass().newInstance());
-
- }
-
- // In case there are any objects retrieved from the Performance Suite
- // we should add them to the tests that will be run and increase the
- // number of methods
- // contained in the PerformanceSuite
- if (!testObjects.isEmpty()) {
- for (Object testObject : testObjects) {
-
- // retrieve the test methods from the test classes
- Method[] testMethods = getSpecificMethods(testObject.getClass(), PerformanceTest.class);
-
- for (Method method : testMethods) {
- FrameworkPerformanceMethod performaceTestMethod =
+ } else {
+ throw new InitializationError(
+ "Wrong signature for the @PerformanceTestSuite method");
+ }
+ }
+
+ // Retrieve the methods before running the methods from the test suite
+ List<FrameworkMethod> beforeSuiteMethods = getTestClass()
+ .getAnnotatedMethods(BeforeSuite.class);
+ if (beforeSuiteMethods.size() > 1) {
+ throw new InitializationError(
+ "Only one @BeforeSuite method is allowed for a @PerformanceSuite");
+ }
+
+ // Retrieve the methods before running the methods from the test suite
+ List<FrameworkMethod> afterSuiteMethods = getTestClass()
+ .getAnnotatedMethods(AfterSuite.class);
+ if (afterSuiteMethods.size() > 1) {
+ throw new InitializationError(
+ "Only one @AfterSuite method is allowed for a @PerformanceSuite");
+ }
+
+ PerformanceSuiteState current = null;
+ boolean suiteAlreadyRegistered = false;
+
+ for (PerformanceSuiteState suiteState : suitesState) {
+ if (suiteState.testSuiteName.equals(testCenter.getTestSuiteName())) {
+ suiteAlreadyRegistered = true;
+ suiteState.incrementNumberOfTestMethodsInSuite();
+ current = suiteState;
+ break;
+ }
+ }
+
+ // Create a new PerformanceSuiteState object
+ PerformanceSuiteState newSuite = new PerformanceSuiteState(
+ testCenter.getTestSuiteName());
+
+ if (!suiteAlreadyRegistered) {
+ if (beforeSuiteMethods.size() == 1) {
+ newSuite.setBeforeSuiteMethod(beforeSuiteMethods.get(0).getMethod());
+ }
+ if (afterSuiteMethods.size() == 1) {
+ newSuite.setAfterSuiteMethod(afterSuiteMethods.get(0).getMethod());
+ }
+
+ current = newSuite;
+ newSuite.setTargetObjectSuite(getTestClass().getJavaClass().newInstance());
+
+ }
+
+ // In case there are any objects retrieved from the Performance Suite
+ // we should add them to the tests that will be run and increase the
+ // number of methods
+ // contained in the PerformanceSuite
+ if (!testObjects.isEmpty()) {
+ for (Object testObject : testObjects) {
+
+ // retrieve the test methods from the test classes
+ Method[] testMethods = getSpecificMethods(testObject.getClass(), PerformanceTest.class);
+
+ for (Method method : testMethods) {
+ FrameworkPerformanceMethod performaceTestMethod =
new FrameworkPerformanceMethod(method, testObject, current, reportLevel);
- tests.add(performaceTestMethod);
- }
+ tests.add(performaceTestMethod);
+ }
if (!suiteAlreadyRegistered) {
- newSuite.incrementNumberOfTestMethodsInSuite();
- }
- }
-
- // add the new suite to the list of suites
- suitesState.add(newSuite);
- }
-
- // Retrieve the performance tests in the case we don't have a
- // performance test suite
- for (FrameworkMethod method : getTestClass().getAnnotatedMethods(PerformanceTest.class)) {
- Object targetObject = getTestClass().getJavaClass().newInstance();
- FrameworkPerformanceMethod performanceTestMethod = new FrameworkPerformanceMethod(
- method.getMethod(), targetObject, current, reportLevel);
- tests.add(performanceTestMethod);
- }
-
- return tests;
- }
-
-
- /**
- * Retrieve specific method from test class
- *
- * @param testClass
- * the test class that we need to search in
- * @param annotation
- * the annotation that we should look for
- * @return the list with the methods that have the specified annotation
- */
- @SuppressWarnings({ "rawtypes" })
- private Method[] getSpecificMethods(Class testClass,
- Class<? extends Annotation> annotation) {
- Method[] allMethods = testClass.getDeclaredMethods();
-
- List<Method> methodListResult = new ArrayList<Method>();
-
- for (Method testMethod : allMethods) {
- if (testMethod.isAnnotationPresent(annotation)) {
- methodListResult.add(testMethod);
- }
- }
- return methodListResult.toArray(new Method[] {});
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.junit.runners.BlockJUnit4ClassRunner#computeTestMethods()
- */
- @Override
- protected List<FrameworkMethod> computeTestMethods() {
- return tests;
- }
-
- /**
- * Need to override method otherwise the validation will fail because of
- * some hardcoded conditions in JUnit
- */
- @Override
- protected void validateInstanceMethods(List<Throwable> errors) {
- validatePublicVoidNoArgMethods(After.class, false, errors);
- validatePublicVoidNoArgMethods(Before.class, false, errors);
- validateTestMethods(errors);
- }
+ newSuite.incrementNumberOfTestMethodsInSuite();
+ }
+ }
+
+ // add the new suite to the list of suites
+ suitesState.add(newSuite);
+ }
+
+ // Retrieve the performance tests in the case we don't have a
+ // performance test suite
+ for (FrameworkMethod method : getTestClass().getAnnotatedMethods(PerformanceTest.class)) {
+ Object targetObject = getTestClass().getJavaClass().newInstance();
+ FrameworkPerformanceMethod performanceTestMethod = new FrameworkPerformanceMethod(
+ method.getMethod(), targetObject, current, reportLevel);
+ tests.add(performanceTestMethod);
+ }
+
+ return tests;
+ }
+
+
+ /**
+ * Retrieve specific method from test class
+ *
+ * @param testClass
+ * the test class that we need to search in
+ * @param annotation
+ * the annotation that we should look for
+ * @return the list with the methods that have the specified annotation
+ */
+ @SuppressWarnings({ "rawtypes" })
+ private Method[] getSpecificMethods(Class testClass,
+ Class<? extends Annotation> annotation) {
+ Method[] allMethods = testClass.getDeclaredMethods();
+
+ List<Method> methodListResult = new ArrayList<Method>();
+
+ for (Method testMethod : allMethods) {
+ if (testMethod.isAnnotationPresent(annotation)) {
+ methodListResult.add(testMethod);
+ }
+ }
+ return methodListResult.toArray(new Method[] {});
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.junit.runners.BlockJUnit4ClassRunner#computeTestMethods()
+ */
+ @Override
+ protected List<FrameworkMethod> computeTestMethods() {
+ return tests;
+ }
+
+ /**
+ * Need to override method otherwise the validation will fail because of
+ * some hardcoded conditions in JUnit
+ */
+ @Override
+ protected void validateInstanceMethods(List<Throwable> errors) {
+ validatePublicVoidNoArgMethods(After.class, false, errors);
+ validatePublicVoidNoArgMethods(Before.class, false, errors);
+ validateTestMethods(errors);
+ }
}
diff --git a/src/main/java/org/apache/sling/performance/ReportLogger.java b/src/main/java/org/apache/sling/performance/ReportLogger.java
index ac4ed49..64dccd9 100644
--- a/src/main/java/org/apache/sling/performance/ReportLogger.java
+++ b/src/main/java/org/apache/sling/performance/ReportLogger.java
@@ -19,9 +19,9 @@ public class ReportLogger {
public static final String REPORTS_DIR = "performance-reports";
- public enum ReportType {
- TXT
- }
+ public enum ReportType {
+ TXT
+ }
/**
* Method the writes the performance report after a test is run
@@ -36,54 +36,54 @@ public class ReportLogger {
*/
public static void writeReport(String testSuiteName, String testCaseName, String className, String methodName,
DescriptiveStatistics statistics, ReportType reportType, PerformanceRunner.ReportLevel reportLevel) throws Exception {
- switch (reportType) {
+ switch (reportType) {
case TXT:
writeReportTxt(testSuiteName, testCaseName, className, methodName, statistics, reportLevel);
break;
default:
throw new Exception("The specified reporting format is not yet supported");
- }
- }
+ }
+ }
- /**
+ /**
* Method the writes the performance report after a test is run, in text format
- *
+ *
* @param testSuiteName
* @param testCaseName
* @param className
* @param methodName
- * @param statistics
+ * @param statistics
* @param reportLevel
* @throws Exception
- */
+ */
public static void writeReportTxt(String testSuiteName, String testCaseName, String className, String methodName,
DescriptiveStatistics statistics, PerformanceRunner.ReportLevel reportLevel) throws Exception {
File reportDir = new File("target/" + REPORTS_DIR);
- if (!reportDir.exists() && !reportDir.mkdir()) {
+ if (!reportDir.exists() && !reportDir.mkdir()) {
throw new IOException("Unable to create " + REPORTS_DIR + " directory");
- }
-
- // need this in the case a user wants to set the suite name from the
- // command line
- // useful if we run the test cases from the command line for example
- // by using maven
- if (testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
- if (System.getProperty("testsuitename") != null) {
- testSuiteName = System.getProperty("testsuitename");
- }
- }
-
- if (reportLevel.equals(PerformanceRunner.ReportLevel.ClassLevel)) {
+ }
+
+ // need this in the case a user wants to set the suite name from the
+ // command line
+ // useful if we run the test cases from the command line for example
+ // by using maven
+ if (testSuiteName.equals(ParameterizedTestList.TEST_CASE_ONLY)) {
+ if (System.getProperty("testsuitename") != null) {
+ testSuiteName = System.getProperty("testsuitename");
+ }
+ }
+
+ if (reportLevel.equals(PerformanceRunner.ReportLevel.ClassLevel)) {
String resultFileName = className;
writeReportClassLevel(resultFileName, testSuiteName, statistics);
} else if (reportLevel.equals(PerformanceRunner.ReportLevel.MethodLevel)) {
String resultFileName = className + "." + methodName;
writeReportMethodLevel(resultFileName, testSuiteName, testCaseName, className, methodName, statistics);
}
- }
-
- /**
+ }
+
+ /**
* Write report for class level tests
*
* @param resultFileName the name of the result file (without extension)
@@ -92,28 +92,28 @@ public class ReportLogger {
*/
private static void writeReportClassLevel(String resultFileName, String testSuiteName,
DescriptiveStatistics statistics) throws IOException {
-
+
File report = getReportFile(resultFileName, ".txt");
- boolean needsPrefix = !report.exists();
- PrintWriter writer = new PrintWriter(
- new FileWriterWithEncoding(report, "UTF-8", true));
- try {
- if (needsPrefix) {
- writer.format("# %-50.50s min 10%% 50%% 90%% max%n", resultFileName);
- }
-
- writer.format(
- "%-52.52s %6.0f %6.0f %6.0f %6.0f %6.0f%n",
- testSuiteName,
- statistics.getMin(),
- statistics.getPercentile(10.0),
- statistics.getPercentile(50.0),
- statistics.getPercentile(90.0),
- statistics.getMax());
+ boolean needsPrefix = !report.exists();
+ PrintWriter writer = new PrintWriter(
+ new FileWriterWithEncoding(report, "UTF-8", true));
+ try {
+ if (needsPrefix) {
+ writer.format("# %-50.50s min 10%% 50%% 90%% max%n", resultFileName);
+ }
+
+ writer.format(
+ "%-52.52s %6.0f %6.0f %6.0f %6.0f %6.0f%n",
+ testSuiteName,
+ statistics.getMin(),
+ statistics.getPercentile(10.0),
+ statistics.getPercentile(50.0),
+ statistics.getPercentile(90.0),
+ statistics.getMax());
} finally {
writer.close();
}
- }
+ }
/**
* Write report for method level tests
@@ -128,56 +128,56 @@ public class ReportLogger {
private static void writeReportMethodLevel(String resultFileName, String testSuiteName, String testCaseName, String className,
String methodName, DescriptiveStatistics statistics) throws IOException {
File report = getReportFile(resultFileName, ".txt");
-
- boolean needsPrefix = !report.exists();
- PrintWriter writer = new PrintWriter(
- new FileWriterWithEncoding(report, "UTF-8", true));
- try {
- if (needsPrefix) {
- writer.format(
+
+ boolean needsPrefix = !report.exists();
+ PrintWriter writer = new PrintWriter(
+ new FileWriterWithEncoding(report, "UTF-8", true));
+ try {
+ if (needsPrefix) {
+ writer.format(
"%-40.40s|%-120.120s|%-80.80s|%-40.40s| DateTime | min | 10%% | 50%% | 90%% | max%n",
- "Test Suite",
+ "Test Suite",
"Test Case",
- "Test Class",
- "Test Method");
- }
-
- writer.format(
+ "Test Class",
+ "Test Method");
+ }
+
+ writer.format(
"%-40.40s|%-120.120s|%-80.80s|%-40.40s|%-20.20s|%7.0f|%9.0f|%9.0f|%9.0f|%9.0f%n",
- testSuiteName,
+ testSuiteName,
(testCaseName.length() < 120) ? (testCaseName) : (testCaseName.substring(0, 115) + "[...]"),
- className,
- methodName,
- getDate(),
- statistics.getMin(),
- statistics.getPercentile(10.0),
- statistics.getPercentile(50.0),
- statistics.getPercentile(90.0),
- statistics.getMax());
- } finally {
- writer.close();
- }
+ className,
+ methodName,
+ getDate(),
+ statistics.getMin(),
+ statistics.getPercentile(10.0),
+ statistics.getPercentile(50.0),
+ statistics.getPercentile(90.0),
+ statistics.getMax());
+ } finally {
+ writer.close();
+ }
+ }
+
+
+ /**
+ * Get the date that will be written into the result file
+ */
+ private static String getDate() {
+ DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ Date date = new Date();
+
+ return dateFormat.format(date);
+ }
+
+ private static File getReportFile(String resultFileName, String extension) {
+ final String folder = "target/" + REPORTS_DIR;
+ final String filename = resultFileName + extension;
+ if(!reportFolderLogged) {
+ logger.info("Writing performance test results under {}", folder);
+ reportFolderLogged = true;
+ }
+ return new File(folder, filename);
}
-
-
- /**
- * Get the date that will be written into the result file
- */
- private static String getDate() {
- DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
- Date date = new Date();
-
- return dateFormat.format(date);
- }
-
- private static File getReportFile(String resultFileName, String extension) {
- final String folder = "target/" + REPORTS_DIR;
- final String filename = resultFileName + extension;
- if(!reportFolderLogged) {
- logger.info("Writing performance test results under {}", folder);
- reportFolderLogged = true;
- }
- return new File(folder, filename);
- }
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.