@Test public void testUpdateDriverStatusRetries() throws LensException { Configuration conf = new Configuration(); List<LensDriver> drivers = MockQueryContext.getDrivers(conf); MockDriver selectedDriver = (MockDriver) drivers.iterator().next(); MockQueryContext ctx = new MockQueryContext("simulate status retries", new LensConf(), conf, drivers); BackOffRetryHandler waitingHandler = new FibonacciExponentialBackOffRetryHandler(10, 10000, 1000); BackOffRetryHandler noWaitingHandler = new FibonacciExponentialBackOffRetryHandler(10, 0, 0); // do first update ctx.updateDriverStatus(waitingHandler); assertEquals(selectedDriver.getUpdateCount(), 1); // try another update, update should be skipped ctx.updateDriverStatus(waitingHandler); assertEquals(selectedDriver.getUpdateCount(), 1); // update without delays ctx.updateDriverStatus(noWaitingHandler); ctx.updateDriverStatus(noWaitingHandler); ctx.updateDriverStatus(noWaitingHandler); ctx.updateDriverStatus(noWaitingHandler); assertEquals(selectedDriver.getUpdateCount(), 5); // update with delays, update should be skipped ctx.updateDriverStatus(waitingHandler); assertEquals(selectedDriver.getUpdateCount(), 5); // update succeeds now. ctx.updateDriverStatus(noWaitingHandler); // all next updates should succeed, as retries should be cleared ctx.updateDriverStatus(waitingHandler); assertEquals(selectedDriver.getUpdateCount(), 7); }