package com.limegroup.gnutella.util; import java.util.ArrayList; import java.util.Collections; import java.util.List; import junit.framework.Test; public class RRProcessingQueueTest extends BaseTestCase { public RRProcessingQueueTest(String name) { super(name); } public static Test suite() { return buildTestSuite(RRProcessingQueueTest.class); } public void testRRProcessing() throws Exception { RRProcessingQueue queue = new RRProcessingQueue("test"); List order = Collections.synchronizedList(new ArrayList()); Runner a1 = new Runner(order); Runner a2 = new Runner(order); Runner b1 = new Runner(order); Runner b2 = new Runner(order); Runner c1 = new Runner(order); queue.invokeLater(a1, "a"); queue.invokeLater(a2, "a"); queue.invokeLater(b1, "b"); queue.invokeLater(b2, "b"); queue.invokeLater(c1, "c"); assertEquals(5, queue.size()); try { Thread.sleep(1000); } catch (InterruptedException ignored) {} // order of execution should be: // a1, b1, c1, a2, b2 assertEquals(a1,order.get(0)); assertEquals(b1,order.get(1)); assertEquals(c1,order.get(2)); assertEquals(a2,order.get(3)); assertEquals(b2,order.get(4)); assertEquals(0, queue.size()); } private class Runner implements Runnable { final List toNotify; Runner(List toNotify) { this.toNotify = toNotify; } public void run() { try { Thread.sleep(150); } catch (InterruptedException iex){ fail(iex); } toNotify.add(this); } } }