blob: 06925dbb55fe82a3806c1dc26ffdb049401b89a4 [file] [log] [blame] [view]
Josh Haberman35a1cc72015-04-01 17:23:48 -07001Protocol Buffers - Google's data interchange format
2===================================================
3
Josh Haberman35a1cc72015-04-01 17:23:48 -07004Copyright 2008 Google Inc.
5
6This directory contains conformance tests for testing completeness and
7correctness of Protocol Buffers implementations. These tests are designed
8to be easy to run against any Protocol Buffers implementation.
9
10This directory contains the tester process `conformance-test`, which
11contains all of the tests themselves. Then separate programs written
12in whatever language you want to test communicate with the tester
13program over a pipe.
14
15Before running any of these tests, make sure you run `make` in the base
16directory to build `protoc`, since all the tests depend on it.
17
18 $ make
19
Josh Haberman1b0db1c2017-03-16 15:19:09 -070020Running the tests for C++
21-------------------------
22
23To run the tests against the C++ implementation, run:
Josh Haberman35a1cc72015-04-01 17:23:48 -070024
25 $ cd conformance && make test_cpp
26
Josh Haberman1b0db1c2017-03-16 15:19:09 -070027Running the tests for JavaScript (Node.js)
28------------------------------------------
29
30To run the JavaScript tests against Node.js, make sure you have "node"
31on your path and then run:
32
33 $ cd conformance && make test_nodejs
34
35Running the tests for Ruby (MRI)
36--------------------------------
37
38To run the Ruby tests against MRI, first build the C extension:
39
40 $ cd ruby && rake
41
42Then run the tests like so:
43
44 $ cd conformance && make test_ruby
45
46Running the tests for other languages
47-------------------------------------
48
49Most of the languages in the Protobuf source tree are set up to run
50conformance tests. However some of them are more tricky to set up
51properly. See `tests.sh` in the base of the repository to see how
52Travis runs the tests.
Josh Haberman35a1cc72015-04-01 17:23:48 -070053
54Testing other Protocol Buffer implementations
55---------------------------------------------
56
57To run these tests against a new Protocol Buffers implementation, write a
58program in your language that uses the protobuf implementation you want
59to test. This program should implement the testing protocol defined in
Feng Xiaoafe98de2018-08-22 11:55:30 -070060[conformance.proto](https://github.com/protocolbuffers/protobuf/blob/master/conformance/conformance.proto).
Josh Haberman35a1cc72015-04-01 17:23:48 -070061This is designed to be as easy as possible: the C++ version is only
62150 lines and is a good example for what this program should look like
Feng Xiaoafe98de2018-08-22 11:55:30 -070063(see [conformance_cpp.cc](https://github.com/protocolbuffers/protobuf/blob/master/conformance/conformance_cpp.cc)).
Josh Haberman35a1cc72015-04-01 17:23:48 -070064The program only needs to be able to read from stdin and write to stdout.
65
66Portability
67-----------
68
69Note that the test runner currently does not work on Windows. Patches
70to fix this are welcome! (But please get in touch first to settle on
71a general implementation strategy).