< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.ByteStreamMessageEncoder
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/ByteStreamMessageEncoder.cs
Line coverage
60%
Covered lines: 34
Uncovered lines: 22
Coverable lines: 56
Total lines: 228
Line coverage: 60.7%
Branch coverage
38%
Covered branches: 7
Total branches: 18
Branch coverage: 38.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
IsContentTypeSupported(...)100%11100%
ReadMessageAsync(...)50%2280%
ReadMessage(...)50%4475%
WriteMessageAsync()0%440%
WriteMessage(...)50%8878.94%
ToString()100%110%
CoreWCF.Runtime.Diagnostics.ITraceSourceStringProvider.GetSourceString()100%110%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/ByteStreamMessageEncoder.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;
 5using System.IO;
 6using System.Threading.Tasks;
 7using System.Xml;
 8using CoreWCF.Runtime;
 9using CoreWCF.Runtime.Diagnostics;
 10
 11namespace CoreWCF.Channels
 12{
 13    internal class ByteStreamMessageEncoder : MessageEncoder, ITraceSourceStringProvider
 14    {
 15        private readonly string _maxSentMessageSizeExceededResourceString;
 16        private readonly XmlDictionaryReaderQuotas _quotas;
 17        private readonly XmlDictionaryReaderQuotas _bufferedReadReaderQuotas;
 18        /// Specifies if this encoder produces Messages that provide a body reader (with the Message.GetReaderAtBodyCont
 19        private readonly bool _moveBodyReaderToContent;
 20
 3521        public ByteStreamMessageEncoder(XmlDictionaryReaderQuotas quotas, bool moveBodyReaderToContent)
 22        {
 3523            _quotas = new XmlDictionaryReaderQuotas();
 3524            quotas.CopyTo(_quotas);
 25
 3526            _bufferedReadReaderQuotas = EncoderHelpers.GetBufferedReadQuotas(_quotas);
 27
 3528            _maxSentMessageSizeExceededResourceString = SR.MaxSentMessageSizeExceeded;
 3529            _moveBodyReaderToContent = moveBodyReaderToContent;
 3530        }
 31
 032        public override string ContentType => null;
 33
 034        public override string MediaType => null;
 35
 536        public override MessageVersion MessageVersion => MessageVersion.None;
 37
 3838        public override bool IsContentTypeSupported(string contentType) => true;
 39
 40        public override Task<Message> ReadMessageAsync(Stream stream, int maxSizeOfHeaders, string contentType)
 41        {
 242            if (stream == null)
 43            {
 044                throw Fx.Exception.ArgumentNull(nameof(stream));
 45            }
 46
 47            //if (TD.ByteStreamMessageDecodingStartIsEnabled())
 48            //{
 49            //    TD.ByteStreamMessageDecodingStart();
 50            //}
 51
 252            Message message = ByteStreamMessage.CreateMessage(stream, _quotas, _moveBodyReaderToContent);
 253            message.Properties.Encoder = this;
 54
 55            //if (SMTD.StreamedMessageReadByEncoderIsEnabled())
 56            //{
 57            //    SMTD.StreamedMessageReadByEncoder(EventTraceActivityHelper.TryExtractActivity(message, true));
 58            //}
 59
 60            //if (MessageLogger.LogMessagesAtTransportLevel)
 61            //{
 62            //    MessageLogger.LogMessage(ref message, MessageLoggingSource.TransportReceive);
 63            //}
 64
 265            return Task.FromResult(message);
 66        }
 67
 68        public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
 69        {
 370            if (buffer.Array == null)
 71            {
 072                throw Fx.Exception.ArgumentNull("buffer.Array");
 73            }
 74
 375            if (bufferManager == null)
 76            {
 077                throw Fx.Exception.ArgumentNull(nameof(bufferManager));
 78            }
 79
 80            //if (TD.ByteStreamMessageDecodingStartIsEnabled())
 81            //{
 82            //    TD.ByteStreamMessageDecodingStart();
 83            //}
 84
 385            var messageData = new ByteStreamBufferedMessageData(buffer, bufferManager);
 86
 387            Message message = ByteStreamMessage.CreateMessage(messageData, _bufferedReadReaderQuotas, _moveBodyReaderToC
 388            message.Properties.Encoder = this;
 89
 90            //if (SMTD.MessageReadByEncoderIsEnabled())
 91            //{
 92            //    SMTD.MessageReadByEncoder(
 93            //        EventTraceActivityHelper.TryExtractActivity(message, true),
 94            //        buffer.Count,
 95            //        this);
 96            //}
 97
 98            //if (MessageLogger.LogMessagesAtTransportLevel)
 99            //{
 100            //    MessageLogger.LogMessage(ref message, MessageLoggingSource.TransportReceive);
 101            //}
 102
 3103            return message;
 104        }
 105
 106        public override async Task WriteMessageAsync(Message message, Stream stream)
 107        {
 0108            if (message == null)
 109            {
 0110                throw Fx.Exception.ArgumentNull(nameof(message));
 111            }
 112
 0113            if (stream == null)
 114            {
 0115                throw Fx.Exception.ArgumentNull(nameof(stream));
 116            }
 117
 0118            ThrowIfMismatchedMessageVersion(message);
 119
 120            //EventTraceActivity eventTraceActivity = null;
 121            //if (TD.ByteStreamMessageEncodingStartIsEnabled())
 122            //{
 123            //    eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message);
 124            //    TD.ByteStreamMessageEncodingStart(eventTraceActivity);
 125            //}
 126
 0127            message.Properties.Encoder = this;
 128
 129            //if (MessageLogger.LogMessagesAtTransportLevel)
 130            //{
 131            //    MessageLogger.LogMessage(ref message, MessageLoggingSource.TransportSend);
 132            //}
 133
 0134            using (XmlWriter writer = new XmlByteStreamWriter(stream, false))
 135            {
 0136                await message.WriteMessageAsync(writer);
 0137                await writer.FlushAsync();
 0138            }
 139
 140            //if (SMTD.StreamedMessageWrittenByEncoderIsEnabled())
 141            //{
 142            //    SMTD.StreamedMessageWrittenByEncoder(eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity
 143            //}
 0144        }
 145
 146        public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager
 147        {
 5148            if (message == null)
 149            {
 0150                throw Fx.Exception.ArgumentNull(nameof(message));
 151            }
 152
 5153            if (bufferManager == null)
 154            {
 0155                throw Fx.Exception.ArgumentNull(nameof(bufferManager));
 156            }
 157
 5158            if (maxMessageSize < 0)
 159            {
 0160                throw Fx.Exception.ArgumentOutOfRange(nameof(maxMessageSize), maxMessageSize, SR.Format(SR.ArgumentOutOf
 161            }
 162
 5163            if (messageOffset < 0)
 164            {
 0165                throw Fx.Exception.ArgumentOutOfRange(nameof(messageOffset), messageOffset, SR.Format(SR.ArgumentOutOfMi
 166            }
 167
 168            //EventTraceActivity eventTraceActivity = null;
 169            //if (TD.ByteStreamMessageEncodingStartIsEnabled())
 170            //{
 171            //    eventTraceActivity = EventTraceActivityHelper.TryExtractActivity(message);
 172            //    TD.ByteStreamMessageEncodingStart(eventTraceActivity);
 173            //}
 174
 5175            ThrowIfMismatchedMessageVersion(message);
 5176            message.Properties.Encoder = this;
 177
 178            ArraySegment<byte> messageBuffer;
 179
 5180            using (BufferManagerOutputStream stream = new BufferManagerOutputStream(_maxSentMessageSizeExceededResourceS
 181            {
 5182                stream.Skip(messageOffset);
 5183                using (XmlWriter writer = new XmlByteStreamWriter(stream, true))
 184                {
 5185                    message.WriteMessage(writer);
 5186                    writer.Flush();
 5187                    byte[] bytes = stream.ToArray(out int size);
 5188                    messageBuffer = new ArraySegment<byte>(bytes, messageOffset, size - messageOffset);
 5189                }
 190            }
 191
 192            //if (SMTD.MessageWrittenByEncoderIsEnabled())
 193            //{
 194            //    SMTD.MessageWrittenByEncoder(
 195            //        eventTraceActivity ?? EventTraceActivityHelper.TryExtractActivity(message),
 196            //        messageBuffer.Count,
 197            //        this);
 198            //}
 199
 200            //if (MessageLogger.LogMessagesAtTransportLevel)
 201            //{
 202            //    // DevDiv#486728
 203            //    // Don't pass in a buffer manager to avoid returning 'messageBuffer" to the bufferManager twice.
 204            //    ByteStreamBufferedMessageData messageData = new ByteStreamBufferedMessageData(messageBuffer, null);
 205            //    using (XmlReader reader = new XmlBufferedByteStreamReader(messageData, this._quotas))
 206            //    {
 207            //        MessageLogger.LogMessage(ref message, reader, MessageLoggingSource.TransportSend);
 208            //    }
 209            //}
 210
 5211            return messageBuffer;
 212        }
 213
 0214        public override string ToString() => ByteStreamMessageUtility.EncoderName;
 215
 216        string ITraceSourceStringProvider.GetSourceString()
 217        {
 218            // Other MessageEncoders use base.GetTraceSourceString but that would require a public api change in Message
 219            // as ByteStreamMessageEncoder is in a different assemly. The same logic is reimplemented here.
 220            //if (_traceSourceString == null)
 221            //{
 222            //    _traceSourceString = DiagnosticTraceBase.CreateDefaultSourceString(this);
 223            //}
 224
 0225            return null;
 226        }
 227    }
 228}