public async Task Receiver_CompletesDelivery_WhenBodyIsValid() { var utcNow = DateTime.UtcNow; var ttl = TimeSpan.FromMinutes(5); IDelivery delivery; var simulator = _simulation.AddServiceBus() .SetCertificate(_testCertificate) .AddQueue(TestInQueue) .Build(); await simulator .StartAsync() .ConfigureAwait(false); var settings = new AzureServiceBusSettings { InConnectionString = simulator.ConnectionString, InQueueName = TestInQueue }; var receiver = new AzureServiceBusMessageReceiver(settings, new AzureServiceBusMessageHandler()); using var cts = new CancellationTokenSource(); var runTask = receiver.RunAsync(cts.Token); delivery = simulator.Queues[TestInQueue].Post(new Amqp.Message() { Header = new Amqp.Framing.Header { DeliveryCount = 3, Ttl = (uint)ttl.TotalMilliseconds }, BodySection = new Amqp.Framing.Data { Binary = Encoding.ASCII.GetBytes("body1abc") }, Properties = new Amqp.Framing.Properties { MessageId = "8457986", CorrelationId = Guid.NewGuid().ToString(), CreationTime = utcNow }, MessageAnnotations = new Amqp.Framing.MessageAnnotations { [(Symbol)"x-opt-enqueue-sequence-number"] = 1234L, [(Symbol)"x-opt-sequence-number"] = 1234L, [(Symbol)"x-opt-enqueued-time"] = utcNow, [(Symbol)"x-opt-locked-until"] = utcNow.Add(ttl), [(Symbol)"x-opt-scheduled-enqueue-time"] = utcNow.AddMinutes(10), [(Symbol)"x-opt-partition-id"] = (short)17, [(Symbol)"x-opt-partition-key"] = "Key1", [(Symbol)"x-opt-via-partition-key"] = "VKey1", [(Symbol)"x-opt-deadletter-source"] = "$deadletter" } }); var deliveryTask = delivery.WaitAsync(TimeSpan.FromSeconds(10)); await Task.WhenAny(runTask, deliveryTask).ConfigureAwait(false); cts.Cancel(); Assert.AreEqual(DeliveryResult.Completed, delivery.Result); }
public async Task Receiver_AbandonsDelivery_WhenBodyIsInvalid() { IDelivery delivery; var simulator = _simulation.AddServiceBus() .SetCertificate(_testCertificate) .AddQueue(TestInQueue) .Build(); await simulator .StartAsync() .ConfigureAwait(false); var settings = new AzureServiceBusSettings { InConnectionString = simulator.ConnectionString, InQueueName = TestInQueue }; var receiver = new AzureServiceBusMessageReceiver(settings, new AzureServiceBusMessageHandler()); using var cts = new CancellationTokenSource(); var runTask = receiver.RunAsync(cts.Token); delivery = simulator.Queues[TestInQueue].Post(new Amqp.Message() { BodySection = new Amqp.Framing.Data { Binary = Encoding.ASCII.GetBytes("body2") }, Properties = new Amqp.Framing.Properties { MessageId = "54795232" } }); var deliveryTask = delivery.WaitAsync(TimeSpan.FromSeconds(10)); await Task.WhenAny(runTask, deliveryTask).ConfigureAwait(false); cts.Cancel(); Assert.AreEqual(DeliveryResult.Abandoned, delivery.Result); }