@Override public void run() { List<Message> messages = new LinkedList<>(); for (int i = 0; i < 10; i++) { Message msg = new Message(UUID.randomUUID().toString(), "Hello World-" + i); msg.setPriority(new Random().nextInt(98)); messages.add(msg); } if(published.get() >= count) { publishLatch.countDown(); return; } published.addAndGet(messages.size()); rdq.push(messages); } };
@Override public void run() { List<Message> messages = new LinkedList<>(); for (int i = 0; i < 10; i++) { Message msg = new Message(UUID.randomUUID().toString(), "Hello World-" + i); msg.setPriority(new Random().nextInt(98)); messages.add(msg); } if (published.get() >= count) { publishLatch.countDown(); return; } published.addAndGet(messages.size()); rdq.push(messages); } };
@Test(expected=IllegalArgumentException.class) public void testPrioirty(){ Message msg = new Message(); msg.setPriority(-1); }
@Test(expected=IllegalArgumentException.class) public void testPrioirty2(){ Message msg = new Message(); msg.setPriority(100); } }
@Test public void testAll() { List<Message> messages = new LinkedList<>(); Message msg = new Message("1", "Hello World"); msg.setPriority(1); messages.add(msg); /** * Because of sharding strategy works in round-robin manner, single client, for shard1, should * push message(even the same) to three different shards. */ shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); List<Message> popedFromShard1 = shard1DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard2 = shard2DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard3 = shard3DynoQueue.pop(1, 1, TimeUnit.SECONDS); assertEquals(1, popedFromShard1.size()); assertEquals(1, popedFromShard2.size()); assertEquals(1, popedFromShard3.size()); assertEquals(msg, popedFromShard1.get(0)); assertEquals(msg, popedFromShard2.get(0)); assertEquals(msg, popedFromShard3.get(0)); }
@Test public void testAll() { List<Message> messages = new LinkedList<>(); Message msg = new Message("1", "Hello World"); msg.setPriority(1); messages.add(msg); /** * Because my custom sharding strategy that depends on message id, and calculated hash (just Java's hashCode), * message will always ends on the same shard, so message never duplicates, in test case, I expect that * message will be received only once. */ shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); shard1DynoQueue.push(messages); List<Message> popedFromShard1 = shard1DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard2 = shard2DynoQueue.pop(1, 1, TimeUnit.SECONDS); List<Message> popedFromShard3 = shard3DynoQueue.pop(1, 1, TimeUnit.SECONDS); assertEquals(0, popedFromShard1.size()); assertEquals(1, popedFromShard2.size()); assertEquals(0, popedFromShard3.size()); assertEquals(msg, popedFromShard2.get(0)); } }
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
@Test public void testClearQueues() { rdq.clear(); int count = 10; List<Message> messages = new LinkedList<>(); for (int i = 0; i < count; i++) { Message msg = new Message("x" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg); } rdq.push(messages); assertEquals(count, rdq.size()); rdq.clear(); assertEquals(0, rdq.size()); }
for (int i = 0; i < count; i++) { Message msg = new Message("" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg);
for (int i = 0; i < count; i++) { Message msg = new Message("" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg);
for (int i = 0; i < count; i++) { Message msg = new Message("" + i, "Hello World-" + i); msg.setPriority(count - i); messages.add(msg);