aboutsummaryrefslogtreecommitdiffhomepage
path: root/java/compatibility_tests/README.md
blob: 72c6034c99bc9fb51d9362498a774392873be0f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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.