@Test
    void callOptionsExecutorIsRespected() {
        final ExecutorService executor = Executors.newSingleThreadExecutor(
                ThreadFactories.builder("my-calloptions-executor-3")
                               .daemon(true)
                               .eventLoop(false)
                               .build());

        final TestServiceGrpc.TestServiceStub asyncStubWithExecutor = asyncStub.withExecutor(executor);
        final AtomicReference<String> onMessageThread = new AtomicReference<>();
        final AtomicReference<String> onCompleteThread = new AtomicReference<>();
        asyncStubWithExecutor.emptyCall(EMPTY, new StreamObserver<Empty>() {
            @Override
            public void onNext(Empty value) {
                onMessageThread.set(Thread.currentThread().getName());
            }

            @Override
            public void onError(Throwable t) {
            }

            @Override
            public void onCompleted() {
                onCompleteThread.set(Thread.currentThread().getName());
            }
        });

        await().untilAtomic(onMessageThread, startsWith("my-calloptions-executor-3"));
        await().untilAtomic(onCompleteThread, startsWith("my-calloptions-executor-3"));

        executor.shutdownNow();
    }
Must be at least {@link #unaryPayloadLength()}, plus some to account for encoding overhead.
grpc/src/test/java/com/linecorp/armeria/client/grpc/GrpcClientTest.java