Ejemplo n.º 1
0
        public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayHasTheSameOrderAsTheQueue()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
            {
                new SystemInformation {
                    MachineName = "1", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "2", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "3", Timestamp = DateTime.UtcNow
                }
            };

            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var result = queue.PurgeAllItems();

            // Assert
            for (int i = 0; i < result.Length; i++)
            {
                Assert.AreEqual(items[i], result[i].Item);
            }
        }
Ejemplo n.º 2
0
        public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayWithThreeItems()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
            {
                new SystemInformation {
                    MachineName = "1", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "2", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "3", Timestamp = DateTime.UtcNow
                }
            };

            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var result = queue.PurgeAllItems();

            // Assert
            Assert.AreEqual(items.Length, result.Length);
        }
        public void EnqueueAndDequeue_OneMillionItems()
        {
            // Arrange
            int itemCount   = 1000000;
            var aLotOfItems = TestUtilities.GetSystemInformationObjects(itemCount);
            var queue       = new SystemInformationMessageQueue();

            // Act
            var enqueueWatch = new Stopwatch();

            enqueueWatch.Start();

            foreach (var item in aLotOfItems)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            enqueueWatch.Stop();
            Console.WriteLine("Enqueing {0} items took {1} milliseconds.", itemCount, enqueueWatch.ElapsedMilliseconds);

            // Assert
            for (int i = 0; i < aLotOfItems.Length; i++)
            {
                var dequedItem = queue.Dequeue();
                Assert.AreEqual(aLotOfItems[i], dequedItem.Item);
            }
        }
        public void EnqueueAndDequeue_OneMillionItems()
        {
            // Arrange
            int itemCount = 1000000;
            var aLotOfItems = TestUtilities.GetSystemInformationObjects(itemCount);
            var queue = new SystemInformationMessageQueue();

            // Act
            var enqueueWatch = new Stopwatch();
            enqueueWatch.Start();

            foreach (var item in aLotOfItems)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            enqueueWatch.Stop();
            Console.WriteLine("Enqueing {0} items took {1} milliseconds.", itemCount, enqueueWatch.ElapsedMilliseconds);

            // Assert
            for (int i = 0; i < aLotOfItems.Length; i++)
            {
                var dequedItem = queue.Dequeue();
                Assert.AreEqual(aLotOfItems[i], dequedItem.Item);
            }
        }
        public void Dequeue_FirstItemThatIsAddedIsReturned()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var firstItem = new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow };
            queue.Enqueue(new SystemInformationQueueItem(firstItem));
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow }));
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow }));

            // Act
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(firstItem, dequeuedItem.Item);
        }
Ejemplo n.º 6
0
        public void Dequeue_ReturnsItemsInTheSameOrderAsTheyHaveBeenAdded()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
            {
                new SystemInformation {
                    MachineName = "1", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "2", Timestamp = DateTime.UtcNow
                },
                new SystemInformation {
                    MachineName = "3", Timestamp = DateTime.UtcNow
                }
            };

            // Act
            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Assert
            foreach (var systemInformation in items)
            {
                var dequeuedItem = queue.Dequeue();
                Assert.AreEqual(systemInformation, dequeuedItem.Item);
            }
        }
        public void Dequeue_ReturnsItemsInTheSameOrderAsTheyHaveBeenAdded()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
                {
                    new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow }
                };

            // Act
            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Assert
            foreach (var systemInformation in items)
            {
                var dequeuedItem = queue.Dequeue();
                Assert.AreEqual(systemInformation, dequeuedItem.Item);
            }
        }
Ejemplo n.º 8
0
        public void Enqueue_ItemIsNull_ArgumentNullExceptionIsThrown()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            IQueueItem <SystemInformation> item = null;

            // Act
            queue.Enqueue(item);
        }
        public void PurgeQueueWhileEnqueuing_AllItemsThatAreEnqueuedAreAlsoDequeued()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool     = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var queue        = new SystemInformationMessageQueue();

            // Act
            var purgeCount        = 0;
            var dequeuedItemCount = 0;
            var enqueuedItemCount = 0;

            var thread1 = new Task(
                () =>
            {
                foreach (var item in itemPool)
                {
                    queue.Enqueue(new SystemInformationQueueItem(item));
                    enqueuedItemCount++;
                }
            });

            var thread2 = new Task(
                () =>
            {
                while (!queue.IsEmpty())
                {
                    purgeCount++;
                    dequeuedItemCount += queue.PurgeAllItems().Count();
                    int millisecondsToWaitBeforeNextItemIsQueued = TestUtilities.GetRandNumber(50, 100);
                    Thread.Sleep(millisecondsToWaitBeforeNextItemIsQueued);
                }
            });

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            thread1.Start();
            thread2.Start();
            Task.WaitAll(thread1, thread2);

            stopWatch.Stop();

            // Assert
            Console.WriteLine(
                "Enqueuing {0} items while another thread purged the queue took {1} milliseconds. The queue has been purged {2} time(s) during this time.",
                enqueuedItemCount,
                stopWatch.ElapsedMilliseconds,
                purgeCount);

            Assert.AreEqual(enqueuedItemCount, dequeuedItemCount);
            Assert.IsTrue(queue.IsEmpty());
        }
        public void EnqueueItemsWithTwoParallelThreads_AllItemsAreAddedToQueue()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool     = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var thread1Items = itemPool.Take(itemPoolSize / 2).ToList();
            var thread2Items = itemPool.Skip(itemPoolSize / 2).Take(itemPoolSize / 2).ToList();

            var queue = new SystemInformationMessageQueue();

            // Act
            var thread1 = new Action(
                () =>
            {
                foreach (var item in thread1Items)
                {
                    queue.Enqueue(new SystemInformationQueueItem(item));
                }
            });

            var thread2 = new Action(
                () =>
            {
                foreach (var item in thread2Items)
                {
                    queue.Enqueue(new SystemInformationQueueItem(item));
                }
            });

            var enqueueWatch = new Stopwatch();

            enqueueWatch.Start();

            Parallel.Invoke(thread1, thread2);

            enqueueWatch.Stop();
            Console.WriteLine("Enqueing {0} items with two parallel threads took {1} milliseconds.", itemPoolSize, enqueueWatch.ElapsedMilliseconds);

            // Assert
            Assert.AreEqual(itemPoolSize, queue.GetSize());
        }
        public void Enqueue_Collection_EachItemInTheSuppliedCollectionIsEnqueued()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            var items = TestUtilities.GetSystemInformationObjects(10).Select(i => new SystemInformationQueueItem(i)).ToArray();

            // Act
            queue.Enqueue(items);

            // Assert
            Assert.AreEqual(items.Length, queue.GetSize());
        }
Ejemplo n.º 12
0
        public void Enqueue_Collection_EachItemInTheSuppliedCollectionIsEnqueued()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            var items = TestUtilities.GetSystemInformationObjects(10).Select(i => new SystemInformationQueueItem(i)).ToArray();

            // Act
            queue.Enqueue(items);

            // Assert
            Assert.AreEqual(items.Length, queue.GetSize());
        }
Ejemplo n.º 13
0
        public void Enqueue_EmptyCollection_NoItemIsEnqueued()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            var items = new IQueueItem <SystemInformation>[] { };

            // Act
            queue.Enqueue(items);

            // Assert
            Assert.AreEqual(0, queue.GetSize());
        }
Ejemplo n.º 14
0
        public void GetSize_QueueContainsOneItem_ResultIsOne()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            var result = queue.GetSize();

            // Assert
            Assert.AreEqual(1, result);
        }
Ejemplo n.º 15
0
        public void PurgeAllItems_OnNonEmptyQueue_QueueIsEmptyAfterwards()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            queue.PurgeAllItems();

            // Assert
            Assert.IsTrue(queue.IsEmpty());
        }
Ejemplo n.º 16
0
        public void NonEmptyQueue_IsEmptyReturnsFalse()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            var result = queue.IsEmpty();

            // Assert
            Assert.IsFalse(result);
        }
Ejemplo n.º 17
0
        public void Dequeue_FirstItemThatIsAddedIsReturned()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var firstItem = new SystemInformation {
                MachineName = "1", Timestamp = DateTime.UtcNow
            };

            queue.Enqueue(new SystemInformationQueueItem(firstItem));
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation {
                MachineName = "2", Timestamp = DateTime.UtcNow
            }));
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation {
                MachineName = "3", Timestamp = DateTime.UtcNow
            }));

            // Act
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(firstItem, dequeuedItem.Item);
        }
Ejemplo n.º 18
0
        public void Enqueue_Item_DequeueReturnsSameItem()
        {
            // Arrange
            var item = new SystemInformation {
                MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow
            };
            var queue = new SystemInformationMessageQueue();

            // Act
            queue.Enqueue(new SystemInformationQueueItem(item));
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(item, dequeuedItem.Item);
        }
        public void DequeueItemsWithTwoParallelThreads_AllItemsAreDequeued()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool     = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var queue        = new SystemInformationMessageQueue();

            foreach (var item in itemPool)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var dequeuedItemCount = 0;
            var thread1           = new Action(
                () =>
            {
                while (queue.Dequeue() != null)
                {
                    Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                    dequeuedItemCount++;
                    Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                }
            });

            var thread2 = new Action(
                () =>
            {
                while (queue.Dequeue() != null)
                {
                    Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                    dequeuedItemCount++;
                    Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                }
            });

            var dequeueWatch = new Stopwatch();

            dequeueWatch.Start();

            Parallel.Invoke(thread1, thread2);

            dequeueWatch.Stop();
            Console.WriteLine("Dequeuing {0} items with two parallel threads took {1} milliseconds.", dequeuedItemCount, dequeueWatch.ElapsedMilliseconds);

            // Assert
            Assert.AreEqual(itemPoolSize, dequeuedItemCount);
        }
        public void DequeueItemsWithTwoParallelThreads_AllItemsAreDequeued()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var queue = new SystemInformationMessageQueue();
            foreach (var item in itemPool)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var dequeuedItemCount = 0;
            var thread1 = new Action(
                () =>
                {
                    while (queue.Dequeue() != null)
                    {
                        Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                        dequeuedItemCount++;
                        Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                    }
                });

            var thread2 = new Action(
                () =>
                {
                    while (queue.Dequeue() != null)
                    {
                        Monitor.Enter(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                        dequeuedItemCount++;
                        Monitor.Exit(this.dequeueItemsWithTwoParallelThreadsAllItemsAreDequeuedLockObject);
                    }
                });

            var dequeueWatch = new Stopwatch();
            dequeueWatch.Start();

            Parallel.Invoke(thread1, thread2);

            dequeueWatch.Stop();
            Console.WriteLine("Dequeuing {0} items with two parallel threads took {1} milliseconds.", dequeuedItemCount, dequeueWatch.ElapsedMilliseconds);

            // Assert
            Assert.AreEqual(itemPoolSize, dequeuedItemCount);
        }
Ejemplo n.º 21
0
        public void Enqueue_QueueItemCounterIsIncreasedByOne()
        {
            // Arrange
            var item = new SystemInformationQueueItem(new SystemInformation {
                MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow
            });
            int previousCount = item.EnqueuCount;

            var queue = new SystemInformationMessageQueue();

            queue.Enqueue(item);

            // Act
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(previousCount + 1, dequeuedItem.EnqueuCount);
        }
Ejemplo n.º 22
0
        public void GetSize_ResultIsWhatEverTheQueueSizeIs()
        {
            // Arrange
            var queue         = new SystemInformationMessageQueue();
            int expectedCount = TestUtilities.GetRandNumber(1, 10000000);
            var items         = TestUtilities.GetSystemInformationObjects(expectedCount);

            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }


            // Act
            var result = queue.GetSize();

            // Assert
            Assert.AreEqual(expectedCount, result);
        }
Ejemplo n.º 23
0
        public void Enqueue_EveryTimeAnItemIsEnqueued_TheItemCounterIsIncreasedByOne()
        {
            // Arrange
            int timesItemIsQueued = 10;
            var item = new SystemInformationQueueItem(new SystemInformation {
                MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow
            });

            var queue = new SystemInformationMessageQueue();

            // Act
            for (int i = 1; i <= timesItemIsQueued; i++)
            {
                queue.Enqueue(item);
                queue.Dequeue();
            }

            // Assert
            Assert.AreEqual(timesItemIsQueued, item.EnqueuCount);
        }
        public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayWithThreeItems()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
                {
                    new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow }
                };

            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var result = queue.PurgeAllItems();

            // Assert
            Assert.AreEqual(items.Length, result.Length);
        }
        public void PurgeAllItems_QueueContainsThreeItems_ResultIsArrayHasTheSameOrderAsTheQueue()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();

            var items = new[]
                {
                    new SystemInformation { MachineName = "1", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "2", Timestamp = DateTime.UtcNow },
                    new SystemInformation { MachineName = "3", Timestamp = DateTime.UtcNow }
                };

            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var result = queue.PurgeAllItems();

            // Assert
            for (int i = 0; i < result.Length; i++)
            {
                Assert.AreEqual(items[i], result[i].Item);
            }
        }
        public void PurgeAllItems_OnNonEmptyQueue_QueueIsEmptyAfterwards()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            queue.PurgeAllItems();

            // Assert
            Assert.IsTrue(queue.IsEmpty());
        }
        public void NonEmptyQueue_IsEmptyReturnsFalse()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            var result = queue.IsEmpty();

            // Assert
            Assert.IsFalse(result);
        }
        public void GetSize_ResultIsWhatEverTheQueueSizeIs()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            int expectedCount = TestUtilities.GetRandNumber(1, 10000000);
            var items = TestUtilities.GetSystemInformationObjects(expectedCount);
            foreach (var item in items)
            {
                queue.Enqueue(new SystemInformationQueueItem(item));
            }

            // Act
            var result = queue.GetSize();

            // Assert
            Assert.AreEqual(expectedCount, result);
        }
        public void GetSize_QueueContainsOneItem_ResultIsOne()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            queue.Enqueue(new SystemInformationQueueItem(new SystemInformation()));

            // Act
            var result = queue.GetSize();

            // Assert
            Assert.AreEqual(1, result);
        }
        public void Enqueue_QueueItemCounterIsIncreasedByOne()
        {
            // Arrange
            var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow });
            int previousCount = item.EnqueuCount;

            var queue = new SystemInformationMessageQueue();
            queue.Enqueue(item);

            // Act
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(previousCount + 1, dequeuedItem.EnqueuCount);
        }
        public void Enqueue_Item_DequeueReturnsSameItem()
        {
            // Arrange
            var item = new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow };
            var queue = new SystemInformationMessageQueue();

            // Act
            queue.Enqueue(new SystemInformationQueueItem(item));
            var dequeuedItem = queue.Dequeue();

            // Assert
            Assert.AreEqual(item, dequeuedItem.Item);
        }
        public void Enqueue_ItemsParameterIsNull_ArgumentNullExceptionIsThrown()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            IQueueItem<SystemInformation>[] items = null;

            // Act
            queue.Enqueue(items);
        }
        public void Enqueue_EveryTimeAnItemIsEnqueued_TheItemCounterIsIncreasedByOne()
        {
            // Arrange
            int timesItemIsQueued = 10;
            var item = new SystemInformationQueueItem(new SystemInformation { MachineName = Environment.MachineName, Timestamp = DateTime.UtcNow });

            var queue = new SystemInformationMessageQueue();

            // Act
            for (int i = 1; i <= timesItemIsQueued; i++)
            {
                queue.Enqueue(item);
                queue.Dequeue();
            }

            // Assert
            Assert.AreEqual(timesItemIsQueued, item.EnqueuCount);
        }
        public void PurgeQueueWhileEnqueuing_AllItemsThatAreEnqueuedAreAlsoDequeued()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var queue = new SystemInformationMessageQueue();

            // Act
            var purgeCount = 0;
            var dequeuedItemCount = 0;
            var enqueuedItemCount = 0;

            var thread1 = new Task(
                () =>
                {
                    foreach (var item in itemPool)
                    {
                        queue.Enqueue(new SystemInformationQueueItem(item));
                        enqueuedItemCount++;
                    }
                });

            var thread2 = new Task(
                () =>
                {
                    while (!queue.IsEmpty())
                    {
                        purgeCount++;
                        dequeuedItemCount += queue.PurgeAllItems().Count();
                        int millisecondsToWaitBeforeNextItemIsQueued = TestUtilities.GetRandNumber(50, 100);
                        Thread.Sleep(millisecondsToWaitBeforeNextItemIsQueued);
                    }
                });

            var stopWatch = new Stopwatch();
            stopWatch.Start();

            thread1.Start();
            thread2.Start();
            Task.WaitAll(thread1, thread2);

            stopWatch.Stop();

            // Assert
            Console.WriteLine(
                "Enqueuing {0} items while another thread purged the queue took {1} milliseconds. The queue has been purged {2} time(s) during this time.",
                enqueuedItemCount,
                stopWatch.ElapsedMilliseconds,
                purgeCount);

            Assert.AreEqual(enqueuedItemCount, dequeuedItemCount);
            Assert.IsTrue(queue.IsEmpty());
        }
        public void Enqueue_EmptyCollection_NoItemIsEnqueued()
        {
            // Arrange
            var queue = new SystemInformationMessageQueue();
            var items = new IQueueItem<SystemInformation>[] { };

            // Act
            queue.Enqueue(items);

            // Assert
            Assert.AreEqual(0, queue.GetSize());
        }
        public void EnqueueItemsWithTwoParallelThreads_AllItemsAreAddedToQueue()
        {
            // Arrange
            var itemPoolSize = 10000000;
            var itemPool = TestUtilities.GetSystemInformationObjects(itemPoolSize);
            var thread1Items = itemPool.Take(itemPoolSize / 2).ToList();
            var thread2Items = itemPool.Skip(itemPoolSize / 2).Take(itemPoolSize / 2).ToList();

            var queue = new SystemInformationMessageQueue();

            // Act
            var thread1 = new Action(
                () =>
                    {
                        foreach (var item in thread1Items)
                        {
                            queue.Enqueue(new SystemInformationQueueItem(item));
                        }
                    });

            var thread2 = new Action(
                () =>
                {
                    foreach (var item in thread2Items)
                    {
                        queue.Enqueue(new SystemInformationQueueItem(item));
                    }
                });

            var enqueueWatch = new Stopwatch();
            enqueueWatch.Start();

            Parallel.Invoke(thread1, thread2);

            enqueueWatch.Stop();
            Console.WriteLine("Enqueing {0} items with two parallel threads took {1} milliseconds.", itemPoolSize, enqueueWatch.ElapsedMilliseconds);

            // Assert
            Assert.AreEqual(itemPoolSize, queue.GetSize());
        }