public async Task TearDown() { var nameProvider = new DelayedDeliveryTableNameProvider(); await DeleteTable(nameProvider.GetStagingTableName(endpointName)); await DeleteTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); }
public async Task Prepare_creates_the_staging_queue() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); var timeoutTarget = new ASQTarget(connectionString, nameProvider); // Act await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); // Assert Assert.IsTrue(await DoesTableExist(nameProvider.GetStagingTableName(endpointName)).ConfigureAwait(true)); }
public async Task Completing_with_large_entities_batches_respecting_size_limitations() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); var endpointName = nameof(Completing_with_large_entities_batches_respecting_size_limitations); var cutOffDate = DateTime.UtcNow; var random = new Random(); var timeouts = new List <StagedDelayedMessageEntity>(); var target = new ASQTarget(connectionString, nameProvider); var stagingTableName = nameProvider.GetStagingTableName(endpointName); await CreateTimeoutTable(stagingTableName); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var stagingTable = tableClient.GetTableReference(stagingTableName); // the entity will roughly be 98 KB and we will store 50 of those which makes the actual payload be around 5 MB for (var x = 0; x < 50; x++) { var dateTime = cutOffDate.AddDays(random.Next(1, 5)); var messageId = Guid.NewGuid().ToString(); var entity = new StagedDelayedMessageEntity { Destination = new string('a', 32 * 1024), Headers = new string('a', 32 * 1024), Time = dateTime, MessageId = messageId, Body = new byte[32 * 1024], RowKey = $"{messageId}_{dateTime.ToString($"yyyyMMddHHmmss")}", PartitionKey = "1" }; await stagingTable.ExecuteAsync(TableOperation.Insert(entity)); timeouts.Add(entity); } // Act var result = await target.PrepareTargetEndpointBatchMigrator(endpointName); var completeResult = await result.CompleteBatch(1); // Assert Assert.IsNotNull(completeResult); Assert.AreEqual(timeouts.Count, completeResult); }
public async Task Complete_Removes_Staging_Queue_If_Empty() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var timeoutTarget = new ASQTarget(connectionString, nameProvider); await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); await migrator.StageBatch(new List <TimeoutData> { new TimeoutData { Id = "SomeID", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeMessageId" } }, Destination = "SomeDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 12, 12, DateTimeKind.Utc) }, new TimeoutData { Id = "SomeOtherId", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeOtherMessageId" } }, Destination = "SomeOtherDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 13, 13, DateTimeKind.Utc) }, }, 1); await migrator.CompleteBatch(1); // Act await timeoutTarget.Complete(endpointName); // Assert var stagingTableExists = await DoesTableExist(nameProvider.GetStagingTableName(endpointName)); Assert.IsFalse(stagingTableExists); }
public async Task CompleteBatch_Removes_All_Entries_From_Staging() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var timeoutTarget = new ASQTarget(connectionString, nameProvider); await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); await migrator.StageBatch(new List <TimeoutData> { new TimeoutData { Id = "SomeID", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeMessageId" } }, Destination = "SomeDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 12, 12, DateTimeKind.Utc) }, new TimeoutData { Id = "SomeOtherId", Headers = new Dictionary <string, string> { { "NServiceBus.MessageId", "SomeOtherMessageId" } }, Destination = "SomeOtherDestination", State = new byte[2], Time = new DateTime(2021, 12, 12, 12, 13, 13, DateTimeKind.Utc) }, }, 1); // Act await migrator.CompleteBatch(1); // Assert var recordsInStagingTable = await ReadTimeoutsFromTable(nameProvider.GetStagingTableName(endpointName)); Assert.AreEqual(0, recordsInStagingTable.Count); }
public async Task Abort_Removes_Staging_Table() { // Arrange var nameProvider = new DelayedDeliveryTableNameProvider(); await CreateTimeoutTable(nameProvider.GetDelayedDeliveryTableName(endpointName)); var timeoutTarget = new ASQTarget(connectionString, nameProvider); await using var migrator = await timeoutTarget.PrepareTargetEndpointBatchMigrator(endpointName); // Act await timeoutTarget.Abort(endpointName); // Assert var stagingTableExists = await DoesTableExist(nameProvider.GetStagingTableName(endpointName)); Assert.IsFalse(stagingTableExists); }