Each implementation of the Avro object container file spec implements a data file generator and a data file reader.
The schema used for each task can be found at share/test/schemas/interop.avsc.
An example of the data file generator used by the Python implementation can be found at lang/py/test/gen_interop_data.py.
An example of the data file reader used by the Python implementation can be found at lang/py/test/test_datafile_interop.py.
Once you have implemented your data file generator and reader, you should add them to the test target of build.sh.
It's common for an implementation to define a "tool" script that can start up an Avro server or client to handle a single message with an arbitrary protocol. An example tool implementation, in Python, can be found at lang/py/src/avro/tool.py (it's not pretty, but it gets the job done).
The driver which executes the RPC interoperability tests can be found at share/test/interop/bin/test_rpc_interop.sh. This driver iterates through each
(client, server, message) triple and tests that an RPC is executed successfully.
To add your new implementation to the tests, define a bash variable for both the client and server for which the value is a bash command prefix which, when executed from the base of trunk and passed the additional arguments from the driver bash script, will execute the client or server. For example, the Python client and server use:
The full client bash command is
$client http://127.0.0.1:$port $proto $msg -file $c/request.avro. The
client variable is the script prefix you defined above. The
$proto variable points to the location of the protocol definition file, and the
$msg is the message name being tested.
$c/request.avro variable is filled in succession by the
request.avro file found in the directory
share/test/interop/rpc/$msg. This file contains an Avro-encoded request object for the specified message.
The full server bash command is
$server http://0.0.0.0:0/ $proto $msg -file $c/response.avro > $portfile &. As you can see, your server script should output the port on which it is listening so that the driver script may pass this information to the client being tested. As in the client, the
$server variable is the script prefix you defined above, the
$proto variable points to the location of the protocol definition file, the
$msg is the message name being tested, and the
$c/response.avro file contains an Avro-encoded response object for the specified message.
Once these bash variables have been defined, add them to the clients and servers arrays defined just below the language-specific command definitions.