# Protobuf Java Compatibility Tests This directory contains tests to ensure protobuf library is compatible with previously released versions. ## Directory Layout For each released protobuf version we are testing compatibility with, there is a sub-directory with the following layout (take v2.5.0 as an example): * v2.5.0 * test.sh * pom.xml * protos/ - unittest protos. * more_protos/ - unittest protos that import the ones in "protos". * tests/ - actual Java test classes. The testing code is extracted from regular protobuf unittests by removing: * tests that access package private methods/classes. * tests that are known to be broken by an intended behavior change (e.g., we changed the parsing recursion limit from 64 to 100). * all lite runtime tests. It's also divided into 3 submodule with tests depending on more_protos and more_protos depending on protos. This way we can test scenarios where only part of the dependency is upgraded to the new version. ## How to Run The Tests We use a shell script to drive the test of different scenarios so the test will only run on unix-like environments. The script expects a few command line tools to be available on PATH: git, mvn, wget, grep, sed, java. Before running the tests, make sure you have already built the protoc binary following [the C++ installation instructions](../../src/README.md). The test scripts will use the built binary located at ${protobuf}/src/protoc. To start a test, simply run the test.sh script in each version directory. For example: $ v2.5.0/test.sh For each version, the test script will test: * only upgrading protos to the new version * only upgrading more_protos to the new version and see whether everything builds/runs fine. Both source compatibility and binary compatibility will be tested.