< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.MessageEncoderCompressionHandler
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/MessageEncoderCompressionHandler.cs
Line coverage
100%
Covered lines: 37
Uncovered lines: 0
Coverable lines: 37
Total lines: 90
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
DecompressBuffer(...)100%44100%
CompressBuffer(...)100%22100%
GetDecompressStream(...)100%22100%
GetCompressStream(...)100%22100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/MessageEncoderCompressionHandler.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.IO.Compression;
 7
 8namespace CoreWCF.Channels
 9{
 10    internal static class MessageEncoderCompressionHandler
 11    {
 12        internal const string GZipContentEncoding = "gzip";
 13        internal const string DeflateContentEncoding = "deflate";
 14        private const int DecompressBlockSize = 1024;
 15
 16        internal static void DecompressBuffer(ref ArraySegment<byte> buffer, BufferManager bufferManager, CompressionFor
 17        {
 618            MemoryStream memoryStream = new MemoryStream(buffer.Array, buffer.Offset, buffer.Count);
 619            int maxDecompressedSize = (int)Math.Min(maxReceivedMessageSize, int.MaxValue);
 20
 621            using (BufferManagerOutputStream bufferedOutStream = new BufferManagerOutputStream(SRCommon.MaxReceivedMessa
 22            {
 623                bufferedOutStream.Write(buffer.Array, 0, buffer.Offset);
 24
 625                byte[] tempBuffer = bufferManager.TakeBuffer(DecompressBlockSize);
 26                try
 27                {
 628                    using (Stream ds = compressionFormat == CompressionFormat.GZip ?
 629                        (Stream)new GZipStream(memoryStream, CompressionMode.Decompress) :
 630                        (Stream)new DeflateStream(memoryStream, CompressionMode.Decompress))
 31                    {
 32                        while (true)
 33                        {
 4634                            int bytesRead = ds.Read(tempBuffer, 0, DecompressBlockSize);
 4635                            if (bytesRead > 0)
 36                            {
 4037                                bufferedOutStream.Write(tempBuffer, 0, bytesRead);
 38                            }
 39                            else
 40                            {
 41                                break;
 42                            }
 43                        }
 644                    }
 45                }
 46                finally
 47                {
 648                    bufferManager.ReturnBuffer(tempBuffer);
 649                }
 50
 651                byte[] decompressedBytes = bufferedOutStream.ToArray(out int length);
 652                bufferManager.ReturnBuffer(buffer.Array);
 653                buffer = new ArraySegment<byte>(decompressedBytes, buffer.Offset, length - buffer.Offset);
 654            }
 655        }
 56
 57        internal static void CompressBuffer(ref ArraySegment<byte> buffer, BufferManager bufferManager, CompressionForma
 58        {
 1059            using (BufferManagerOutputStream bufferedOutStream = new BufferManagerOutputStream(SRCommon.MaxSentMessageSi
 60            {
 1061                bufferedOutStream.Write(buffer.Array, 0, buffer.Offset);
 62
 1063                using (Stream ds = compressionFormat == CompressionFormat.GZip ?
 1064                    (Stream)new GZipStream(bufferedOutStream, CompressionMode.Compress, true) :
 1065                    (Stream)new DeflateStream(bufferedOutStream, CompressionMode.Compress, true))
 66                {
 1067                    ds.Write(buffer.Array, buffer.Offset, buffer.Count);
 1068                }
 69
 1070                byte[] compressedBytes = bufferedOutStream.ToArray(out int length);
 1071                bufferManager.ReturnBuffer(buffer.Array);
 1072                buffer = new ArraySegment<byte>(compressedBytes, buffer.Offset, length - buffer.Offset);
 1073            }
 1074        }
 75
 76        internal static Stream GetDecompressStream(Stream compressedStream, CompressionFormat compressionFormat)
 77        {
 1278            return compressionFormat == CompressionFormat.GZip ?
 1279                    (Stream)new GZipStream(compressedStream, CompressionMode.Decompress, false) :
 1280                    (Stream)new DeflateStream(compressedStream, CompressionMode.Decompress, false);
 81        }
 82
 83        internal static Stream GetCompressStream(Stream uncompressedStream, CompressionFormat compressionFormat)
 84        {
 885            return compressionFormat == CompressionFormat.GZip ?
 886                    (Stream)new GZipStream(uncompressedStream, CompressionMode.Compress, true) :
 887                    (Stream)new DeflateStream(uncompressedStream, CompressionMode.Compress, true);
 88        }
 89    }
 90}