private void sendAndReceive(Configuration conf, NettyRpcServer rpcServer, int requestCount)
    throws Exception {
    List<ExtendedCell> cells = new ArrayList<>();
    int count = 3;
    for (int i = 0; i < count; i++) {
      cells.add(CELL);
    }

    try (NettyRpcClient client = new NettyRpcClient(conf)) {
      rpcServer.start();
      TestRpcServiceProtos.TestProtobufRpcProto.BlockingInterface stub =
        newBlockingStub(client, rpcServer.getListenerAddress());
      CompletableFuture<Void>[] futures = new CompletableFuture[requestCount];
      for (int i = 0; i < requestCount; i++) {
        futures[i] = CompletableFuture.runAsync(() -> {
          try {
            sendMessage(cells, stub);
          } catch (Exception e) {
            throw new RuntimeException(e);
          }
        });
      }
      CompletableFuture.allOf(futures).join();
    }
  }
Test that our fatal watermark is honored, which requires artificially causing some queueing so
that pendingOutboundBytes increases.
hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestNettyChannelWritability.java