# 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 compatiblity 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 compatiblity will be tested.
