Status on the Maven2 build and on our Functional testing set up

Vincent Massol vincent at massol.net
Wed May 2 15:37:53 CEST 2007


Hi,

I need to document all this but I wanted to give you a heads up on  
our Maven2 build:

* It's fully functional but requires Maven 2.1 to fully work (this is  
due to bugs in 2.0.6 which is fixed in 2.1). As 2.1 isn't released  
yet, I've made a version available at
   http://xwiki.org/maven-2.1-SNAPSHOT.zip

* What does the m2 build currently do:
   - it builds everything including the standalone distribution.  
Note: it doesn't generate the NSIS exe yet.
   - we can generate artifacts for various databases (we have 3  
configured: HSQLDB, MySQL and PostGreSQL). However the application/  
and application-test/ modules currently only work with HSQLDB and the  
database/ module needs that your database be started if you're not  
using HSQLDB (the default).
   - it runs selenium tests written as junit tests and located in  
xwiki/application-test/src/test/it

* The full build currently takes close to 3mn here. I'll exclude the  
functional tests from the default build as they'll start to take too  
long as soon as we start having more tests. I'll create a profile  
called "integration-tests" for running them. Our CI tool will use it.

* We've installed a CI tool at http://teamcity.xwiki.org but we have  
some issues with the svn checkout which hangs. I need to figure out  
what's wrong.

* What's left for the m2 build:
   - some fine tuning
   - configure it so that we can release directly on objectweb's m2  
repo at the click of a button
   - NSIS integration
   - move the tests in xwiki/tests or rewrite them
   - review the JAR version differences with the Ant build and try to  
align them. It's probably a good time to upgrade all our jars to use  
the latest version of libraries too.

* A note on Selenium tests. I've set up an infrastructure so that any  
tests dropped in xwiki/application-test/src/test/it gets executed.  
Don't hesitate to add new tests there. To whet your appetite here's  
an example of a login test to show you how easy it is (yeah I know,  
that test is easy :)):

public class LoginTest extends AbstractSeleniumTestCase
{
     public void setUp() throws Exception
     {
         super.setUp();
         open("/xwiki/bin/view/Main/");

         // Verify that the user isn't logged in
         if (isAuthenticated()) {
             logout();
         }

         goToLoginPage();
     }

     public void testLogAsAdmin()
     {
         setFieldValue("j_username", "Admin");
         setFieldValue("j_password", "admin");
         checkField("rememberme");
         submit();

         assertTrue("Admin user has not been authenticated",  
isAuthenticated());
     }

     public void testLogWithWrongPassword()
     {
         setFieldValue("j_username", "Admin");
         setFieldValue("j_password", "wrong password");
         submit();

         assertTextPresent("Wrong password");
     }

     public void testLogWithInvalidUsername()
     {
         setFieldValue("j_username", "non existent user");
         setFieldValue("j_password", "admin");
         submit();

         assertTextPresent("Wrong user name");
     }
}

TODO: I'm going to try writing some tests for the WYSIWYG editor  
right now and see how hard it gets.

Comments are most welcome.

Thanks
-Vincent




More information about the devs mailing list