[jboss-svn-commits] JBoss Common SVN: r4792 - in arquillian/trunk/extensions/performance/src: main/java/org/jboss/arquillian/performance/event and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 21 19:54:17 EDT 2010
Author: stalep
Date: 2010-07-21 19:54:16 -0400 (Wed, 21 Jul 2010)
New Revision: 4792
Added:
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceBeforeClassContextAppender.java
arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.ClassContextAppender
Removed:
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/ResultComparator.java
Modified:
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/PerformanceTest.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceResultStore.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestParser.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/exception/PerformanceException.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceClassResult.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceMethodResult.java
arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/HardWorker.java
arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/WorkHardCdiTestCase.java
Log:
[ARQ-225]
comparing results could probably be more efficient, but everything works.
- mergeTestResults() is not implemented yet.
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/PerformanceTest.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/PerformanceTest.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/PerformanceTest.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -30,7 +30,12 @@
* It is possible to specify if you want to compare each test method or
* the combined total time of all the test methods.
*
+ * How threshold is calculated:
+ * threshold * previous_result < latest result.
+ * Note that threshold can not be lower than 1.
*
+ * Test results are stored in the folder arq-tests on project root.
+ *
* @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
* @version $Revision: 1.1 $
*/
@@ -39,7 +44,17 @@
@Inherited
public @interface PerformanceTest {
- boolean reportDegradingResults() default true;
+ /**
+ * Set the threshold of comparing new and old results. Can not be lower than 1 (which is default).
+ *
+ * @return
+ */
double resultsThreshold() default 1d;
+ /**
+ * Will cause the performance check to merge previous results and only store the
+ * best result.
+ *
+ * @return
+ */
boolean mergeTestResults() default false;
}
Added: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceBeforeClassContextAppender.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceBeforeClassContextAppender.java (rev 0)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceBeforeClassContextAppender.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.
+ */
+package org.jboss.arquillian.performance.event;
+
+import org.jboss.arquillian.spi.ClassContextAppender;
+import org.jboss.arquillian.spi.Context;
+import org.jboss.arquillian.spi.event.suite.BeforeClass;
+
+/**
+ * A PerformanceBeforeClassContextAppender.
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ * @version $Revision: 1.1 $
+ */
+public class PerformanceBeforeClassContextAppender implements ClassContextAppender
+{
+ public void append(Context context)
+ {
+ context.register(BeforeClass.class, new PerformanceTestParser());
+ }
+}
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceResultStore.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceResultStore.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceResultStore.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -1,3 +1,19 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed 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.
+ */
package org.jboss.arquillian.performance.event;
import java.io.File;
@@ -12,68 +28,79 @@
import java.util.Date;
import java.util.List;
+import org.jboss.arquillian.performance.exception.PerformanceException;
import org.jboss.arquillian.performance.meta.PerformanceClassResult;
import org.jboss.arquillian.performance.meta.PerformanceSuiteResult;
import org.jboss.arquillian.spi.Context;
+import org.jboss.arquillian.spi.TestResult;
import org.jboss.arquillian.spi.event.suite.EventHandler;
-import org.jboss.arquillian.spi.event.suite.SuiteEvent;
+import org.jboss.arquillian.spi.event.suite.Test;
/**
+ * Compares and stores test durations.
*
+ * fired during test
*
- *
- * fired during afterSuite
- *
* @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
* @version $Revision: 1.1 $
*/
-public class PerformanceResultStore implements EventHandler<SuiteEvent>
+public class PerformanceResultStore implements EventHandler<Test>
{
private final String folder = "arq-perf";
private final SimpleDateFormat fileFormat = new SimpleDateFormat("dd.MM.yy.mm.ss");
- public void callback(Context context, SuiteEvent event) throws Exception
+ public void callback(Context context, Test event) throws Exception
{
- PerformanceSuiteResult suiteResult = (PerformanceSuiteResult) context.get(PerformanceSuiteResult.class);
+ PerformanceSuiteResult suiteResult = (PerformanceSuiteResult) context.getParentContext().getParentContext().get(PerformanceSuiteResult.class);
if(suiteResult != null)
{
- //TODO: compare, fetch, save.
- System.out.println("SuiteResult is ON!!!");
- comparePerformanceSuiteResults(suiteResult);
+ try
+ {
+ comparePerformanceSuiteResults(suiteResult, event.getTestMethod().getName());
+ }
+ catch(PerformanceException pe)
+ {
+ TestResult result = context.get(TestResult.class);
+ if(result != null)
+ {
+ result.setThrowable(pe);
+ }
+ }
}
- else
- System.out.println("SUITERESULT IS NULL");
}
- private void comparePerformanceSuiteResults(PerformanceSuiteResult suiteResult)
+ private void comparePerformanceSuiteResults(PerformanceSuiteResult suiteResult, String testMethod) throws PerformanceException
{
List<PerformanceSuiteResult> prevResults = findEarlierResults(suiteResult);
for(PerformanceSuiteResult result : prevResults)
{
- if(!doCompareResults(result, suiteResult))
- //throw some exception
- System.out.println("the new result wasnt within the specified delta");
- else
- System.out.println("the new result is OK");
+ doCompareResults(result, suiteResult, testMethod);
}
//everything went well, now we just store the new result and we're done
storePerformanceSuiteResult(suiteResult);
}
- private boolean doCompareResults(PerformanceSuiteResult oldResult, PerformanceSuiteResult newResult)
+ private void doCompareResults(PerformanceSuiteResult oldResult,
+ PerformanceSuiteResult newResult,
+ String testMethod) throws PerformanceException
{
for(String className : oldResult.getResults().keySet())
{
+
PerformanceClassResult oldClassResult = oldResult.getResult(className);
- PerformanceClassResult newClassResult = newResult.getResult(className);
- oldClassResult.compareResults(newClassResult);
+ if(oldClassResult.getMethodResult(testMethod) != null)
+ {
+ oldClassResult.getMethodResult(testMethod).compareResults(
+ newResult.getResult(className).getMethodResult(testMethod),
+ oldClassResult.getPerformanceSpecs().resultsThreshold());
+ }
+
}
- // TODO Auto-generated method stub
- return true;
+
}
/**
@@ -98,7 +125,7 @@
List<PerformanceSuiteResult> prevResults = new ArrayList<PerformanceSuiteResult>();
for(File f : files)
{
- System.out.println("THESE ARE OUR PREV STORED TESTS: "+f.getName());
+// System.out.println("THESE ARE OUR PREV STORED TESTS: "+f.getName());
PerformanceSuiteResult result = getResultFromFile(f);
if(result != null)
prevResults.add(result);
@@ -152,6 +179,7 @@
}
catch(IOException ex)
{
+ System.err.println("Storing test results failed.");
ex.printStackTrace();
}
}
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -33,7 +33,11 @@
public void append(Context context)
{
context.register(Test.class, new TestPerformanceVerifier());
+ context.register(Test.class, new PerformanceResultStore());
+
+
+
}
}
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestParser.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestParser.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestParser.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -54,16 +54,13 @@
if(suitePerformance == null)
{
suitePerformance = new PerformanceSuiteResult(classPerformance.getTestClassName());
- System.out.println("adding performancesuiteresult to context");
+// System.out.println("adding performancesuiteresult to context");
context.getParentContext().add(PerformanceSuiteResult.class, suitePerformance);
}
suitePerformance.addClassResult(testClass.getName(), classPerformance);
// setThreshold(performanceTest.resultsThreshold());
- System.out.println("PerformanceTest is: "+performanceTest.resultsThreshold());
- }
- else
- System.out.println("PerformanceTest is NULL!");
-
+// System.out.println("PerformanceTest is: "+performanceTest.resultsThreshold());
+ }
}
}
Deleted: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/ResultComparator.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/ResultComparator.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/ResultComparator.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -1,23 +0,0 @@
-package org.jboss.arquillian.performance.event;
-
-import org.jboss.arquillian.spi.Context;
-import org.jboss.arquillian.spi.event.suite.EventHandler;
-import org.jboss.arquillian.spi.event.suite.SuiteEvent;
-
-/**
- *
- *
- *
- * fired in afterSuite.
- *
- * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
- * @version $Revision: 1.1 $
- */
-public class ResultComparator implements EventHandler<SuiteEvent>
-{
-
- public void callback(Context context, SuiteEvent event) throws Exception
- {
- System.out.println("resultComparator");
- }
-}
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/exception/PerformanceException.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/exception/PerformanceException.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/exception/PerformanceException.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -17,7 +17,7 @@
package org.jboss.arquillian.performance.exception;
/**
- * A PerformanceException.
+ * A PerformanceException, will be thrown when a performance rule have been breached.
*
* @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
* @version $Revision: 1.1 $
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceClassResult.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceClassResult.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceClassResult.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -21,7 +21,6 @@
import java.util.List;
import org.jboss.arquillian.performance.annotation.PerformanceTest;
-
/**
* A PerformanceClassResult.
*
@@ -82,17 +81,5 @@
{
this.testClassName = testClassName;
}
-
- public void compareResults(PerformanceClassResult pcr)
- {
- if(pcr == null)
- throw new NullPointerException("Compared class is null!");
-
- for(PerformanceMethodResult pmr : getMethodResults())
- {
- pmr.compareResults(pcr.getMethodResult(pmr.getTestMethod()), performanceSpecs.resultsThreshold());
- }
- }
-
}
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceMethodResult.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceMethodResult.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceMethodResult.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -19,6 +19,8 @@
import java.io.Serializable;
import java.lang.reflect.Method;
+import org.jboss.arquillian.performance.exception.PerformanceException;
+
/**
* A PerformanceMethodResult.
*
@@ -65,16 +67,16 @@
{
this.testMethod = testMethod;
}
- public void compareResults(PerformanceMethodResult methodResult, double resultsThreshold)
- {
- System.out.println("methods compared: "+testMethod+", and: "+methodResult.getTestMethod());
- System.out.println("Comparing: "+actualTime+" to: "+methodResult.getActualTime());
- System.out.println("Threshold is: "+resultsThreshold);
- if((resultsThreshold +1) * actualTime < methodResult.getActualTime())
+ public void compareResults(PerformanceMethodResult methodResult, double resultsThreshold) throws PerformanceException
+ {
+ if(resultsThreshold < 1)
+ resultsThreshold = 1;
+// System.out.println("Comparing "+testMethod+", was: "+actualTime+", latest result: "
+// +methodResult.getActualTime()+", threshold: "+resultsThreshold);
+ if(resultsThreshold * actualTime < methodResult.getActualTime())
{
- System.out.println("WE FAILED");
- throw new RuntimeException("Method1 actual time: "+actualTime+
- ", Method2: "+methodResult.getActualTime()+
+ throw new PerformanceException("Degrading results; earlier result for method: "+
+ testMethod+", was: "+actualTime+", latest result: "+methodResult.getActualTime()+
", threshold: "+resultsThreshold);
}
Added: arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.ClassContextAppender
===================================================================
--- arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.ClassContextAppender (rev 0)
+++ arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.ClassContextAppender 2010-07-21 23:54:16 UTC (rev 4792)
@@ -0,0 +1 @@
+org.jboss.arquillian.performance.event.PerformanceBeforeClassContextAppender
Modified: arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/HardWorker.java
===================================================================
--- arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/HardWorker.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/HardWorker.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -6,7 +6,7 @@
{
try
{
- Thread.currentThread().sleep(10);
+ Thread.sleep(10);
}
catch (InterruptedException ie)
{
Modified: arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/WorkHardCdiTestCase.java
===================================================================
--- arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/WorkHardCdiTestCase.java 2010-07-21 22:28:54 UTC (rev 4791)
+++ arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/WorkHardCdiTestCase.java 2010-07-21 23:54:16 UTC (rev 4792)
@@ -14,7 +14,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
- at PerformanceTest(reportDegradingResults=true)
+ at PerformanceTest(resultsThreshold=2)
@RunWith(Arquillian.class)
public class WorkHardCdiTestCase
{
More information about the jboss-svn-commits
mailing list