@Override
  public void restRequest(RestRequest request, Callback<RestResponse> callback, String routeKey)
  {
    this.restRequest(request, new RequestContext(), callback, routeKey);
  }
@Test
  public void testRouteLookupClientFuture() throws ExecutionException, InterruptedException
  {
    RouteLookup routeLookup = new SimpleTestRouteLookup();

    final D2Client d2Client = new D2ClientBuilder().setZkHosts("localhost:2121").build();
    d2Client.start(new FutureCallback<>());
    RouteLookupClient routeLookupClient = new RouteLookupClient(d2Client, routeLookup, "WestCoast");
    RestRequest dummyRestRequest = new RestRequestBuilder(URI.create("d2://simple_uri")).build();
    Future<RestResponse> future = routeLookupClient.restRequest(dummyRestRequest, "5436");
    try
    {
      future.get();
      // the request shouldn't succeed because we haven't set up a server or any service -> cluster -> uri
      // mapping; we want it to fail because we can get the service name we tried to get at from the
      // ServiceUnavailableException that is thrown.
      Assert.fail("Unexpected success, request should have thrown a ServiceUnavailableException");
    }
    catch (Exception e)
    {
      String message = e.getMessage();
      if (!message.contains("_serviceName=simple_uriWestCoast5436Foo"))
      {
        Assert.fail("request was not rewritten to point at the d2 service simple_uriWestCoast5436Foo");
      }
    }
  }