< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.RabbitMqReceiveContext
Assembly: CoreWCF.RabbitMQ
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.RabbitMQ/src/CoreWCF/Channels/RabbitMqReceiveContext.cs
Line coverage
68%
Covered lines: 13
Uncovered lines: 6
Coverable lines: 19
Total lines: 54
Line coverage: 68.4%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
OnAbandonAsync()0%220%
OnCompleteAsync()100%22100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.RabbitMQ/src/CoreWCF/Channels/RabbitMqReceiveContext.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System.Threading;
 5using System.Threading.Tasks;
 6using Microsoft.Extensions.Logging;
 7using RabbitMQ.Client;
 8
 9namespace CoreWCF.Channels
 10{
 11    internal class RabbitMqReceiveContext : ReceiveContext
 12    {
 13        private readonly ulong _deliveryTag;
 14        private readonly IModel _sourceChannel;
 15        private readonly bool _isAutoAck;
 16        private readonly ILogger _logger;
 17
 318        public RabbitMqReceiveContext(
 319            ulong deliveryTag,
 320            IModel sourceChannel,
 321            bool isAutoAck,
 322            ILogger logger)
 23        {
 324            _deliveryTag = deliveryTag;
 325            _sourceChannel = sourceChannel;
 326            _isAutoAck = isAutoAck;
 327            _logger = logger;
 328        }
 29
 30        protected override async Task OnAbandonAsync(CancellationToken token)
 31        {
 032            await Task.Run(() =>
 033                _logger.LogError("Dispatch failed for message with delivery tag: {deliveryTag}", _deliveryTag),
 034                token);
 35
 036            if (!_isAutoAck)
 37            {
 38                // Note: The default behavior is to requeue the message. This works well with Quorum queues
 39                // as they have a delivery limit, but it is a known issue that Classic queues do not have a
 40                // delivery limit, exposing them to risk of a DOS.
 41                // GitHub Issue: https://github.com/rabbitmq/rabbitmq-server/issues/2013
 042                _sourceChannel.BasicNack(_deliveryTag, false, true);
 43            }
 044        }
 45
 46        protected override async Task OnCompleteAsync(CancellationToken token)
 47        {
 348            if (!_isAutoAck)
 49            {
 650                await Task.Run(() => _sourceChannel.BasicAck(_deliveryTag, false), token);
 51            }
 252        }
 53    }
 54}