package fi.iki.mkuokkanen.seda.queue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.json.simple.parser.ParseException; import org.junit.Test; import fi.iki.mkuokkanen.seda.api.json.JsonCreator; import fi.iki.mkuokkanen.seda.keyStore.Storage; import fi.iki.mkuokkanen.seda.queue.translator.JsonToMessageTranslator; /** * Test that big number of events go through Disruptor properly. * * @author mkuokkanen */ public class DisruptorInIT { private int pushCalledCounter; private int delCalledCounter; private int broadcastCalledCounter; private boolean pushOk; private boolean deleteOk; @Test public void testPushCreation() throws ParseException, InterruptedException { pushCalledCounter = 0; delCalledCounter = 0; broadcastCalledCounter = 0; pushOk = true; deleteOk = true; Storage keyStore = new MockStorage(); JsonToMessageTranslator translator = new JsonToMessageTranslator(); QueueInImpl in = new QueueInImpl(keyStore, translator); in.start(); for (int i = 0; i < 5000; i++) { doPush(in, i); doDel(in, i); } doBroadcast(in); Thread.sleep(2000); assertTrue(pushOk); assertTrue(deleteOk); assertEquals(5000, pushCalledCounter); assertEquals(5000, delCalledCounter); assertEquals(1, broadcastCalledCounter); in.stop(); } private void doPush(QueueInImpl in, int i) throws ParseException { String str = JsonCreator.createPushMsg(Integer.valueOf(i).toString(), Integer.valueOf(i).toString()); in.writeJsonToQueue(str); } private void doDel(QueueInImpl in, int i) throws ParseException { String str = JsonCreator.createDeleteMsg(Integer.valueOf(i).toString()); in.writeJsonToQueue(str); } private void doBroadcast(QueueInImpl in) throws ParseException { String str = JsonCreator.createBroadcastMsg(); in.writeJsonToQueue(str); } class MockStorage implements Storage { @Override public boolean push(String key, String value) { // check that push got proper value; if (Integer.valueOf(key).intValue() != pushCalledCounter) { pushOk = false; } pushCalledCounter++; // return just something return true; } @Override public boolean delete(String key) { // check that push got proper value; if (Integer.valueOf(key).intValue() != delCalledCounter) { deleteOk = false; } delCalledCounter++; // return just something return true; } @Override public void broadcast() { broadcastCalledCounter++; } } }