// @Test
  public void rawEpochStealing() throws Exception {
    RealEventHubUtilities utils = new RealEventHubUtilities();
    utils.setup(-1);

    int clientSerialNumber = 0;
    while (true) {
      Thread[] blah = new Thread[Thread.activeCount() + 10];
      int actual = Thread.enumerate(blah);
      if (actual >= blah.length) {
        System.out.println("Lost some threads");
      }
      int parkedCount = 0;
      String selectingList = "";
      boolean display = true;
      for (int i = 0; i < actual; i++) {
        display = true;
        StackTraceElement[] bloo = blah[i].getStackTrace();
        String show = "nostack";
        if (bloo.length > 0) {
          show = bloo[0].getClassName() + "." + bloo[0].getMethodName();
          if (show.compareTo("sun.misc.Unsafe.park") == 0) {
            parkedCount++;
            display = false;
          } else if (show.compareTo("sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0") == 0) {
            selectingList += (" " + blah[i].getId());
            display = false;
          }
        }
        if (display) {
          System.out.print(" " + blah[i].getId() + ":" + show);
        }
      }
      System.out.println("\nParked: " + parkedCount + "  SELECTING: " + selectingList);

      System.out.println("Client " + clientSerialNumber + " starting");
      EventHubClient client =
          EventHubClient.createFromConnectionStringSync(utils.getConnectionString().toString());
      PartitionReceiver receiver =
          client
              .createEpochReceiver(
                  utils.getConsumerGroup(), "0", PartitionReceiver.START_OF_STREAM, 1)
              .get();

      boolean useReceiveHandler = false;

      if (useReceiveHandler) {
        Blah b = new Blah(clientSerialNumber++, receiver, client);
        receiver.setReceiveHandler(b).get();
        // wait for messages to start flowing
        b.waitForReceivedMessages().get();
      } else {
        receiver.receiveSync(1);
        System.out.println("Received a message");
      }

      // Enable these lines to avoid overlap
      /* */
      try {
        System.out.println("Non-overlap close of PartitionReceiver");
        if (useReceiveHandler) {
          receiver.setReceiveHandler(null).get();
        }
        receiver.close().get();
      } catch (InterruptedException | ExecutionException e) {
        System.out.println(
            "Client "
                + clientSerialNumber
                + " failed while closing PartitionReceiver: "
                + e.toString());
      }
      try {
        System.out.println("Non-overlap close of EventHubClient");
        client.close().get();
      } catch (InterruptedException | ExecutionException e) {
        System.out.println(
            "Client "
                + clientSerialNumber
                + " failed while closing EventHubClient: "
                + e.toString());
      }
      System.out.println("Client " + clientSerialNumber + " closed");
      /* */

      System.out.println("Threads: " + Thread.activeCount());
    }
  }
 @Override
 public void onError(Throwable error) {
   System.out.println("Client " + this.clientSerialNumber + " got " + error.toString());
   try {
     this.receiver.close().get();
   } catch (InterruptedException | ExecutionException e) {
     System.out.println(
         "Client "
             + this.clientSerialNumber
             + " failed while closing PartitionReceiver: "
             + e.toString());
   }
   try {
     this.client.close().get();
   } catch (InterruptedException | ExecutionException e) {
     System.out.println(
         "Client "
             + this.clientSerialNumber
             + " failed while closing EventHubClient: "
             + e.toString());
   }
   System.out.println("Client " + this.clientSerialNumber + " closed");
 }