@Test
    void exchangeHeadersUnaryCall_armeriaHeaders() throws Exception {
        TestServiceBlockingStub stub =
                Clients.newDerivedClient(
                        blockingStub,
                        ClientOptions.HEADERS.newValue(
                                HttpHeaders.of(TestServiceImpl.EXTRA_HEADER_NAME, "dog")));

        final AtomicReference<Metadata> headers = new AtomicReference<>();
        final AtomicReference<Metadata> trailers = new AtomicReference<>();
        stub = stub.withInterceptors(MetadataUtils.newCaptureMetadataInterceptor(headers, trailers));

        assertThat(stub.emptyCall(EMPTY)).isNotNull();

        // Assert that our side channel object is echoed back in both headers and trailers
        assertThat(CLIENT_HEADERS_CAPTURE.get().get(TestServiceImpl.EXTRA_HEADER_NAME)).isEqualTo("dog");
        assertThat(SERVER_TRAILERS_CAPTURE.get().get(TestServiceImpl.EXTRA_HEADER_NAME)).isEqualTo("dog");

        assertThat(headers.get().keys()).contains(HttpHeaderNames.CONTENT_TYPE.toString(),
                                                  GrpcHeaderNames.GRPC_ENCODING.toString(),
                                                  GrpcHeaderNames.GRPC_ACCEPT_ENCODING.toString());
        assertThat(trailers.get().get(TestServiceImpl.EXTRA_HEADER_KEY)).isEqualTo("dog");
        assertThat(trailers.get().getAll(TestServiceImpl.STRING_VALUE_KEY)).containsExactly(
                StringValue.newBuilder().setValue("hello").build(),
                StringValue.newBuilder().setValue("world").build());

        checkRequestLog((rpcReq, rpcRes, grpcStatus) -> {
            assertThat(rpcReq.params()).containsExactly(EMPTY);
            assertThat(rpcRes.get()).isEqualTo(EMPTY);
        });
    }
Must be at least {@link #unaryPayloadLength()}, plus some to account for encoding overhead.
grpc/src/test/java/com/linecorp/armeria/client/grpc/GrpcClientTest.java