@Test
  public void testServerShutdown3() throws Exception {
    final StringBuilder error = new StringBuilder();
    Thread callThread =
        new Thread() {
          public void run() {
            try {
              EchoMessage message = EchoMessage.newBuilder().setMessage(MESSAGE).build();
              stub.delay(null, message);
            } catch (Exception e) {
              error.append(e.getMessage());
            }
            synchronized (error) {
              error.notifyAll();
            }
          }
        };

    callThread.start();

    final CountDownLatch latch = new CountDownLatch(1);
    Thread shutdownThread =
        new Thread() {
          public void run() {
            try {
              Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            try {
              server.shutdown();
              server = null;
              latch.countDown();
            } catch (Throwable e) {
              e.printStackTrace();
            }
          }
        };
    shutdownThread.start();

    assertTrue(latch.await(5 * 1000, TimeUnit.MILLISECONDS));

    assertTrue(latch.getCount() == 0);

    synchronized (error) {
      error.wait(5 * 1000);
    }

    if (!error.toString().isEmpty()) {
      fail(error.toString());
    }
  }