package fr.gael.dhus.datastore.processing.fair;
import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.util.concurrent.TimeUnit;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class FairQueueTest
{
private FairQueue<FairQueueTestString> queue;
private class FairQueueTestString extends FairQueueEntry
{
private final String item;
public FairQueueTestString (String key, String item)
{
super (key);
this.item = item;
}
public String getItem ()
{
return item;
}
@Override
public boolean equals (Object o)
{
if (o instanceof FairQueueTestString)
{
return ((FairQueueTestString) o).getItem ().equals (getItem ()) &&
((FairQueueTestString) o).getListKey ().equals (getListKey ());
}
return false;
}
}
@BeforeMethod
public void createQueue ()
{
queue = new FairQueue<FairQueueTestString> ();
}
@Test
public void testRemainingCapacity ()
{
Assert.assertEquals (queue.remainingCapacity (), Integer.MAX_VALUE);
}
@Test
public void testPutAndSize () throws InterruptedException
{
Assert.assertEquals (queue.size (), 0);
queue.put (new FairQueueTestString ("key1", "item1"));
Assert.assertEquals (queue.size (), 1);
queue.put (new FairQueueTestString ("key2", "item2"));
Assert.assertEquals (queue.size (), 2);
}
@Test
public void testOffer ()
{
Assert.assertEquals (queue.size (), 0);
Assert.assertTrue (queue
.offer (new FairQueueTestString ("key1", "item1")));
Assert.assertEquals (queue.size (), 1);
Assert.assertTrue (queue
.offer (new FairQueueTestString ("key2", "item2")));
Assert.assertEquals (queue.size (), 2);
}
@Test
public void testTake () throws InterruptedException
{
new Thread (new Runnable ()
{
@Override
public void run ()
{
try
{
Thread.sleep (2000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace ();
}
queue.offer (new FairQueueTestString ("key1", "item1"));
}
}).start ();
FairQueueTestString s = queue.take ();
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
Assert.assertEquals (queue.size (), 0);
}
@Test
public void testPeek ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
FairQueueTestString s = queue.peek ();
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
Assert.assertEquals (queue.size (), 5);
s = queue.peek ();
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
Assert.assertEquals (queue.size (), 5);
}
@Test
public void testPoll ()
{
Assert.assertEquals (queue.size (), 0);
FairQueueTestString s = queue.poll ();
Assert.assertNull (s);
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
s = queue.poll ();
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
Assert.assertEquals (queue.size (), 4);
s = queue.poll ();
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item4");
Assert.assertEquals (queue.size (), 3);
}
@Test
public void testPoll2 () throws InterruptedException
{
Assert.assertEquals (queue.size (), 0);
FairQueueTestString s = queue.poll (5, TimeUnit.SECONDS);
Assert.assertNull (s);
new Thread (new Runnable ()
{
@Override
public void run ()
{
try
{
Thread.sleep (3000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace ();
}
queue.offer (new FairQueueTestString ("key1", "item1"));
}
}).start ();
s = queue.poll (5, TimeUnit.SECONDS);
;
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
s = queue.poll (5, TimeUnit.SECONDS);
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item1");
Assert.assertEquals (queue.size (), 4);
s = queue.poll (5, TimeUnit.SECONDS);
Assert.assertNotNull (s);
Assert.assertEquals (s.getItem (), "item4");
Assert.assertEquals (queue.size (), 3);
}
@Test
public void testDrainTo ()
{
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.drainTo (list), 5);
Assert.assertEquals (queue.size (), 0);
Assert.assertEquals (list.size (), 5);
Assert.assertEquals (list.get (0).getItem (), "item1");
Assert.assertEquals (list.get (1).getItem (), "item4");
Assert.assertEquals (list.get (2).getItem (), "item2");
}
@Test
public void testDrainTo2 ()
{
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.drainTo (list, 3), 3);
Assert.assertEquals (queue.size (), 2);
Assert.assertEquals (list.size (), 3);
Assert.assertEquals (list.get (0).getItem (), "item1");
Assert.assertEquals (list.get (1).getItem (), "item4");
Assert.assertEquals (list.get (2).getItem (), "item2");
}
@Test
public void testClear ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
queue.clear ();
Assert.assertEquals (queue.size (), 0);
}
@Test
public void testContains ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (
queue.contains (new FairQueueTestString ("key1", "item2")), true);
}
@Test (expectedExceptions = { UnsupportedOperationException.class })
public void testToArray ()
{
queue.toArray ();
}
@Test (expectedExceptions = { UnsupportedOperationException.class })
public void testToArray2 ()
{
queue.toArray (new FairQueueTestString[queue.size ()]);
}
@Test (expectedExceptions = { UnsupportedOperationException.class })
public void testIterator ()
{
queue.iterator ();
}
@Test
public void testRemove ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item1"));
Assert.assertEquals (queue.size (), 4);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key2",
"item4"));
Assert.assertEquals (queue.size (), 3);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item2"));
Assert.assertEquals (queue.size (), 2);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key2",
"item5"));
Assert.assertEquals (queue.size (), 1);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item3"));
Assert.assertEquals (queue.size (), 0);
}
@Test (expectedExceptions = { NoSuchElementException.class })
public void testRemove2 ()
{
queue.remove ();
}
@Test
public void testElement ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.element (), new FairQueueTestString ("key1",
"item1"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.element (), new FairQueueTestString ("key1",
"item1"));
Assert.assertEquals (queue.size (), 5);
}
@Test (expectedExceptions = { NoSuchElementException.class })
public void testElement2 ()
{
queue.element ();
}
@Test
public void testIsEmpty ()
{
Assert.assertEquals (queue.isEmpty (), true);
queue.offer (new FairQueueTestString ("key1", "item1"));
Assert.assertEquals (queue.isEmpty (), false);
}
@Test
public void testContainsAll ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
list.add (new FairQueueTestString ("key1", "item1"));
list.add (new FairQueueTestString ("key2", "item4"));
Assert.assertEquals (queue.containsAll (list), true);
list.add (new FairQueueTestString ("key3", "item5"));
Assert.assertEquals (queue.containsAll (list), false);
}
@Test (expectedExceptions = { NullPointerException.class })
public void testAddAll ()
{
queue.addAll (null);
}
@Test (expectedExceptions = { IllegalArgumentException.class })
public void testAddAll2 ()
{
queue.addAll (queue);
}
@Test
public void testAddAll3 ()
{
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
list.add (new FairQueueTestString ("key1", "item1"));
list.add (new FairQueueTestString ("key1", "item2"));
list.add (new FairQueueTestString ("key1", "item3"));
list.add (new FairQueueTestString ("key2", "item4"));
list.add (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.addAll (list), true);
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item1"));
Assert.assertEquals (queue.size (), 4);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key2",
"item4"));
Assert.assertEquals (queue.size (), 3);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item2"));
Assert.assertEquals (queue.size (), 2);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key2",
"item5"));
Assert.assertEquals (queue.size (), 1);
Assert.assertEquals (queue.remove (), new FairQueueTestString ("key1",
"item3"));
Assert.assertEquals (queue.size (), 0);
}
@Test
public void testRemoveAll ()
{
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
list.add (new FairQueueTestString ("key1", "item1"));
list.add (new FairQueueTestString ("key1", "item2"));
list.add (new FairQueueTestString ("key1", "item7"));
list.add (new FairQueueTestString ("key2", "item4"));
list.add (new FairQueueTestString ("key2", "item5"));
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.removeAll (list), true);
Assert.assertEquals (queue.size (), 1);
ArrayList<FairQueueTestString> list2 =
new ArrayList<FairQueueTestString> ();
list2.add (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.removeAll (list2), false);
}
@Test
public void testRetainAll ()
{
ArrayList<FairQueueTestString> list =
new ArrayList<FairQueueTestString> ();
list.add (new FairQueueTestString ("key1", "item1"));
list.add (new FairQueueTestString ("key1", "item2"));
list.add (new FairQueueTestString ("key1", "item7"));
list.add (new FairQueueTestString ("key2", "item4"));
list.add (new FairQueueTestString ("key2", "item5"));
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (queue.retainAll (list), true);
Assert.assertEquals (queue.size (), 4);
ArrayList<FairQueueTestString> list2 =
new ArrayList<FairQueueTestString> ();
list2.add (new FairQueueTestString ("key1", "item1"));
list2.add (new FairQueueTestString ("key1", "item2"));
list2.add (new FairQueueTestString ("key1", "item3"));
list2.add (new FairQueueTestString ("key2", "item4"));
list2.add (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.retainAll (list2), false);
}
@Test
public void testAdd ()
{
Assert.assertEquals (queue.size (), 0);
Assert.assertTrue (queue.add (new FairQueueTestString ("key1", "item1")));
Assert.assertEquals (queue.size (), 1);
Assert.assertTrue (queue.add (new FairQueueTestString ("key2", "item2")));
Assert.assertEquals (queue.size (), 2);
}
@Test
public void testRemove3 ()
{
queue.offer (new FairQueueTestString ("key1", "item1"));
queue.offer (new FairQueueTestString ("key1", "item2"));
queue.offer (new FairQueueTestString ("key1", "item3"));
queue.offer (new FairQueueTestString ("key2", "item4"));
queue.offer (new FairQueueTestString ("key2", "item5"));
Assert.assertEquals (queue.size (), 5);
Assert.assertEquals (
queue.remove (new FairQueueTestString ("key1", "item2")), true);
Assert.assertEquals (queue.size (), 4);
Assert.assertEquals (
queue.remove (new FairQueueTestString ("key1", "item5")), false);
Assert.assertEquals (queue.size (), 4);
}
}