< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.ByteStreamBufferedMessageData
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/ByteStreamBufferedMessageData.cs
Line coverage
94%
Covered lines: 32
Uncovered lines: 2
Coverable lines: 34
Total lines: 96
Line coverage: 94.1%
Branch coverage
83%
Covered branches: 10
Total branches: 12
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor(...)100%11100%
.ctor(...)50%2285.71%
Open()100%11100%
Close()100%88100%
ToStream()100%11100%
ThrowIfClosed()50%2266.66%
.ctor(...)100%11100%
Close()100%11100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/ByteStreamBufferedMessageData.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 CoreWCF.Runtime;
 7
 8namespace CoreWCF.Channels
 9{
 10    internal class ByteStreamBufferedMessageData
 11    {
 12        private ArraySegment<byte> _buffer;
 13        private BufferManager _bufferManager;
 14        private int _refCount;
 15
 16        public ByteStreamBufferedMessageData(ArraySegment<byte> buffer)
 117            : this(buffer, null)
 18        {
 119        }
 20
 1221        public ByteStreamBufferedMessageData(ArraySegment<byte> buffer, BufferManager bufferManager)
 22        {
 1223            if (buffer.Array == null)
 24            {
 025                throw Fx.Exception.ArgumentNull(SR.Format(SR.ArgumentPropertyShouldNotBeNullError, "buffer.Array"));
 26            }
 27
 1228            _buffer = buffer;
 1229            _bufferManager = bufferManager;
 1230            _refCount = 0;
 1231        }
 32
 7933        private bool IsClosed => _refCount < 0;
 34
 35        public ArraySegment<byte> Buffer
 36        {
 37            get
 38            {
 4839                ThrowIfClosed();
 4840                return _buffer;
 41            }
 42        }
 43
 44        public void Open()
 45        {
 1946            ThrowIfClosed();
 1947            _refCount++;
 1948        }
 49
 50        public void Close()
 51        {
 1252            if (!IsClosed)
 53            {
 1254                if (--_refCount <= 0)
 55                {
 556                    if (_bufferManager != null && _buffer.Array != null)
 57                    {
 158                        _bufferManager.ReturnBuffer(_buffer.Array);
 59                    }
 60
 561                    _bufferManager = null;
 562                    _buffer = default;
 563                    _refCount = int.MinValue;
 64                }
 65            }
 1266        }
 67
 268        public Stream ToStream() => new ByteStreamBufferedMessageDataStream(this);
 69
 70        private void ThrowIfClosed()
 71        {
 6772            if (IsClosed)
 73            {
 074                throw Fx.Exception.ObjectDisposed(SR.Format(SR.ObjectDisposed, this));
 75            }
 6776        }
 77
 78        internal class ByteStreamBufferedMessageDataStream : MemoryStream
 79        {
 80            private readonly ByteStreamBufferedMessageData _byteStreamBufferedMessageData;
 81
 82            public ByteStreamBufferedMessageDataStream(ByteStreamBufferedMessageData byteStreamBufferedMessageData)
 283                : base(byteStreamBufferedMessageData.Buffer.Array, byteStreamBufferedMessageData.Buffer.Offset, byteStre
 84            {
 285                _byteStreamBufferedMessageData = byteStreamBufferedMessageData;
 286                _byteStreamBufferedMessageData.Open(); //increment the refCount
 287            }
 88
 89            public override void Close()
 90            {
 191                _byteStreamBufferedMessageData.Close();
 192                base.Close();
 193            }
 94        }
 95    }
 96}