示例#1
0
        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);
        }
示例#2
0
        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);
        }