< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.TextEncoderDefaults
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/TransportDefaults.cs
Line coverage
89%
Covered lines: 42
Uncovered lines: 5
Coverable lines: 47
Total lines: 175
Line coverage: 89.3%
Branch coverage
85%
Covered branches: 17
Total branches: 20
Branch coverage: 85%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.cctor()100%11100%
ValidateEncoding(...)75%4471.42%
EncodingToCharSet(...)83.33%6687.5%
TryGetEncoding(...)90%101084.61%
.ctor(...)100%11100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Channels/TransportDefaults.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.Net.Security;
 6using System.Security.Authentication;
 7using System.Text;
 8using System.Xml;
 9using CoreWCF.Security;
 10
 11namespace CoreWCF.Channels
 12{
 13    internal static class EncoderDefaults
 14    {
 15        internal const int MaxReadPoolSize = 64;
 16        internal const int MaxWritePoolSize = 16;
 17
 18        internal const int BufferedReadDefaultMaxDepth = 128;
 19        internal const int BufferedReadDefaultMaxStringContentLength = int.MaxValue;
 20        internal const int BufferedReadDefaultMaxArrayLength = int.MaxValue;
 21        internal const int BufferedReadDefaultMaxBytesPerRead = int.MaxValue;
 22        internal const int BufferedReadDefaultMaxNameTableCharCount = int.MaxValue;
 23
 24        internal const CompressionFormat DefaultCompressionFormat = CompressionFormat.None;
 25
 26        internal static readonly XmlDictionaryReaderQuotas ReaderQuotas = new XmlDictionaryReaderQuotas();
 27
 28        internal static bool IsDefaultReaderQuotas(XmlDictionaryReaderQuotas quotas)
 29        {
 30            return quotas.ModifiedQuotas == 0x00;
 31        }
 32    }
 33
 34    internal static class TextEncoderDefaults
 35    {
 836        internal static readonly Encoding Encoding = Encoding.GetEncoding(EncodingString, new EncoderExceptionFallback()
 837            new DecoderExceptionFallback());
 38
 39        internal const string EncodingString = "utf-8";
 40
 841        internal static readonly Encoding[] SupportedEncodings =
 842        {
 843            Encoding.UTF8, Encoding.Unicode,
 844            Encoding.BigEndianUnicode
 845        };
 46
 847        internal static readonly CharSetEncoding[] CharSetEncodings =
 848        {
 849            new CharSetEncoding("utf-8", Encoding.UTF8),
 850            new CharSetEncoding("utf-16LE", Encoding.Unicode),
 851            new CharSetEncoding("utf-16BE", Encoding.BigEndianUnicode),
 852            new CharSetEncoding("utf-16", null), // Ignore.  Ambiguous charSet, so autodetect.
 853            new CharSetEncoding(null, null), // CharSet omitted, so autodetect.
 854        };
 55
 56
 57        internal static void ValidateEncoding(Encoding encoding)
 58        {
 626259            string charSet = encoding.WebName;
 626260            Encoding[] supportedEncodings = SupportedEncodings;
 1253261            for (int i = 0; i < supportedEncodings.Length; i++)
 62            {
 626663                if (charSet == supportedEncodings[i].WebName)
 64                {
 626265                    return;
 66                }
 67            }
 68
 069            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
 070                new ArgumentException(SR.Format(SR.MessageTextEncodingNotSupported, charSet), nameof(encoding)));
 71        }
 72
 73        internal static string EncodingToCharSet(Encoding encoding)
 74        {
 83375            string webName = encoding.WebName;
 83376            CharSetEncoding[] charSetEncodings = CharSetEncodings;
 179277            for (int i = 0; i < charSetEncodings.Length; i++)
 78            {
 89679                Encoding enc = charSetEncodings[i].Encoding;
 89680                if (enc == null)
 81                {
 82                    continue;
 83                }
 84
 89685                if (enc.WebName == webName)
 86                {
 83387                    return charSetEncodings[i].CharSet;
 88                }
 89            }
 090            return null;
 91        }
 92
 93        internal static bool TryGetEncoding(string charSet, out Encoding encoding)
 94        {
 695            CharSetEncoding[] charSetEncodings = CharSetEncodings;
 96
 97            // Quick check for exact equality
 3098            for (int i = 0; i < charSetEncodings.Length; i++)
 99            {
 14100                if (charSetEncodings[i].CharSet == charSet)
 101                {
 5102                    encoding = charSetEncodings[i].Encoding;
 5103                    return true;
 104                }
 105            }
 106
 107            // Check for case insensitive match
 12108            for (int i = 0; i < charSetEncodings.Length; i++)
 109            {
 5110                string compare = charSetEncodings[i].CharSet;
 5111                if (compare == null)
 112                {
 113                    continue;
 114                }
 115
 4116                if (compare.Equals(charSet, StringComparison.OrdinalIgnoreCase))
 117                {
 0118                    encoding = charSetEncodings[i].Encoding;
 0119                    return true;
 120                }
 121            }
 122
 1123            encoding = null;
 1124            return false;
 125        }
 126
 127        internal class CharSetEncoding
 128        {
 129            internal string CharSet;
 130            internal Encoding Encoding;
 131
 40132            internal CharSetEncoding(string charSet, Encoding enc)
 133            {
 40134                CharSet = charSet;
 40135                Encoding = enc;
 40136            }
 137        }
 138    }
 139
 140    internal static class MtomEncoderDefaults
 141    {
 142        internal const int MaxBufferSize = 65536;
 143    }
 144
 145    internal static class BinaryEncoderDefaults
 146    {
 147        internal static EnvelopeVersion EnvelopeVersion { get { return EnvelopeVersion.Soap12; } }
 148        internal static BinaryVersion BinaryVersion { get { return BinaryVersion.Version1; } }
 149        internal const int MaxSessionSize = 2048;
 150    }
 151
 152    internal static class TransportDefaults
 153    {
 154        internal const bool ExtractGroupsForWindowsAccounts = SspiSecurityTokenProvider.DefaultExtractWindowsGroupClaims
 155        internal const bool ManualAddressing = false;
 156        internal const long MaxReceivedMessageSize = 65536;
 157        internal const int MaxBufferSize = (int)MaxReceivedMessageSize;
 158        internal const long MaxBufferPoolSize = 512 * 1024;
 159        internal const int MaxFaultSize = MaxBufferSize;
 160        internal const bool RequireClientCertificate = false;
 161        internal const int TcpUriDefaultPort = 808;
 162
 163        internal const SslProtocols SslProtocols = System.Security.Authentication.SslProtocols.None; // Let the OS decid
 164
 165        internal static MessageEncoderFactory GetDefaultMessageEncoderFactory()
 166        {
 167            return new BinaryMessageEncodingBindingElement().CreateMessageEncoderFactory();
 168        }
 169    }
 170
 171    internal static class ConnectionOrientedTransportDefaults
 172    {
 173        internal const int ConnectionBufferSize = 8192;
 174    }
 175}