[jboss-svn-commits] JBoss Common SVN: r4778 - in arquillian/trunk/extensions/performance: src/main and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jul 20 10:15:06 EDT 2010
Author: stalep
Date: 2010-07-20 10:15:06 -0400 (Tue, 20 Jul 2010)
New Revision: 4778
Added:
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java
arquillian/trunk/extensions/performance/src/main/resources/
arquillian/trunk/extensions/performance/src/main/resources/META-INF/
arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/
arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.TestContextAppender
Modified:
arquillian/trunk/extensions/performance/pom.xml
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/Performance.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/PerformanceTestParser.java
arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/TestPerformanceVerifier.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
arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/ejb/WorkHardEjbTestCase.java
Log:
[ARQ-147]
rewrote to use TestContextAppender.
note: do not work yet because of defects in start/stop measuerement
Modified: arquillian/trunk/extensions/performance/pom.xml
===================================================================
--- arquillian/trunk/extensions/performance/pom.xml 2010-07-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/pom.xml 2010-07-20 14:15:06 UTC (rev 4778)
@@ -24,7 +24,11 @@
<!-- Properties -->
<properties>
- <!-- Versioning -->
+ <maven.test.failure.ignore>true</maven.test.failure.ignore>
+ <!-- Versioning -->
+ <!--
+ <version.weld_core>1.0.2-SNAPSHOT</version.weld_core>
+ -->
<version.weld_core>1.0.1-SP1</version.weld_core>
<version.org.apache.openejb_openejb.core>3.1.2</version.org.apache.openejb_openejb.core>
<version.openwebbeans>1.0.0-M4</version.openwebbeans>
@@ -37,10 +41,7 @@
<profiles>
<profile>
- <id>default</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
+ <id>not-used</id>
<dependencies>
<dependency> <!-- Need on all profiles except Glassfish to compile, api is not 100% up to date with final spec -->
<groupId>org.jboss.ejb3</groupId>
@@ -63,11 +64,14 @@
</build>
</profile>
<profile>
- <id>weld-embedded</id>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
- <artifactId>arquillian-weld-se-embedded</artifactId>
+ <artifactId>arquillian-weld-se-embedded-1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -91,7 +95,7 @@
<dependency>
<groupId>javax.el</groupId>
<artifactId>el-api</artifactId>
- <version>1.2</version>
+ <version>2.2</version>
</dependency>
</dependencies>
<dependencyManagement>
@@ -120,64 +124,15 @@
</plugins>
</build>
</profile>
- <profile>
- <id>jbossas-remote-60</id>
- <dependencies>
- <dependency>
- <groupId>org.jboss.arquillian.container</groupId>
- <artifactId>arquillian-jbossas-remote-6</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency> <!-- Need on all profiles except Glassfish to compile, api is not 100% up to date with final spec -->
- <groupId>org.jboss.ejb3</groupId>
- <artifactId>jboss-ejb3-api</artifactId>
- <version>${version.jboss_ejb3}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <testResources>
- <testResource>
- <directory>src/test/jboss-resources</directory>
- </testResource>
- </testResources>
- </build>
- </profile>
-
</profiles>
<!-- Dependencies -->
<dependencies>
-
- <!--
- org.jboss.arquillian
- -->
<dependency>
<groupId>org.jboss.arquillian</groupId>
- <artifactId>arquillian-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-spi</artifactId>
<version>${project.version}</version>
</dependency>
-
<dependency>
- <groupId>org.jboss.shrinkwrap</groupId>
- <artifactId>shrinkwrap-impl-base</artifactId>
- </dependency>
- <dependency>
- <groupId>org.jboss.shrinkwrap</groupId>
- <artifactId>shrinkwrap-spi</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.jboss.ejb3</groupId>
- <artifactId>jboss-ejb3-api</artifactId>
- <version>${version.jboss_ejb3}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>1.0-SP1</version>
@@ -195,8 +150,7 @@
<version>1.0</version>
<scope>test</scope>
</dependency>
-
- <dependency>
+ <dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-junit</artifactId>
<version>${project.version}</version>
@@ -204,18 +158,18 @@
</dependency>
<!-- External Projects -->
+ <!--
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
-
+ -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
-
</dependencies>
<build>
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/Performance.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/Performance.java 2010-07-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/annotation/Performance.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -31,5 +31,10 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Performance {
+ /**
+ * Specify how long the method maximum should take i ms
+ *
+ * @return
+ */
double time();
}
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceResultStore.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -1,13 +1,18 @@
package org.jboss.arquillian.performance.event;
import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+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.event.suite.EventHandler;
@@ -26,14 +31,12 @@
public class PerformanceResultStore implements EventHandler<SuiteEvent>
{
private final String folder = "arq-perf";
- private static final SimpleDateFormat fileFormat = new SimpleDateFormat("dd.MM.yy.mm.ss");
-// private final String filename = ""
+ private final SimpleDateFormat fileFormat = new SimpleDateFormat("dd.MM.yy.mm.ss");
public void callback(Context context, SuiteEvent event) throws Exception
{
PerformanceSuiteResult suiteResult = (PerformanceSuiteResult) context.get(PerformanceSuiteResult.class);
-
-
+
if(suiteResult != null)
{
//TODO: compare, fetch, save.
@@ -46,15 +49,82 @@
private void comparePerformanceSuiteResults(PerformanceSuiteResult suiteResult)
{
+ 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");
+ }
+
+ //everything went well, now we just store the new result and we're done
storePerformanceSuiteResult(suiteResult);
}
- private List<PerformanceSuiteResult> findEarlierResults(PerformanceSuiteResult suiteResult)
+ private boolean doCompareResults(PerformanceSuiteResult oldResult, PerformanceSuiteResult newResult)
{
-
- return null;
+ for(String className : oldResult.getResults().keySet())
+ {
+ PerformanceClassResult oldClassResult = oldResult.getResult(className);
+ PerformanceClassResult newClassResult = newResult.getResult(className);
+ oldClassResult.compareResults(newClassResult);
+ }
+ // TODO Auto-generated method stub
+ return true;
}
+
+ /**
+ *
+ * @param suiteResult
+ * @return
+ */
+ private List<PerformanceSuiteResult> findEarlierResults(final PerformanceSuiteResult currentResult)
+ {
+ File perfDir = new File(System.getProperty("user.dir")+File.separator+folder);
+ File[] files = perfDir.listFiles(new FileFilter() {
+
+ public boolean accept(File pathname)
+ {
+ if(pathname.getName().startsWith(currentResult.getName()))
+ return true;
+ else
+ return false;
+ }
+
+ });
+ List<PerformanceSuiteResult> prevResults = new ArrayList<PerformanceSuiteResult>();
+ for(File f : files)
+ {
+ System.out.println("THESE ARE OUR PREV STORED TESTS: "+f.getName());
+ PerformanceSuiteResult result = getResultFromFile(f);
+ if(result != null)
+ prevResults.add(result);
+ }
+ return prevResults;
+ }
+ private PerformanceSuiteResult getResultFromFile(File file)
+ {
+ try
+ {
+ FileInputStream fis = new FileInputStream(file);
+ ObjectInputStream ois = new ObjectInputStream(fis);
+ return (PerformanceSuiteResult) ois.readObject();
+ }
+ catch(IOException ioe)
+ {
+ return null;
+ }
+ catch (ClassNotFoundException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
/**
* 1. make sure folder exists, if not create folder
* 2. generate file name
Added: 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 (rev 0)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestContextAppender.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -0,0 +1,39 @@
+/*
+ * 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.Context;
+import org.jboss.arquillian.spi.TestContextAppender;
+import org.jboss.arquillian.spi.event.suite.Test;
+
+/**
+ *
+ * A PerformanceTestContextAppender.
+ *
+ * @author <a href="mailto:stale.pedersen at jboss.org">Stale W. Pedersen</a>
+ * @version $Revision: 1.1 $
+ */
+public class PerformanceTestContextAppender implements TestContextAppender
+{
+
+ public void append(Context context)
+ {
+ context.register(Test.class, new TestPerformanceVerifier());
+
+ }
+
+}
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/PerformanceTestParser.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -20,6 +20,7 @@
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.TestClass;
import org.jboss.arquillian.spi.event.suite.ClassEvent;
import org.jboss.arquillian.spi.event.suite.EventHandler;
@@ -40,7 +41,7 @@
parsePerformanceRules(context, event.getTestClass());
}
- public void parsePerformanceRules(Context context, Class testClass)
+ public void parsePerformanceRules(Context context, TestClass testClass)
{
PerformanceTest performanceTest = (PerformanceTest) testClass.getAnnotation(PerformanceTest.class);
if(performanceTest != null)
Modified: arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/TestPerformanceVerifier.java
===================================================================
--- arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/TestPerformanceVerifier.java 2010-07-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/event/TestPerformanceVerifier.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -60,8 +60,11 @@
performance.time() < (result.getEnd()-result.getStart()))
{
result.setStatus(Status.FAILED);
- result.setThrowable(new PerformanceException("The test didnt finish within the specified time: "+performance.time()+"ms"));
+ result.setThrowable(
+ new PerformanceException("The test didnt finish within the specified time: "
+ +performance.time()+"ms, it took "+(result.getEnd()-result.getStart())+"ms."));
}
+ System.out.println("The test took "+(result.getEnd()-result.getStart())+"ms.");
// fetch suiteResult, get the correct classResult and append the test to that
// classResult.
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceClassResult.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -48,6 +48,15 @@
{
return methodResults;
}
+
+ public PerformanceMethodResult getMethodResult(String methodName)
+ {
+ for(PerformanceMethodResult pmr : methodResults)
+ if(pmr.getTestMethod().equals(methodName))
+ return pmr;
+
+ return null;
+ }
public void addMethodResult(PerformanceMethodResult methodResult)
{
@@ -73,6 +82,17 @@
{
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/main/java/org/jboss/arquillian/performance/meta/PerformanceMethodResult.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -65,4 +65,18 @@
{
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())
+ {
+ System.out.println("WE FAILED");
+ throw new RuntimeException("Method1 actual time: "+actualTime+
+ ", Method2: "+methodResult.getActualTime()+
+ ", threshold: "+resultsThreshold);
+ }
+
+ }
}
Added: arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.TestContextAppender
===================================================================
--- arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.TestContextAppender (rev 0)
+++ arquillian/trunk/extensions/performance/src/main/resources/META-INF/services/org.jboss.arquillian.spi.TestContextAppender 2010-07-20 14:15:06 UTC (rev 4778)
@@ -0,0 +1 @@
+org.jboss.arquillian.performance.event.PerformanceTestContextAppender
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/HardWorker.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -10,6 +10,23 @@
@Produces @Named @WorkHard double workingHard()
{
+
+ Exception e = new RuntimeException();
+ System.out.println("stacktrace before sleeping");
+ e.printStackTrace();
+ try
+ {
+ long time = System.currentTimeMillis();
+ System.out.println("current time before sleep: "+System.currentTimeMillis());
+ Thread.currentThread().sleep(2000);
+ System.out.println("slept for: "+(System.currentTimeMillis()-time));
+ System.out.println("current time after sleep: "+System.currentTimeMillis());
+ }
+ catch (InterruptedException ie)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
return 21;
}
}
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-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/cdi/WorkHardCdiTestCase.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -40,13 +40,12 @@
}
/**
- * This method is supposed to fail!
+ * This method is supposed to fail with @Performance(time=1)
*
* @throws Exception
*/
@Test
- //@Performance(time=0.01)
- @Performance(time=10)
+ @Performance(time=1)
public void doHardWorkThatFails() throws Exception
{
Assert.assertEquals(21, hardWorker, 0d);
Modified: arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/ejb/WorkHardEjbTestCase.java
===================================================================
--- arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/ejb/WorkHardEjbTestCase.java 2010-07-19 18:02:57 UTC (rev 4777)
+++ arquillian/trunk/extensions/performance/src/test/java/org/jboss/arquillian/performance/ejb/WorkHardEjbTestCase.java 2010-07-20 14:15:06 UTC (rev 4778)
@@ -18,7 +18,7 @@
@Deployment
public static JavaArchive createTestArchive() {
- return ShrinkWrap.create("test.jar", JavaArchive.class)
+ return ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClasses(WorkHard.class, WorkHardBean.class);
}
More information about the jboss-svn-commits
mailing list