/**
   * Tests basic configuration with polling activation.
   *
   * @throws StreamException if test fails
   */
  @Test
  public void configureWithPollingTest() throws Exception {
    final AtomicInteger count = new AtomicInteger(0);

    final ContextBuilderConfigurator cfg =
        new ContextBuilderConfigurator() {

          /** {@inheritDoc} */
          @Override
          public int internalConfigure(final ContextBuilder ctxBuilder) {
            return 1;
          }

          /** {@inheritDoc} */
          @Override
          public String getTag() {
            return "test";
          }

          /** {@inheritDoc} */
          @Override
          protected Long getLastUpdateTimestampFor(final String path) throws StreamException {
            synchronized (ContextBuilderConfiguratorTest.class) {
              count.incrementAndGet();
              ContextBuilderConfiguratorTest.class.notify();
            }

            return System.currentTimeMillis();
          }
        };

    final ContextBuilder builder = Mockito.mock(ContextBuilder.class);
    cfg.configure(builder);

    synchronized (ContextBuilderConfiguratorTest.class) {
      ContextBuilderConfiguratorTest.class.wait(1500L);
    }

    Assert.assertEquals(count.intValue(), NumberUtils.TWO);
  }
  /**
   * Tests configurations when multiple and non-multiple executions are set.
   *
   * @throws StreamException if test fails
   */
  @Test
  public void configureMultipleTest() throws Exception {
    final AtomicInteger count = new AtomicInteger(0);
    final StringBuilder tagBuilder = new StringBuilder("test");

    final ContextBuilderConfigurator cfg =
        new ContextBuilderConfigurator() {

          /** {@inheritDoc} */
          @Override
          public int internalConfigure(final ContextBuilder ctxBuilder) {
            count.incrementAndGet();
            return -1;
          }

          /** {@inheritDoc} */
          @Override
          public String getTag() {
            return tagBuilder.toString();
          }

          /** {@inheritDoc} */
          @Override
          protected Long getLastUpdateTimestampFor(final String path) throws StreamException {
            return -1L;
          }
        };

    cfg.setMultipleConfigurations(Boolean.FALSE);
    cfg.configure(Mockito.mock(ContextBuilder.class));
    cfg.configure(Mockito.mock(ContextBuilder.class));
    cfg.configure(Mockito.mock(ContextBuilder.class));
    Assert.assertEquals(1, count.get());

    cfg.setMultipleConfigurations(Boolean.TRUE);
    cfg.configure(Mockito.mock(ContextBuilder.class));
    Assert.assertEquals(NumberUtils.TWO, count.get());

    cfg.setMultipleConfigurations(Boolean.FALSE);
    tagBuilder.append("1");
    cfg.configure(Mockito.mock(ContextBuilder.class));
    tagBuilder.append("1");
    cfg.configure(Mockito.mock(ContextBuilder.class));
    tagBuilder.append("1");
    cfg.configure(Mockito.mock(ContextBuilder.class));
    tagBuilder.append("1");
    cfg.configure(Mockito.mock(ContextBuilder.class));
    Assert.assertEquals(NumberUtils.SIX, count.get());
  }