@Override
  public DarkClusterConfigMap getDarkClusterConfigMap(String clusterName) throws ServiceUnavailableException
  {
    FutureCallback<DarkClusterConfigMap> darkClusterConfigMapFutureCallback = new FutureCallback<>();
    getDarkClusterConfigMap(clusterName, darkClusterConfigMapFutureCallback);

    try
    {
      return darkClusterConfigMapFutureCallback.get(_timeout, _unit);
    }
    catch (ExecutionException | TimeoutException | IllegalStateException | InterruptedException e)
    {
      if (e instanceof TimeoutException || e.getCause() instanceof TimeoutException)
      {
        DarkClusterConfigMap darkClusterConfigMap = getDarkClusterConfigMapFromCache(clusterName);
        if (darkClusterConfigMap != null)
        {
          _log.info("Got dark cluster config map for {} timed out, used cached value instead.", clusterName);
          return darkClusterConfigMap;
        }
      }
      die("ClusterInfo",
          "PEGA_1018, unable to retrieve dark cluster info for cluster: " + clusterName + ", exception" + ": " + e);
      return new DarkClusterConfigMap();
    }
  }
@Test
  public void testClusterInfoProviderGetDarkClustersNoCluster()
    throws InterruptedException, ExecutionException, ServiceUnavailableException
  {
    MockStore<ServiceProperties> serviceRegistry = new MockStore<>();
    MockStore<ClusterProperties> clusterRegistry = new MockStore<>();
    MockStore<UriProperties> uriRegistry = new MockStore<>();
    SimpleLoadBalancer loadBalancer = setupLoadBalancer(serviceRegistry, clusterRegistry, uriRegistry);

    loadBalancer.getDarkClusterConfigMap(NONEXISTENT_CLUSTER, new Callback<DarkClusterConfigMap>()
    {
      @Override
      public void onError(Throwable e)
      {
        Assert.fail("getDarkClusterConfigMap threw exception", e);
      }

      @Override
      public void onSuccess(DarkClusterConfigMap returnedDarkClusterConfigMap)
      {
        Assert.assertEquals(returnedDarkClusterConfigMap.size(), 0, "expected empty map");
      }
    });
  }