ElementsTrackingQueue queue = getQueue();
ListenableFuture<String> workResult1 = queue.add(new Element("work1", "data1"));
Assert.assertEquals(2, getQueuedCount(queue));
Assert.assertEquals(0, Iterators.size(queue.getBeingConsumed()));
Iterator<QueuedElement> elems = queue.getQueued();
Assert.assertEquals(1, getQueuedCount(queue));
Assert.assertEquals(1, Iterators.size(queue.getBeingConsumed()));
Assert.assertEquals(1, Iterators.size(queue.getBeingConsumed()));
Assert.assertEquals(0, getQueuedCount(queue));
Assert.assertEquals(2, Iterators.size(queue.getBeingConsumed()));
queue.recordProgress("worker2", taken2.getId(),
TrackingQueue.ConsumingStatus.FAILED, null));
Assert.assertEquals(2, getQueuedCount(queue));
Assert.assertEquals(1, Iterators.size(queue.getBeingConsumed()));
Assert.assertEquals(TrackingQueue.PossessionState.NOT_POSSESSES,
queue.recordProgress("worker1", taken1.getId(),
TrackingQueue.ConsumingStatus.IN_PROGRESS, null));
Assert.assertEquals(2, getQueuedCount(queue));
Assert.assertEquals(0, Iterators.size(queue.getBeingConsumed()));
Assert.assertEquals(1, getQueuedCount(queue));
Assert.assertEquals(1, Iterators.size(queue.getBeingConsumed()));
queue.add(new Element("work5", "data5"));