public void CreateStringQueue_FromStringList_ShouldCreateAThreadSafeConcurrentQueueWithSameElements(List <string> ls) { // Compare just the total count and the first item. var sq = StringQueue.CreateStringQueue(ls); Assert.AreEqual(sq.Count(), ls.Count); var item = sq.Dequeue(); Assert.AreEqual(item, ls.FirstOrDefault()); }
public void Enqueue_CorrectStringItem_ShouldAddItemToTheQueueAndTriggersEventItemEnqueued(List <string> ls) { var sq = StringQueue.CreateStringQueue(ls); var wait1 = new AutoResetEvent(false); sq.ItemEnqueued += (sender, eventArgs) => wait1.Set(); sq.Enqueue("test"); Assert.IsTrue(wait1.WaitOne(TimeSpan.FromSeconds(5))); Assert.AreEqual(sq.Count(), ls.Count + 1); }
public void Enqueue_NullItem_ShouldReturnTheQueueUnchangedAndNotTriggersEventItemEnqueued(List <string> ls) { var sq = StringQueue.CreateStringQueue(ls); var wait1 = new AutoResetEvent(false); sq.ItemEnqueued += (sender, eventArgs) => wait1.Set(); sq.Enqueue(null); Assert.IsFalse(wait1.WaitOne(TimeSpan.FromSeconds(5))); Assert.AreEqual(sq.Count(), ls.Count); }
public void Consume_WithVariousConsumers_ShouldConsumeTheQueueCorrectly(List <string> ls) { var sq = StringQueue.CreateStringQueue(ls); // Necesitamos usar Task.Factory.StartNew para probar nuestro método Consume // durante un cierto tiempo (5 segundos). Este wrapper por sí mismo no garantiza un nuevo // hilo, pero nuestro método se encarga de crearlo, tal como se indica en los requerimientos. // La diferencia principal es que Task.Factory usa Thread-pool, que es manejado por el // sistema, se supone que de forma más eficiente. También permite especificar un intervalo // de tiempo en el que debe correr el proceso, como en este caso. // Probar procesos multi-threading siempre es un poco // truculento, pero es mucho mejor que no hacer nada. var t1 = Task.Factory.StartNew(() => Consumer.CreateConsumerNewThread(sq, "Consumer 1").Consume()).Wait(5000); var t2 = Task.Factory.StartNew(() => Consumer.CreateConsumerNewThread(sq, "Consumer 2").Consume()).Wait(5000); var t3 = Task.Factory.StartNew(() => Consumer.CreateConsumerNewThread(sq, "Consumer 3").Consume()).Wait(5000); var t4 = Task.Factory.StartNew(() => Consumer.CreateConsumerNewThread(sq, "Consumer 4").Consume()).Wait(5000); Assert.AreEqual(sq.Count(), 0); }
public void Dequeue_Item_ShouldUpdateTheQueueAndTriggersEventItemDequeued(List <string> ls) { var sq = StringQueue.CreateStringQueue(ls); var wait1 = new AutoResetEvent(false); sq.ItemDequeued += (sender, eventArgs) => wait1.Set(); var item = sq.Dequeue(); if (item != null) { Assert.IsTrue(wait1.WaitOne(TimeSpan.FromSeconds(5))); } else { Assert.IsFalse(wait1.WaitOne(TimeSpan.FromSeconds(5))); } Assert.AreEqual(item, ls.FirstOrDefault()); }
public void CreateStringQueue_FromNullStringList_ShouldThrowArgumentNUllException(List <string> ls) { Assert.Throws <ArgumentNullException>(() => StringQueue.CreateStringQueue(ls)); }