Tuesday, December 9, 2008

Web Services Test Forum

We've been working with IBM and others on the formation of the WSTF. Thanks to Andrew Dinn for the Web Services Transactions scenario work and Alessio Soldano for our WS-Addressing participation. Interoperability is something that I've been pushing for many years and we've always participated in as many of the official standards-based events as we possibly can. We're also members of WS-I and Apache Stonehenge, so you can be assured that Web Service interoperability will remain high on our agenda.

Monday, December 1, 2008

Java TOAST - A New Java Multi-threaded Test Automation Tool

I've been working on a Java test scripting tool which I have been using to help automate running of crash recovery tests for the JBossTS Web Service Transactions code. The tool is provisionally called Java TOAST (Thread Orchestration Automation Scripting Tool) and I'm planning to submit a presentation on it to Java One. I have also made the code available under the LGPL.

The tool uses the Java agent package (java.lang.instrumentation) and the ASM bytecode manipulation library to insert side effects or synthetic throws/returns at chosen 'trigger' points in application or JVM method code. Side effects are scripted using a simple event condition action language and the conditions and actions can include arbitrary invocations of Java code including reference to objects in context at the trigger point. Rules can be used to force 'wrong' or 'unexpected' behaviours to occur and to trace subsequent execution and propagate further side effects which ensure that it follows the desired path.

The tool is particularly oriented towards dealing with the problems involved in convincing non-deterministic, multi-threaded code to run in a reliable and repeatable manner. So, the rule language provides a suite of builtins which can be invoked from conditions or actions to orchestrate thread execution. These builtins implement operations such as delays, waits and notifies, countdowns, rendezvous, etc and can be used to make sure that events in the thread's life cycle happen with the desired timings or orderings. However, the tool is more general than this. So, even if you are just interested in running a simple single-threaded test it provides a very flexible means of scripting errant and aberrant behaviours in arbitrary application and/or JVM code and managing and tracing subsequent execution.

If anyone wants to take a look at the tool and or give it a road test the sources are in the JBossTS repository. There is a README which explains the basics plus how to compile and run the tool and a more complete user guide.

Thursday, June 26, 2008

JTS and WS-TX implementations go LGPL

Back when ArjunaTS was acquired by JBoss the decision was made to licence the core transaction engine (ArjunaCore) and the local JTA under LGPL, but use GPL for the OTS (JTS) implementation as well as for XTS, our Web Services Transactions component. There were some strategic decisions at the time (a dual-licence model) that made sense for JBoss, but with the Red Hat acquisition we've been reconsidering. As a result, the next release of JBossTS will be entirely based on LGPL, i.e., there will no longer be any GPL component. Hopefully this will satisfy those users and customers out there who wanted to use JTS or XTS but found that they were uncomfortable with GPL. From a community perspective, let's also hope that this helps encourage everyone to get behind JBossTS and continue to ensure it is the premier open source transaction engine out there. Next step: Project Blacktie.

Tuesday, April 15, 2008

DTF open sourced

Back in 2001 we had tens of hundreds of tests for the HP Transaction Service and a team of dedicated QA engineers. It took a week to run all of the tests across the combination of OS, hardware, JDK and database combinations. When we span out we didn't have those resources so had to develop the Distributed Test Framework, which is many ways is a Grid infrastructure: it supports the automatic deployment of services and software across arbitrary nodes, VM, OS etc. to execute tests and collate the results. It is truly distributed in nature and runs distributed tests (where the client(s) and service(s) run across different combinations of VM, hardware, OS, db etc.) We managed to have the same QA coverage with a fraction of the people and in a fraction of the time (and cost). I'm happy to say that we've finally open sourced it as well!