int hitExp = 0;
int missExp = 0;
int evictExp = 0;
// first loading, obviously a miss
AccessInfo ai1_1= cachedRuleReader.getAccessInfo(filter1);
System.out.println(cachedRuleReader.getStats());
assertEquals(hitExp, cachedRuleReader.getStats().hitCount());
assertEquals(++missExp, cachedRuleReader.getStats().missCount());
assertEquals(evictExp, cachedRuleReader.getStats().evictionCount());
// second loading with the same rule, should be a hit
ticker.setMillisec(1);
AccessInfo ai1_2= cachedRuleReader.getAccessInfo(filter1);
System.out.println(cachedRuleReader.getStats());
assertEquals(++hitExp, cachedRuleReader.getStats().hitCount());
assertEquals(missExp, cachedRuleReader.getStats().missCount());
assertEquals(evictExp, cachedRuleReader.getStats().evictionCount());
assertEquals(ai1_1, ai1_2);
// loading a different filter, a miss again
ticker.setMillisec(2);
AccessInfo ai2= cachedRuleReader.getAccessInfo(filter2);
System.out.println(cachedRuleReader.getStats());
assertEquals(hitExp, cachedRuleReader.getStats().hitCount());
assertEquals(++missExp, cachedRuleReader.getStats().missCount());
assertEquals(evictExp, cachedRuleReader.getStats().evictionCount());
// yet another different filter. we expect a miss, and an eviction
ticker.setMillisec(3);
AccessInfo ai3= cachedRuleReader.getAccessInfo(filter3);
System.out.println(cachedRuleReader.getStats());
assertEquals(hitExp, cachedRuleReader.getStats().hitCount());
assertEquals(++missExp, cachedRuleReader.getStats().missCount());
assertEquals(++evictExp, cachedRuleReader.getStats().evictionCount());