# 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 `IsPh2ClientEnabled()`is
enabled, we must disable retries. This is done with ApplyCommonChannelArguments.
file : test/cpp/end2end/end2end_test_utils.h
