blob: f855ac8d0495141a7b720ab316453362177dbc46 [file] [view]
# gRPC C++ End-to-End Tests
This directory contains end-to-end tests for the gRPC C++ library.
These tests cover the full gRPC stack,
from the C++ API down to the core transport and back.
## Key Test Files
* **`end2end_test.cc`**: The main end-to-end test suite. It covers basic RPC functionality, cancellation, deadlines, metadata, and various channel/server configurations.
* **`async_end2end_test.cc`**: Tests using the asynchronous C++ API.
* **`client_callback_end2end_test.cc`**: Tests using the callback-based asynchronous API.
* **`generic_end2end_test.cc`**: Tests for the generic (byte-stream) API.
* **`hybrid_end2end_test.cc`**: Tests mixing sync and async APIs.
* **`interceptors_util.{h,cc}`**: Utilities for testing interceptors.
* **`test_service_impl.{h,cc}`**: Implementation of the test service used in many end-to-end tests.
## Common Patterns
### Test Scenarios
Tests often use `::testing::TestWithParam<TestScenario>` to run the same test
logic under different configurations. A `TestScenario` typically includes:
* **Interceptors**: Whether to use client/server interceptors.
* **Proxy**: Whether to route traffic through a proxy.
* **Inproc**: Whether to use the in-process transport.
* **Credentials**: The type of credentials to use (Insecure, TLS, etc.).
* **Callback Server**: Whether to use the callback-based server API.
### Service Implementation
The `TestServiceImpl` class (defined in `test_service_impl.h`) provides a
standard implementation of the `EchoTestService` for use in tests.
It supports features such as:
* Echoing request messages and metadata.
* Simulating server-side errors.
* Checking for cancellation.
### Server and Channel Creation
Tests typically use helper methods like `BuildAndStartServer` and
`ResetChannel`/`ResetStub` to set up the test environment based on the current
`TestScenario` parameters.
### BUILD File Tags
In the `BUILD` file, targets intended to be part of the core C++ end-to-end
test suite are typically tagged with `"cpp_end2end_test"`.
Reference for PH2 and cpp_end2end_test : src/core/lib/experiments/experiments.yaml
We have temporarily used SKIP_TEST_FOR_PH2_CLIENT and SKIP_TEST_FOR_PH2_SERVER
to mark tests that are failing for PH2 experiment, and are WIP.
ETA to finish : 30-Aug-2026. Owner : tjagtap
For more information on PH2 refer file src/core/ext/transport/chttp2/GEMINI.md
### Retry for PH2
Retries have not yet been implemented for PH2.
Hence, whenever PH2 experiment `IsPromiseBasedHttp2ClientTransportEnabled()`is
enabled, we must disable retries. This is done with ApplyCommonChannelArguments.
file : test/cpp/end2end/end2end_test_utils.h