@Test
public void testRandomGetProxy() throws Exception {

  final AtomicInteger nn1Count = new AtomicInteger(0);
  final AtomicInteger nn2Count = new AtomicInteger(0);
  final AtomicInteger nn3Count = new AtomicInteger(0);
  Map<InetSocketAddress, ClientProtocol> proxyMap = new HashMap<>();
  final ClientProtocol nn1Mock = mock(ClientProtocol.class);
  when(nn1Mock.getStats()).thenAnswer(createAnswer(nn1Count, 1));
  proxyMap.put(ns2nn1, nn1Mock);
  final ClientProtocol nn2Mock = mock(ClientProtocol.class);
  when(nn2Mock.getStats()).thenAnswer(createAnswer(nn2Count, 2));
  proxyMap.put(ns2nn2, nn2Mock);
  final ClientProtocol nn3Mock = mock(ClientProtocol.class);
  when(nn3Mock.getStats()).thenAnswer(createAnswer(nn3Count, 3));
  proxyMap.put(ns2nn3, nn3Mock);
  for (int i = 0; i < NUM_ITERATIONS; i++) {
    ConfiguredFailoverProxyProvider<ClientProtocol> provider =
        new ConfiguredFailoverProxyProvider<>(conf, ns2Uri,
            ClientProtocol.class, createFactory(proxyMap));
    ClientProtocol proxy = provider.getProxy().proxy;
    proxy.getStats();
  }
  assertTrue(nn1Count.get() < NUM_ITERATIONS && nn1Count.get() > 0);
  assertTrue(nn2Count.get() < NUM_ITERATIONS && nn2Count.get() > 0);
  assertTrue(nn3Count.get() < NUM_ITERATIONS && nn3Count.get() > 0);
  assertEquals(NUM_ITERATIONS,
      nn1Count.get() + nn2Count.get() + nn3Count.get());
}