package tv.dyndns.kishibe.qmaclone.server; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; public class ChatPostCounterTest { private static final int FAKE_USER_CODE = 12345678; private static final String FAKE_REMOTE_ADDRESS = "1.2.3.4"; private ChatPostCounter counter; @Before public void setUp() throws Exception { counter = new ChatPostCounter(); } @Test public void addAndIsAbleToPostShouldCheckUserCode() { for (int i = 0; i < ChatPostCounter.LIMIT_PER_MINUTE; ++i) { counter.add(FAKE_USER_CODE, String.valueOf(i)); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, String.valueOf(i))); } counter.add(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS); assertFalse(counter.isAbleToPost(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS)); } @Test public void addAndIsAbleToPostShouldCheckRemoteAddress() { for (int i = 0; i < ChatPostCounter.LIMIT_PER_MINUTE; ++i) { counter.add(i, FAKE_REMOTE_ADDRESS); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS)); } counter.add(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS); assertFalse(counter.isAbleToPost(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS)); } @Test public void addAndIsAbleToPostShouldIgnoreNullRemoteAddress() { for (int i = 0; i < ChatPostCounter.LIMIT_PER_MINUTE; ++i) { counter.add(i, null); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, null)); } counter.add(FAKE_USER_CODE, null); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, null)); } @Test public void addAndIsAbleToPostShouldIgnoreLocalHost() { for (int i = 0; i < ChatPostCounter.LIMIT_PER_MINUTE; ++i) { counter.add(i, ChatPostCounter.LOCAL_HOST); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, ChatPostCounter.LOCAL_HOST)); } counter.add(FAKE_USER_CODE, ChatPostCounter.LOCAL_HOST); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, ChatPostCounter.LOCAL_HOST)); } @Test public void runShouldClearUserCodesAndRemoteAddresses() { for (int i = 0; i < ChatPostCounter.LIMIT_PER_MINUTE + 1; ++i) { counter.add(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS); } counter.run(); assertTrue(counter.isAbleToPost(FAKE_USER_CODE, FAKE_REMOTE_ADDRESS)); } }