Revision: 915 http://jwebunit.svn.sourceforge.net/jwebunit/?rev=915&view=rev Author: henryju Date: 2011-09-22 09:18:05 +0000 (Thu, 22 Sep 2011) Log Message: ----------- Use tempus-fugit instead of custom code to run parallel test.
Modified Paths: -------------- trunk/jwebunit-commons-tests/pom.xml Added Paths: ----------- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ConcurrentJWebUnitTest.java Removed Paths: ------------- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/JUnitPerfTest.java trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/Concurrent.java trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/ConcurrentRule.java Modified: trunk/jwebunit-commons-tests/pom.xml =================================================================== --- trunk/jwebunit-commons-tests/pom.xml 2011-08-22 09:27:38 UTC (rev 914) +++ trunk/jwebunit-commons-tests/pom.xml 2011-09-22 09:18:05 UTC (rev 915) @@ -30,11 +30,18 @@ <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> + <version>1.2.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> + <version>2.0.1</version> </dependency> + <dependency> + <groupId>com.google.code.tempus-fugit</groupId> + <artifactId>tempus-fugit</artifactId> + <version>1.1</version> + </dependency> </dependencies> <properties> <topDirectoryLocation>..</topDirectoryLocation> Copied: trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ConcurrentJWebUnitTest.java (from rev 913, trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/JUnitPerfTest.java) =================================================================== --- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ConcurrentJWebUnitTest.java (rev 0) +++ trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/ConcurrentJWebUnitTest.java 2011-09-22 09:18:05 UTC (rev 915) @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2011, JWebUnit team. + * + * This file is part of JWebUnit. + * + * JWebUnit is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * JWebUnit is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with JWebUnit. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sourceforge.jwebunit.tests; + +import static net.sourceforge.jwebunit.junit.JWebUnit.assertTitleEquals; +import static net.sourceforge.jwebunit.junit.JWebUnit.beginAt; +import static net.sourceforge.jwebunit.junit.JWebUnit.clickLinkWithText; +import static net.sourceforge.jwebunit.junit.JWebUnit.setBaseUrl; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import com.google.code.tempusfugit.concurrency.annotations.Repeating; + +import com.google.code.tempusfugit.concurrency.annotations.Concurrent; + +import com.google.code.tempusfugit.concurrency.ConcurrentRule; + +import com.google.code.tempusfugit.concurrency.RepeatingRule; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; + + +/** + * Test parallel execution of JWebUnit. + * + * @author Julien Henry + */ +public class ConcurrentJWebUnitTest extends JWebUnitAPITestCase { + + public void setUp() throws Exception { + super.setUp(); + setBaseUrl(HOST_PATH + "/NavigationTest"); + } + + @Rule public Timeout timeoutRule = new Timeout(2000); + + @Rule public ConcurrentRule concurrently = new ConcurrentRule(); + @Rule public RepeatingRule repeatedly = new RepeatingRule(); + + @Test + @Concurrent(count = 5) + @Repeating (repetition = 10) + public void testClickLinkWithTextN() { + beginAt("/pageWithLink.html"); + assertTitleEquals("pageWithLink"); + + clickLinkWithText("an active link", 0); + assertTitleEquals("targetPage"); + + beginAt("/pageWithLink.html"); + clickLinkWithText("an active link", 1); + + assertTitleEquals("targetPage2"); + beginAt("/pageWithLink.html"); + try { + clickLinkWithText("an active link", 2); + fail(); + } catch (AssertionError expected) { + assertEquals("Link with text [an active link] and index [2] " + + "not found in response.", expected.getMessage()); + } + assertTitleEquals("pageWithLink"); + } + +} \ No newline at end of file Deleted: trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/JUnitPerfTest.java =================================================================== --- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/JUnitPerfTest.java 2011-08-22 09:27:38 UTC (rev 914) +++ trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/JUnitPerfTest.java 2011-09-22 09:18:05 UTC (rev 915) @@ -1,78 +0,0 @@ -/** - * Copyright (c) 2011, JWebUnit team. - * - * This file is part of JWebUnit. - * - * JWebUnit is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * JWebUnit is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with JWebUnit. If not, see <http://www.gnu.org/licenses/>. - */ - -package net.sourceforge.jwebunit.tests; - -import static net.sourceforge.jwebunit.junit.JWebUnit.assertTitleEquals; -import static net.sourceforge.jwebunit.junit.JWebUnit.beginAt; -import static net.sourceforge.jwebunit.junit.JWebUnit.clickLinkWithText; -import static net.sourceforge.jwebunit.junit.JWebUnit.setBaseUrl; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import net.sourceforge.jwebunit.tests.util.Concurrent; -import net.sourceforge.jwebunit.tests.util.ConcurrentRule; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.Timeout; - - -/** - * Test junit perf integration. - * - * @author Julien Henry - */ -public class JUnitPerfTest extends JWebUnitAPITestCase { - - public void setUp() throws Exception { - super.setUp(); - setBaseUrl(HOST_PATH + "/NavigationTest"); - } - - @Rule - public Timeout timeoutRule = new Timeout(1000); - - @Rule - public ConcurrentRule concurrentRule = new ConcurrentRule(); - - @Test - @Concurrent(5) - public void testClickLinkWithTextN() { - beginAt("/pageWithLink.html"); - assertTitleEquals("pageWithLink"); - - clickLinkWithText("an active link", 0); - assertTitleEquals("targetPage"); - - beginAt("/pageWithLink.html"); - clickLinkWithText("an active link", 1); - - assertTitleEquals("targetPage2"); - beginAt("/pageWithLink.html"); - try { - clickLinkWithText("an active link", 2); - fail(); - } catch (AssertionError expected) { - assertEquals("Link with text [an active link] and index [2] " - + "not found in response.", expected.getMessage()); - } - assertTitleEquals("pageWithLink"); - } - -} \ No newline at end of file Deleted: trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/Concurrent.java =================================================================== --- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/Concurrent.java 2011-08-22 09:27:38 UTC (rev 914) +++ trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/Concurrent.java 2011-09-22 09:18:05 UTC (rev 915) @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2011, JWebUnit team. - * - * This file is part of JWebUnit. - * - * JWebUnit is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * JWebUnit is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with JWebUnit. If not, see <http://www.gnu.org/licenses/>. - */ -package net.sourceforge.jwebunit.tests.util; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Mathieu Carbou (mathieu.car...@gmail.com) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD}) -public @interface Concurrent { - int value() default 10; -} Deleted: trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/ConcurrentRule.java =================================================================== --- trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/ConcurrentRule.java 2011-08-22 09:27:38 UTC (rev 914) +++ trunk/jwebunit-commons-tests/src/main/java/net/sourceforge/jwebunit/tests/util/ConcurrentRule.java 2011-09-22 09:18:05 UTC (rev 915) @@ -1,96 +0,0 @@ -/** - * Copyright (c) 2011, JWebUnit team. - * - * This file is part of JWebUnit. - * - * JWebUnit is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * JWebUnit is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with JWebUnit. If not, see <http://www.gnu.org/licenses/>. - */ -package net.sourceforge.jwebunit.tests.util; - -import org.junit.rules.MethodRule; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.Statement; - -import java.util.concurrent.CountDownLatch; - -/** - * @author Mathieu Carbou (mathieu.car...@gmail.com) - */ -public final class ConcurrentRule implements MethodRule { - - public Statement apply(final Statement statement, final FrameworkMethod frameworkMethod, final Object o) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - Concurrent concurrent = frameworkMethod.getAnnotation(Concurrent.class); - if (concurrent == null) - statement.evaluate(); - else { - final String name = frameworkMethod.getName(); - final Thread[] threads = new Thread[concurrent.value()]; - final CountDownLatch go = new CountDownLatch(1); - final CountDownLatch finished = new CountDownLatch(threads.length); - final Throwable[] fThrown = new Throwable[threads.length]; - for (int i = 0; i < threads.length; i++) { - threads[i] = new Thread(new MyIndexedRunnable(i) { - - public void run() { - try { - go.await(); - statement.evaluate(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } catch (Throwable throwable) { - fThrown[getIndex()] = throwable; - if (throwable instanceof RuntimeException) - throw (RuntimeException) throwable; - if (throwable instanceof Error) - throw (Error) throwable; - RuntimeException r = new RuntimeException(throwable.getMessage(), throwable); - r.setStackTrace(throwable.getStackTrace()); - throw r; - } finally { - finished.countDown(); - } - } - }, name + "-Thread-" + i); - threads[i].start(); - } - go.countDown(); - finished.await(); - //Check exceptions - for (int i = 0; i < threads.length; i++) { - if (fThrown[i] != null) { - throw fThrown[i]; - } - } - } - } - }; - } - - private abstract class MyIndexedRunnable implements Runnable { - - private int index; - - public MyIndexedRunnable(int index) { - this.index = index; - } - - public int getIndex() { - return index; - } - - } -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2dcopy1 _______________________________________________ JWebUnit-development mailing list JWebUnit-development@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jwebunit-development