@Test
  public void clientSlowToHandshakeDoesNotBlockServer() throws Throwable {
    VM serverVM = getVM(1);
    VM clientVM = getVM(2);
    VM slowClientVM = getVM(3);

    getBlackboard().initBlackboard();

    // a plain-text socket is used to connect to an ssl server & the handshake
    // is never performed. The server will log this exception & it should be ignored
    addIgnoredException(SSLHandshakeException.class);

    boolean cacheServerSslenabled = true;
    boolean cacheClientSslenabled = true;
    boolean cacheClientSslRequireAuth = true;

    serverVM.invoke(() -> setUpServerVMTask(cacheServerSslenabled, 0));
    int port = serverVM.invoke(CacheServerSSLConnectionDUnitTest::createServerTask);

    String hostName = getHostName();

    AsyncInvocation<Void> slowAsync =
        slowClientVM.invokeAsync(() -> connectToServer(hostName, port));
    try {
      getBlackboard().waitForGate("serverIsBlocked", 60, TimeUnit.SECONDS);

      clientVM.invoke(() -> setUpClientVMTask(hostName, port, cacheClientSslenabled,
          cacheClientSslRequireAuth, CLIENT_KEY_STORE, CLIENT_TRUST_STORE, true));
      clientVM.invoke(CacheServerSSLConnectionDUnitTest::doClientRegionTestTask);
      serverVM.invoke(CacheServerSSLConnectionDUnitTest::doServerRegionTestTask);

    } finally {
      getBlackboard().signalGate("testIsCompleted");
      slowAsync.await();
    }
  }
GEODE-2898: A non-responsive SSL client can block a server's "acceptor" thread

<p>
Start a server and then connect to it without completing the SSL handshake

<p>
Attempt to connect to the server using a real SSL client, demonstrating that the server is not
blocked and can process the new connection request.
geode-core/src/distributedTest/java/org/apache/geode/cache/client/internal/CacheServerSSLConnectionDUnitTest.java