The GRIDL project works towards a distributed image processing system in support of virtual observatories for astronomy. The goal of the project was to develop a set of tools for accessing and manipulating of distributed astronomical data via IDL clients. To do so, GRIDL automates generation of IDL clients for Web Services for analysis and visualization of astronomical data and provides services for running parallel and serial IDL processes on Grids to facilitate astronomical data analysis.
The GRIDL architecture uses Grid services and an IDL client interface. By making image processing operations accessible via Web services, resource-intensive image processing can be performed on a high-performance, parallel Grid cluster, and a lightweight client on a commodity class workstation can interactively control operations and view results. GRIDL has clients implemented in both Java and IDL, while the service is implemented using C++ in a Globus service container and using CFITSIO for image processing.
Developed in the course of the project using TDD, the GRIDL tests validate the Web service methods. GRIDL required clients written in multiple languages to invoke service operations passing arrays and other data types, using language-specific service stubs and type translations, so tests were implemented both in C++ using CppUnit and in Java using JUnit. Fig. 2 shows the test classes ServiceTest (C++) and ClientSuite (Java) and their test methods which invoke and validate the GRIDL Web service methods, which are published by the service interface TxGridlService.
Thus, the full functionality of the Web service methods called from multiple languages is validated automatically when the tests are run. The test framework makes it simple to add test cases whenever a service behavior is changed or a bug is found.
In GRIDL, testing revealed that Web service calls returning an image array with content that inadvertently represented XML tag closure characters, i.e. “/>”, resulted in malformed SOAP messages and runtime errors. We implemented a test case to catch this problem, and then changed the Web service interface so that arrays were passed using base-64 binary encoding, thus passing the test and solving this problem.