### Question:
RangeRoutingTableImpl implements RangeRoutingTable { @Override public RangeProperties getRange(long streamId, byte[] routingKey) { RangeRouter<byte[]> router = ranges.get(streamId); if (null == router) { fetchStreamRanges(streamId); return null; } else { return router.getRangeProperties(routingKey); } } RangeRoutingTableImpl(StorageServerClientManager manager); @Override RangeProperties getRange(long streamId, byte[] routingKey);  }### Answer:
@Test public void testGetRange() throws Exception { String key = "foo"; byte[] keyBytes = key.getBytes(UTF_8); RangeProperties rangeProps = routingTable.getRange(streamId, keyBytes); assertNull(rangeProps); CompletableFuture<RangeRouter<byte[]>> outstandingFetchFuture = routingTable.getOutstandingFetchRequest(streamId); assertNotNull(outstandingFetchFuture); assertFalse(outstandingFetchFuture.isDone()); responseSupplier.complete(getActiveRangesResponse); while (null == routingTable.getRangeRouter(streamId)) { TimeUnit.MILLISECONDS.sleep(100); } rangeProps = routingTable.getRange(streamId, keyBytes); assertNotNull(rangeProps); assertEquals(rangeRouter.getRangeProperties(keyBytes), rangeProps); }