@Test
  public void testDirectoryAgentListenerServiceTracker() throws Exception {
    UserAgent userAgent = SLP.newUserAgent(newSettings());
    StandardDirectoryAgentServer directoryAgentServer =
        StandardDirectoryAgentServer.newInstance(newSettings());
    final AtomicInteger counter = new AtomicInteger();

    userAgent.start();

    DirectoryAgentListenerServiceTracker tracker =
        new DirectoryAgentListenerServiceTracker(bundleContext, userAgent);
    tracker.open();

    ServiceRegistration serviceRegistration =
        bundleContext.registerService(
            DirectoryAgentListener.class.getName(),
            new DirectoryAgentListener() {
              public void directoryAgentBorn(DirectoryAgentEvent event) {
                counter.incrementAndGet();
              }

              public void directoryAgentDied(DirectoryAgentEvent event) {
                counter.decrementAndGet();
              }
            },
            null);

    directoryAgentServer.start();

    Thread.sleep(1000);

    Assert.assertEquals(1, tracker.size());
    Assert.assertEquals(1, counter.get());

    directoryAgentServer.stop();

    Thread.sleep(1000);

    Assert.assertEquals(1, tracker.size());
    Assert.assertEquals(0, counter.get());

    serviceRegistration.unregister();

    Thread.sleep(500);

    Assert.assertEquals(0, tracker.size());
    Assert.assertEquals(0, counter.get());

    tracker.close();

    directoryAgentServer.stop();
    userAgent.stop();
  }
  @Test
  public void testDirectoryAgentListenerWithFilterServiceTracker() throws Exception {
    UserAgent userAgent = SLP.newUserAgent(newSettings());
    StandardDirectoryAgentServer directoryAgentServer =
        StandardDirectoryAgentServer.newInstance(newSettings());
    final AtomicInteger counter = new AtomicInteger();

    userAgent.start();

    DirectoryAgentListenerServiceTracker tracker =
        new DirectoryAgentListenerServiceTracker(
            bundleContext, bundleContext.createFilter("(&(foo=bar)(car=cdr))"), userAgent);
    tracker.open();

    Dictionary<String, String> dictionary = new Hashtable<String, String>();
    dictionary.put("foo", "bar");
    dictionary.put("car", "cdr");
    ServiceRegistration serviceRegistration =
        bundleContext.registerService(
            DirectoryAgentListener.class.getName(),
            new DirectoryAgentListener() {
              public void directoryAgentBorn(DirectoryAgentEvent event) {
                counter.incrementAndGet();
              }

              public void directoryAgentDied(DirectoryAgentEvent event) {
                counter.decrementAndGet();
              }
            },
            dictionary);

    directoryAgentServer.start();

    Thread.sleep(1000);

    Assert.assertEquals(1, tracker.size());
    Assert.assertEquals(1, counter.get());

    directoryAgentServer.stop();

    Thread.sleep(1000);

    Assert.assertEquals(1, tracker.size());
    Assert.assertEquals(0, counter.get());

    serviceRegistration.unregister();

    Thread.sleep(500);

    Assert.assertEquals(0, tracker.size());
    Assert.assertEquals(0, counter.get());

    dictionary.put("foo", "bad-value");
    serviceRegistration =
        bundleContext.registerService(
            DirectoryAgentListener.class.getName(),
            new DirectoryAgentListener() {
              public void directoryAgentBorn(DirectoryAgentEvent event) {
                counter.incrementAndGet();
              }

              public void directoryAgentDied(DirectoryAgentEvent event) {
                counter.decrementAndGet();
              }
            },
            dictionary);

    directoryAgentServer.start();

    Thread.sleep(1000);

    Assert.assertEquals(0, tracker.size());
    Assert.assertEquals(0, counter.get());

    directoryAgentServer.stop();

    Thread.sleep(1000);

    Assert.assertEquals(0, tracker.size());
    Assert.assertEquals(0, counter.get());

    serviceRegistration.unregister();

    Thread.sleep(500);

    Assert.assertEquals(0, tracker.size());
    Assert.assertEquals(0, counter.get());

    tracker.close();

    directoryAgentServer.stop();
    userAgent.stop();
  }