@Test
  public void testHttpSelectorAnnotation() {
    injector =
        Guice.createInjector(
            new ApplicationNameModule("test-application"),
            new ConfigurationModule(new ConfigurationFactory(ImmutableMap.<String, String>of())),
            new TestingNodeModule(),
            new TestingDiscoveryModule(),
            new TestingMBeanModule(),
            new ReportingModule(),
            new Module() {
              @Override
              public void configure(Binder binder) {
                discoveryBinder(binder).bindHttpSelector(serviceType("apple"));
              }
            });

    InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class);
    discoveryClient.announce(
        ImmutableSet.of(
            serviceAnnouncement("apple").addProperty("http", "fake://server-http").build()));

    HttpServiceSelector selector =
        injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple")));
    assertEquals(getOnlyElement(selector.selectHttpService()), URI.create("fake://server-http"));
  }
  @Test
  public void testHttpSelectorString() {
    InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class);
    discoveryClient.announce(
        ImmutableSet.of(
            serviceAnnouncement("apple").addProperty("http", "fake://server-http").build()));

    HttpServiceSelector selector =
        injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple")));
    assertEquals(getOnlyElement(selector.selectHttpService()), URI.create("fake://server-http"));
  }
  @Test
  public void testNoHttpServices() {
    InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class);
    discoveryClient.announce(
        ImmutableSet.of(
            serviceAnnouncement("apple").addProperty("foo", "fake://server-https").build()));

    HttpServiceSelector selector =
        injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple")));
    assertEquals(selector.selectHttpService(), ImmutableList.of());
  }
  @Test
  public void testInvalidUris() {
    InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class);
    discoveryClient.announce(
        ImmutableSet.of(serviceAnnouncement("apple").addProperty("http", ":::INVALID:::").build()));
    discoveryClient.announce(
        ImmutableSet.of(
            serviceAnnouncement("apple").addProperty("https", ":::INVALID:::").build()));

    HttpServiceSelector selector =
        injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple")));
    assertEquals(selector.selectHttpService(), ImmutableList.of());
  }
  @Test
  public void testFavorHttpsOverHttpSelector() {
    InMemoryDiscoveryClient discoveryClient = injector.getInstance(InMemoryDiscoveryClient.class);
    discoveryClient.announce(
        ImmutableSet.of(
            serviceAnnouncement("apple").addProperty("http", "fake://server-http").build(),
            serviceAnnouncement("apple")
                .addProperty("http", "fake://server-http-dontuse")
                .addProperty("https", "fake://server-https")
                .build()));

    HttpServiceSelector selector =
        injector.getInstance(Key.get(HttpServiceSelector.class, serviceType("apple")));
    assertEqualsIgnoreOrder(
        selector.selectHttpService(),
        ImmutableList.of(URI.create("fake://server-https"), URI.create("fake://server-http")));
  }