< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.BufferedMessageBuffer
Assembly: CoreWCF.WebHttp
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.WebHttp/src/CoreWCF/MessageBuffer.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 48
Coverable lines: 48
Total lines: 125
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 16
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%110%
WriteMessage(...)0%440%
Close()0%220%
CreateMessage()0%660%
CreateBufferDisposedException()100%110%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.WebHttp/src/CoreWCF/MessageBuffer.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.Collections.Generic;
 6using System.IO;
 7using CoreWCF.Channels;
 8
 9namespace CoreWCF
 10{
 11    internal class BufferedMessageBuffer : MessageBuffer
 12    {
 13        private IBufferedMessageData _messageData;
 14        private readonly KeyValuePair<string, object>[] _properties;
 15        private bool _closed;
 16        private readonly bool[] _understoodHeaders;
 17        private readonly bool _understoodHeadersModified;
 18
 019        public BufferedMessageBuffer(IBufferedMessageData messageData,
 020            KeyValuePair<string, object>[] properties, bool[] understoodHeaders, bool understoodHeadersModified)
 21        {
 022            _messageData = messageData;
 023            _properties = properties;
 024            _understoodHeaders = understoodHeaders;
 025            _understoodHeadersModified = understoodHeadersModified;
 026            messageData.Open();
 027        }
 28
 29        public override int BufferSize
 30        {
 31            get
 32            {
 033                lock (ThisLock)
 34                {
 035                    if (_closed)
 36                    {
 037                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateBufferDisposedException());
 38                    }
 39
 040                    return _messageData.Buffer.Count;
 41                }
 042            }
 43        }
 44
 45        public override void WriteMessage(Stream stream)
 46        {
 047            if (stream == null)
 48            {
 049                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(stream));
 50            }
 51
 052            lock (ThisLock)
 53            {
 054                if (_closed)
 55                {
 056                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateBufferDisposedException());
 57                }
 58
 059                ArraySegment<byte> buffer = _messageData.Buffer;
 060                stream.Write(buffer.Array, buffer.Offset, buffer.Count);
 061            }
 062        }
 63
 64        public override string MessageContentType
 65        {
 66            get
 67            {
 068                lock (ThisLock)
 69                {
 070                    if (_closed)
 71                    {
 072                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateBufferDisposedException());
 73                    }
 74
 075                    return _messageData.MessageEncoder.ContentType;
 76                }
 077            }
 78        }
 79
 080        private object ThisLock { get; } = new object();
 81
 82        public override void Close()
 83        {
 084            lock (ThisLock)
 85            {
 086                if (!_closed)
 87                {
 088                    _closed = true;
 089                    _messageData.Close();
 090                    _messageData = null;
 91                }
 092            }
 093        }
 94
 95        public override Message CreateMessage()
 96        {
 097            lock (ThisLock)
 98            {
 099                if (_closed)
 100                {
 0101                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateBufferDisposedException());
 102                }
 103
 0104                RecycledMessageState recycledMessageState = _messageData.TakeMessageState();
 0105                if (recycledMessageState == null)
 106                {
 0107                    recycledMessageState = new RecycledMessageState();
 108                }
 109
 0110                BufferedMessage bufferedMessage = new BufferedMessage(_messageData, recycledMessageState, _understoodHea
 0111                foreach (KeyValuePair<string, object> keypair in _properties)
 112                {
 0113                    bufferedMessage.Properties[keypair.Key] = keypair.Value;
 114                }
 0115                _messageData.Open();
 0116                return bufferedMessage;
 117            }
 0118        }
 119
 120        private Exception CreateBufferDisposedException()
 121        {
 0122            return new ObjectDisposedException("", SR.MessageBufferIsClosed);
 123        }
 124    }
 125}