[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