@Test
  public void testCallRunnerDropDisconnected() {
    RpcServerInterface mockRpcServer = Mockito.mock(RpcServerInterface.class);
    Mockito.when(mockRpcServer.isStarted()).thenReturn(true);
    ServerCall<?> mockCall = Mockito.mock(ServerCall.class);
    Mockito.when(mockCall.disconnectSince()).thenReturn(1L);

    TraceUtil.trace(() -> {
      CallRunner cr = new CallRunner(mockRpcServer, mockCall);
      cr.setStatus(new MonitoredRPCHandlerImpl("test"));
      cr.drop();
    }, testName.getMethodName());
    Mockito.verify(mockCall, Mockito.times(1)).cleanup();

    Waiter.waitFor(conf, TimeUnit.SECONDS.toMillis(5), new MatcherPredicate<>(otelRule::getSpans,
      hasItem(allOf(hasName(testName.getMethodName()), hasEnded()))));

    assertThat(otelRule.getSpans(),
      hasItem(allOf(hasName(testName.getMethodName()), hasStatusWithCode(StatusCode.OK),
        hasEvents(hasItem(EventMatchers.hasName("Client disconnect detected"))), hasEnded())));
  }
Does nothing but exercise a {@link CallRunner} outside of {@link RpcServer} context.
hbase-server/src/test/java/org/apache/hadoop/hbase/ipc/TestCallRunner.java