| Protocol Buffers - Google's data interchange format |
| =================================================== |
| |
| Copyright 2008 Google Inc. |
| |
| This directory contains conformance tests for testing completeness and |
| correctness of Protocol Buffers implementations. These tests are designed |
| to be easy to run against any Protocol Buffers implementation. |
| |
| This directory contains the tester process `conformance-test`, which |
| contains all of the tests themselves. Then separate programs written |
| in whatever language you want to test communicate with the tester |
| program over a pipe. |
| |
| If you're not using Bazel to run these tests, make sure you build the C++ |
| tester code beforehand, e.g. from the base directory: |
| |
| $ cmake . -Dprotobuf_BUILD_CONFORMANCE=ON && cmake --build . |
| |
| This will produce a `conformance_test_runner` binary that can be used to run |
| conformance tests on any executable. Pass it `--help` for more information. |
| |
| Running the tests for C++ |
| ------------------------- |
| |
| To run the tests against the C++ implementation, run: |
| |
| $ bazel test //src:conformance_test |
| |
| Or alternatively with CMake: |
| |
| $ ctest -R conformance_cpp_test |
| |
| Running the tests for other languages |
| ------------------------------------- |
| |
| All of the languages in the Protobuf source tree are set up to run conformance |
| tests using similar patterns. You can either use Bazel to run the |
| `conformance_test` target defined in the language's root `BUILD.bazel` file, |
| or create an executable for a custom test and pass it to |
| `conformance_test_runner`. |
| |
| For example, to run the Ruby tests against MRI, you can call: |
| |
| $ bazel test //ruby:conformance_test |
| |
| Note: CMake can be used to build the conformance test runner, but not any of |
| the conformance test executables outside C++. So if you aren't using Bazel |
| you'll need to create the executable you pass to `conformance_test_runner` via |
| some alternate build system. |
| |
| Testing other Protocol Buffer implementations |
| --------------------------------------------- |
| |
| To run these tests against a new Protocol Buffers implementation, write a |
| program in your language that uses the protobuf implementation you want |
| to test. This program should implement the testing protocol defined in |
| [conformance.proto](https://github.com/protocolbuffers/protobuf/blob/main/conformance/conformance.proto). |
| This is designed to be as easy as possible: the C++ version is only |
| 150 lines and is a good example for what this program should look like |
| (see [conformance_cpp.cc](https://github.com/protocolbuffers/protobuf/blob/main/conformance/conformance_cpp.cc)). |
| The program only needs to be able to read from stdin and write to stdout. |
| |
| Portability |
| ----------- |
| |
| Note that the test runner currently does not work on Windows. Patches |
| to fix this are welcome! (But please get in touch first to settle on |
| a general implementation strategy). |