Example #1
0
        public async Task IndexFiles_CreateAndDelete()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                IndexItemsPerPage = 2
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.EnqueueMany(2);
            await Dequeue(queue, 2);

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
            PrintFiles(config.GetIndexPath());

            queue.EnqueueMany(2);
            await Dequeue(queue, 2);

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
            PrintFiles(config.GetIndexPath());

            queue.EnqueueMany(2);
            await Dequeue(queue, 2);

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
            PrintFiles(config.GetIndexPath());
        }
Example #2
0
        public void Enqueue10()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(10);

            // Act
            var statistics = queue.GetStatistics();

            // Assert
            var expectedDataSize =
                Enumerable.Range(1, 10)
                .Select(itemNo => $"Message {itemNo}")
                .Select(Encoding.UTF8.GetBytes)
                .Select(bytes => bytes.LongLength)
                .Sum();


            statistics.ShouldDeepEqual(new QueueStatistics()
            {
                QueueLength           = 10,
                QueueDataSizeEstimate = expectedDataSize,
                TotalEnqueuedItems    = 10
            });
        }
Example #3
0
        private static async Task Dequeue(UnitTestPersistentQueue queue, int elements)
        {
            var result = await queue.DequeueAsync(1, elements);

            result.Items.Count.ShouldBe(elements);
            result.Commit();
        }
Example #4
0
        public void Empty_HasItemsIsFalse()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            // Act & Assert
            queue.HasItems.ShouldBeFalse();
        }
Example #5
0
        public void Empty_Enqueued()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(10);

            // Act & Assert
            queue.HasItems.ShouldBeTrue();
        }
Example #6
0
        public async Task LessThanMaxItemsInQueue_ReturnsAvailable()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(2);

            // Act
            var result = await queue.DequeueAsync(1, 10);

            // Assert
            result.Items.Count.ShouldBe(2);
        }
Example #7
0
        public void ItemsInQueue_ReturnsSynchronous()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(2);

            // Act
            var resultTask = queue.DequeueAsync(1, 2);

            // Assert
            resultTask.IsCompleted.ShouldBeTrue();
        }
Example #8
0
        public void Cancel_ShouldThrowException()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            var cts = new CancellationTokenSource();

            // Act & Assert
            var resultTask = queue.DequeueAsync(10, 12, cts.Token);

            cts.Cancel();
            Should.ThrowAsync <OperationCanceledException>(async() => await resultTask);
        }
Example #9
0
        public async Task EmptyQueue_WaitForNextItem()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            // Act & Assert
            var resultTask = queue.DequeueAsync(1, 2);

            resultTask.IsCompleted.ShouldBeFalse();

            queue.Enqueue(1);
            var result = await resultTask;

            result.Items.Count.ShouldBe(1);
        }
Example #10
0
        public void WaitAndCancel()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            var cts = new CancellationTokenSource();

            // Act & Assert
            var resultTask = queue.DequeueAsync(10, 12, cts.Token);

            resultTask.IsCompleted.ShouldBeFalse();
            resultTask.IsCanceled.ShouldBeFalse();

            cts.Cancel();
            resultTask.IsCanceled.ShouldBeTrue();
        }
Example #11
0
        public void Empty()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            // Act
            var statistics = queue.GetStatistics();

            // Assert
            statistics.ShouldDeepEqual(new QueueStatistics()
            {
                QueueLength           = 0,
                QueueDataSizeEstimate = 0,
                TotalEnqueuedItems    = 0
            });
        }
Example #12
0
        public async Task EnqueueAndDequeue10_HasItemsFalse()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(10);

            // Act
            for (var i = 0; i < 5; i++)
            {
                var result = await queue.DequeueAsync(1, 2);

                result.Commit();
            }

            // Assert
            queue.HasItems.ShouldBeFalse();
        }
Example #13
0
        public void WaitForMinElements()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();

            // Act & Assert
            var resultTask = queue.DequeueAsync(10, 12);

            for (var i = 0; i < 4; i++)
            {
                queue.EnqueueMany(2);
                resultTask.IsCompleted.ShouldBeFalse();
            }

            queue.EnqueueMany(2);
            resultTask.IsCompleted.ShouldBeTrue();
        }
Example #14
0
        public async Task WithCommit_NewElementsAreReturned()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(10);

            // Act
            var results1 = await queue.DequeueAsync(1, 2);

            results1.Commit();

            var results2 = await queue.DequeueAsync(1, 2);

            // Assert
            results1.Items.Count.ShouldBe(2);
            results2.Items.Count.ShouldBe(2);

            CollectionAssert.AreNotEqual(results1.Items[0].ToArray(), results2.Items[0].ToArray());
        }
Example #15
0
        public async Task IndexFiles_ManyAreDeletedAfterCommit()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                IndexItemsPerPage = 2
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.EnqueueMany(20);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(10);

            var result = await queue.DequeueAsync(1, 10);

            result.Commit();
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(6);
        }
Example #16
0
        public void DataFiles_AreCreated()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                DataPageSize = 64
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.Enqueue(new byte[32]);
            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(1);
            queue.Enqueue(new byte[32]);
            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(1);
            queue.Enqueue(new byte[32]);
            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(2);
            queue.Enqueue(new byte[32]);
            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(2);
        }
Example #17
0
        public void IndexFiles_AreCreated()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                IndexItemsPerPage = 2
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.Enqueue(1);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
            queue.Enqueue(1);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
            queue.Enqueue(1);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(2);
            queue.Enqueue(1);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(2);
        }
Example #18
0
        public async Task IndexFiles_OneRemainsAfterAllItemsAreCommitted()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                IndexItemsPerPage = 2
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.EnqueueMany(20);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(10);

            while (queue.HasItems)
            {
                await Dequeue(queue, 2);
            }

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(1);
        }
Example #19
0
        public async Task DataFiles_OneIsDeletedAfterCommit()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                DataPageSize = 64
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            for (var i = 0; i < 20; i++)
            {
                queue.Enqueue(new byte[32]);
            }

            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(10);

            await Dequeue(queue, 3);

            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(9);
        }
Example #20
0
        public async Task IndexFiles_OneIsDeletedAfterCommit()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                IndexItemsPerPage = 2
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            queue.EnqueueMany(20);
            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(10);

            await Dequeue(queue, 3);

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(9);

            await Dequeue(queue, 4);

            Directory.GetFiles(config.GetIndexPath()).Length.ShouldBe(7);
        }
Example #21
0
        public async Task EnqueueAndDequeue10()
        {
            // Arrange
            using var queue = new UnitTestPersistentQueue();
            queue.EnqueueMany(10);

            for (var i = 0; i < 5; i++)
            {
                var result = await queue.DequeueAsync(1, 2);

                result.Commit();
            }

            // Act
            var statistics = queue.GetStatistics();

            // Assert
            statistics.ShouldDeepEqual(new QueueStatistics()
            {
                QueueLength           = 0,
                QueueDataSizeEstimate = 0,
                TotalEnqueuedItems    = 10
            });
        }
Example #22
0
        public async Task DataFiles_OneRemainsAfterAllItemsAreCommitted()
        {
            // Arrange
            var config = new UnitTestQueueConfiguration
            {
                DataPageSize = 64
            };

            using var queue = new UnitTestPersistentQueue(config);


            // Act & Assert
            for (var i = 0; i < 20; i++)
            {
                queue.Enqueue(new byte[32]);
            }

            while (queue.HasItems)
            {
                await Dequeue(queue, 2);
            }

            Directory.GetFiles(config.GetDataPath()).Length.ShouldBe(1);
        }