package com.aol.micro.server.events;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.ConcurrentHashMultiset;
public class LoggingRateLimiterTest {
LoggingRateLimiter rateLimiter;
@Before
public void setup(){
rateLimiter = new LoggingRateLimiter();
rateLimiter.resetAfterLimit() ;
}
@Test
public void testAddAndEnsureFrequency() {
for(int i=0;i<10;i++){
rateLimiter.addAndEnsureFrequency(this);
}
rateLimiter.capacityAvailable(this, 5, () ->fail ("failure"));
}
@Test
public void testDoesNotReset(){
ConcurrentHashMultiset freq = rateLimiter.getFrequency();
rateLimiter.resetAfterLimit();
assertThat (freq,is( rateLimiter.getFrequency()));
}
@Test
public void testResetAfterLimit() throws InterruptedException {
rateLimiter = new LoggingRateLimiter(0);
ConcurrentHashMultiset freq = rateLimiter.getFrequency();
rateLimiter.resetAfterLimit();
assertTrue (freq != rateLimiter.getFrequency() );
freq = rateLimiter.getFrequency();
Thread.sleep(1);
rateLimiter.resetAfterLimit();
assertThat (freq,is( rateLimiter.getFrequency()));
}
boolean ran= false;
@Test
public void testCapacityAvailable() {
ran = false;
rateLimiter.capacityAvailable(this, 100, () -> { ran = true;});
assertTrue( ran);
}
}