@Test
  public void oneMediaPipelineTest() throws InterruptedException {

    JsonRpcClientKeepAliveController controller = new JsonRpcClientKeepAliveController();

    KeepAliveManager keepAliveManager =
        new KeepAliveManager(
            controller.getClient(),
            KEEPALIVE_INTERVAL_TIME,
            KeepAliveManager.Mode.PER_ID_AS_SESSION);

    keepAliveManager.start();

    Thread.sleep(KEEPALIVE_INTERVAL_TIME * 2);

    Assert.assertTrue(
        "KeepAliveManager in pipeline mode without pipelines shouldn't send any keepAlive event",
        controller.clearEvents() == 0);

    keepAliveManager.addId("XXXXX");

    Thread.sleep(KEEPALIVE_INTERVAL_TIME * 3);

    Assert.assertTrue("keepAlive events should be at least 2", controller.clearEvents() >= 2);

    keepAliveManager.stop();
  }
  @Test
  public void oneSessionTest() throws InterruptedException {

    JsonRpcClientKeepAliveController controller = new JsonRpcClientKeepAliveController();

    KeepAliveManager keepAliveManager =
        new KeepAliveManager(
            controller.getClient(), KEEPALIVE_INTERVAL_TIME, KeepAliveManager.Mode.PER_CLIENT);

    keepAliveManager.start();

    long duration = controller.waitForEvents(3);

    Assert.assertTrue(duration + MARGIN_TIME > KEEPALIVE_INTERVAL_TIME * NUM_KEEP_ALIVES);

    keepAliveManager.stop();
  }
  @Test
  public void addRemovePipelinesTest() throws InterruptedException {

    JsonRpcClientKeepAliveController controller = new JsonRpcClientKeepAliveController();

    KeepAliveManager keepAliveManager =
        new KeepAliveManager(
            controller.getClient(),
            KEEPALIVE_INTERVAL_TIME,
            KeepAliveManager.Mode.PER_ID_AS_SESSION);

    keepAliveManager.start();

    String mediaPipelineIdA = "XXXXX";
    String mediaPipelineIdB = "YYYYY";

    keepAliveManager.addId(mediaPipelineIdA);
    keepAliveManager.addId(mediaPipelineIdB);

    Thread.sleep(KEEPALIVE_INTERVAL_TIME * 3);

    Assert.assertTrue(
        "keepAlive events should be at least 2 x 2 = 4", controller.clearEvents() >= 4);

    keepAliveManager.removeId(mediaPipelineIdA);
    keepAliveManager.removeId(mediaPipelineIdB);

    Thread.sleep(KEEPALIVE_INTERVAL_TIME);
    log.info("Removed media pipelines and wait a keepAliveIntervalTime");

    controller.clearEvents();
    log.info("Cleared events after removing media pipelines");

    Thread.sleep(KEEPALIVE_INTERVAL_TIME * 3);

    Assert.assertTrue(
        "keepAliveManager without pipelines shouldn't send keepAlives",
        controller.clearEvents() == 0);

    keepAliveManager.stop();
  }