< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.FaultException
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/FaultException.cs
Line coverage
20%
Covered lines: 29
Uncovered lines: 113
Coverable lines: 142
Total lines: 453
Line coverage: 20.4%
Branch coverage
11%
Covered branches: 4
Total branches: 36
Branch coverage: 11.1%
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(...)100%110%
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)100%11100%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)100%110%
.ctor(...)0%220%
.ctor(...)0%220%
.ctor(...)100%110%
AddFaultCodeObjectData(...)100%110%
AddFaultReasonObjectData(...)100%110%
CreateCode(...)0%220%
CreateFault(...)100%110%
CreateFault(...)0%440%
CreateMessageFault()0%220%
CreateReason(...)50%22100%
GetObjectData(...)100%110%
GetReason(...)0%220%
GetSafeReasonText(...)0%220%
GetSafeReasonText(...)25%4437.5%
EnsureCode(...)50%22100%
EnsureReason(...)50%22100%
ReconstructFaultCode(...)100%110%
ReconstructFaultReason(...)100%110%
Construct(...)0%220%
GetObjectData(...)0%220%
GetDepth(...)0%220%
Construct(...)0%220%
GetObjectData(...)0%220%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/FaultException.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.ObjectModel;
 6using System.Runtime.Serialization;
 7using CoreWCF.Channels;
 8using CoreWCF.Dispatcher;
 9using CoreWCF.Runtime;
 10
 11namespace CoreWCF
 12{
 13    [Serializable]
 14    [KnownType(typeof(FaultCodeData))]
 15    [KnownType(typeof(FaultCodeData[]))]
 16    [KnownType(typeof(FaultReasonData))]
 17    [KnownType(typeof(FaultReasonData[]))]
 18    public class FaultException : CommunicationException
 19    {
 20        internal const string Namespace = "http://schemas.xmlsoap.org/Microsoft/WindowsCommunicationFoundation/2005/08/F
 21        private readonly string _action;
 22        private readonly FaultCode _code;
 23        private readonly FaultReason _reason;
 24        private readonly MessageFault _fault;
 25
 26        public FaultException()
 5827            : base(SR.SFxFaultReason)
 28        {
 5829            _code = DefaultCode;
 5830            _reason = DefaultReason;
 5831        }
 32
 33        public FaultException(string reason)
 034            : base(reason)
 35        {
 036            _code = DefaultCode;
 037            _reason = CreateReason(reason);
 038        }
 39
 40        public FaultException(FaultReason reason)
 641            : base(GetSafeReasonText(reason))
 42        {
 643            _code = DefaultCode;
 644            _reason = EnsureReason(reason);
 645        }
 46
 47        public FaultException(string reason, FaultCode code)
 248            : base(reason)
 49        {
 250            _code = EnsureCode(code);
 251            _reason = CreateReason(reason);
 252        }
 53
 54        public FaultException(FaultReason reason, FaultCode code)
 3955            : base(GetSafeReasonText(reason))
 56        {
 3957            _code = EnsureCode(code);
 3958            _reason = EnsureReason(reason);
 3959        }
 60
 61        public FaultException(string reason, FaultCode code, string action)
 062            : base(reason)
 63        {
 064            _code = EnsureCode(code);
 065            _reason = CreateReason(reason);
 066            _action = action;
 067        }
 68
 69        internal FaultException(string reason, FaultCode code, string action, Exception innerException)
 070            : base(reason, innerException)
 71        {
 072            _code = EnsureCode(code);
 073            _reason = CreateReason(reason);
 074            _action = action;
 075        }
 76
 77        public FaultException(FaultReason reason, FaultCode code, string action)
 078            : base(GetSafeReasonText(reason))
 79        {
 080            _code = EnsureCode(code);
 081            _reason = EnsureReason(reason);
 082            _action = action;
 083        }
 84
 85        internal FaultException(FaultReason reason, FaultCode code, string action, Exception innerException)
 086            : base(GetSafeReasonText(reason), innerException)
 87        {
 088            _code = EnsureCode(code);
 089            _reason = EnsureReason(reason);
 090            _action = action;
 091        }
 92
 93        public FaultException(MessageFault fault)
 094            : base(GetSafeReasonText(GetReason(fault)))
 95        {
 096            if (fault == null)
 97            {
 098                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(fault));
 99            }
 100
 0101            _code = EnsureCode(fault.Code);
 0102            _reason = EnsureReason(fault.Reason);
 0103            _fault = fault;
 0104        }
 105
 106        public FaultException(MessageFault fault, string action)
 0107            : base(GetSafeReasonText(GetReason(fault)))
 108        {
 0109            if (fault == null)
 110            {
 0111                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(fault));
 112            }
 113
 0114            _code = fault.Code;
 0115            _reason = fault.Reason;
 0116            _fault = fault;
 0117            _action = action;
 0118        }
 119
 120        protected FaultException(SerializationInfo info, StreamingContext context)
 0121            : base(info, context)
 122        {
 0123            _code = ReconstructFaultCode(info, "code");
 0124            _reason = ReconstructFaultReason(info, "reason");
 0125            _fault = (MessageFault)info.GetValue("messageFault", typeof(MessageFault));
 0126            _action = (string)info.GetString("action");
 0127        }
 128
 129        public string Action
 130        {
 103131            get { return _action; }
 132        }
 133
 134        public FaultCode Code
 135        {
 103136            get { return _code; }
 137        }
 138
 139        private static FaultReason DefaultReason
 140        {
 58141            get { return new FaultReason(SR.SFxFaultReason); }
 142        }
 143
 144        private static FaultCode DefaultCode
 145        {
 64146            get { return new FaultCode("Sender"); }
 147        }
 148
 149        public override string Message
 150        {
 2151            get { return GetSafeReasonText(Reason); }
 152        }
 153
 154        public FaultReason Reason
 155        {
 105156            get { return _reason; }
 157        }
 158
 159        internal MessageFault Fault
 160        {
 143161            get { return _fault; }
 162        }
 163
 164        internal void AddFaultCodeObjectData(SerializationInfo info, string key, FaultCode code)
 165        {
 0166            info.AddValue(key, FaultCodeData.GetObjectData(code));
 0167        }
 168
 169        internal void AddFaultReasonObjectData(SerializationInfo info, string key, FaultReason reason)
 170        {
 0171            info.AddValue(key, FaultReasonData.GetObjectData(reason));
 0172        }
 173
 174        private static FaultCode CreateCode(string code)
 175        {
 0176            return (code != null) ? new FaultCode(code) : DefaultCode;
 177        }
 178
 179        public static FaultException CreateFault(MessageFault messageFault, params Type[] faultDetailTypes)
 180        {
 0181            return CreateFault(messageFault, null, faultDetailTypes);
 182        }
 183
 184        public static FaultException CreateFault(MessageFault messageFault, string action, params Type[] faultDetailType
 185        {
 0186            if (messageFault == null)
 187            {
 0188                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(messageFault));
 189            }
 190
 0191            if (faultDetailTypes == null)
 192            {
 0193                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(faultDetailTypes));
 194            }
 0195            var faultFormatter = new DataContractSerializerFaultFormatter(faultDetailTypes);
 0196            return faultFormatter.Deserialize(messageFault, action);
 197        }
 198
 199        public virtual MessageFault CreateMessageFault()
 200        {
 0201            if (_fault != null)
 202            {
 0203                return _fault;
 204            }
 205            else
 206            {
 0207                return MessageFault.CreateFault(_code, _reason);
 208            }
 209        }
 210
 211        private static FaultReason CreateReason(string reason)
 212        {
 2213            return (reason != null) ? new FaultReason(reason) : DefaultReason;
 214        }
 215
 216        public override void GetObjectData(SerializationInfo info, StreamingContext context)
 217        {
 0218            base.GetObjectData(info, context);
 0219            AddFaultCodeObjectData(info, "code", _code);
 0220            AddFaultReasonObjectData(info, "reason", _reason);
 0221            info.AddValue("messageFault", _fault);
 0222            info.AddValue("action", _action);
 0223        }
 224
 225        private static FaultReason GetReason(MessageFault fault)
 226        {
 0227            if (fault == null)
 228            {
 0229                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(fault));
 230            }
 0231            return fault.Reason;
 232        }
 233
 234        internal static string GetSafeReasonText(MessageFault messageFault)
 235        {
 0236            if (messageFault == null)
 237            {
 0238                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(messageFault));
 239            }
 240
 0241            return GetSafeReasonText(messageFault.Reason);
 242        }
 243
 244        internal static string GetSafeReasonText(FaultReason reason)
 245        {
 47246            if (reason == null)
 247            {
 0248                return SR.SFxUnknownFaultNullReason0;
 249            }
 250
 251            try
 252            {
 47253                return reason.GetMatchingTranslation(System.Globalization.CultureInfo.CurrentCulture).Text;
 254            }
 0255            catch (ArgumentException)
 256            {
 0257                if (reason.Translations.Count == 0)
 258                {
 0259                    return SR.SFxUnknownFaultZeroReasons0;
 260                }
 261                else
 262                {
 0263                    return SR.Format(SR.SFxUnknownFaultNoMatchingTranslation1, reason.Translations[0].Text);
 264                }
 265            }
 47266        }
 267
 268        private static FaultCode EnsureCode(FaultCode code)
 269        {
 41270            return code ?? DefaultCode;
 271        }
 272
 273        private static FaultReason EnsureReason(FaultReason reason)
 274        {
 45275            return reason ?? DefaultReason;
 276        }
 277
 278        internal FaultCode ReconstructFaultCode(SerializationInfo info, string key)
 279        {
 0280            FaultCodeData[] data = (FaultCodeData[])info.GetValue(key, typeof(FaultCodeData[]));
 0281            return FaultCodeData.Construct(data);
 282        }
 283
 284        internal FaultReason ReconstructFaultReason(SerializationInfo info, string key)
 285        {
 0286            FaultReasonData[] data = (FaultReasonData[])info.GetValue(key, typeof(FaultReasonData[]));
 0287            return FaultReasonData.Construct(data);
 288        }
 289
 290        [Serializable]
 291        internal class FaultCodeData
 292        {
 293#pragma warning disable IDE1006 // Naming Styles - class is Serializable so can't change field names
 294            private string _name;
 295            private string _ns;
 296#pragma warning restore IDE1006 // Naming Styles
 297
 298            internal static FaultCode Construct(FaultCodeData[] nodes)
 299            {
 0300                FaultCode code = null;
 301
 0302                for (int i = nodes.Length - 1; i >= 0; i--)
 303                {
 0304                    code = new FaultCode(nodes[i]._name, nodes[i]._ns, code);
 305                }
 306
 0307                return code;
 308            }
 309
 310            internal static FaultCodeData[] GetObjectData(FaultCode code)
 311            {
 0312                FaultCodeData[] array = new FaultCodeData[GetDepth(code)];
 313
 0314                for (int i = 0; i < array.Length; i++)
 315                {
 0316                    array[i] = new FaultCodeData
 0317                    {
 0318                        _name = code.Name,
 0319                        _ns = code.Namespace
 0320                    };
 0321                    code = code.SubCode;
 322                }
 323
 0324                if (code != null)
 325                {
 326                    Fx.Assert("FaultException.FaultCodeData.GetObjectData: (code != null)");
 327                }
 0328                return array;
 329            }
 330
 331            private static int GetDepth(FaultCode code)
 332            {
 0333                int depth = 0;
 334
 0335                while (code != null)
 336                {
 0337                    depth++;
 0338                    code = code.SubCode;
 339                }
 340
 0341                return depth;
 342            }
 343        }
 344
 345        [Serializable]
 346        internal class FaultReasonData
 347        {
 348#pragma warning disable IDE1006 // Naming Styles - class is Serializable so can't change field names
 349            private string _xmlLang;
 350            private string _text;
 351#pragma warning restore IDE1006 // Naming Styles
 352
 353            internal static FaultReason Construct(FaultReasonData[] nodes)
 354            {
 0355                FaultReasonText[] reasons = new FaultReasonText[nodes.Length];
 356
 0357                for (int i = 0; i < nodes.Length; i++)
 358                {
 0359                    reasons[i] = new FaultReasonText(nodes[i]._text, nodes[i]._xmlLang);
 360                }
 361
 0362                return new FaultReason(reasons);
 363            }
 364
 365            internal static FaultReasonData[] GetObjectData(FaultReason reason)
 366            {
 0367                ReadOnlyCollection<FaultReasonText> translations = reason.Translations;
 0368                FaultReasonData[] array = new FaultReasonData[translations.Count];
 369
 0370                for (int i = 0; i < translations.Count; i++)
 371                {
 0372                    array[i] = new FaultReasonData
 0373                    {
 0374                        _xmlLang = translations[i].XmlLang,
 0375                        _text = translations[i].Text
 0376                    };
 377                }
 378
 0379                return array;
 380            }
 381        }
 382    }
 383
 384    [Serializable]
 385    public class FaultException<TDetail> : FaultException
 386    {
 387        public FaultException(TDetail detail)
 388            : base()
 389        {
 390            Detail = detail;
 391        }
 392
 393        public FaultException(TDetail detail, string reason)
 394            : base(reason)
 395        {
 396            Detail = detail;
 397        }
 398
 399        public FaultException(TDetail detail, FaultReason reason)
 400            : base(reason)
 401        {
 402            Detail = detail;
 403        }
 404
 405        public FaultException(TDetail detail, string reason, FaultCode code)
 406            : base(reason, code)
 407        {
 408            Detail = detail;
 409        }
 410
 411        public FaultException(TDetail detail, FaultReason reason, FaultCode code)
 412            : base(reason, code)
 413        {
 414            Detail = detail;
 415        }
 416
 417        public FaultException(TDetail detail, string reason, FaultCode code, string action)
 418            : base(reason, code, action)
 419        {
 420            Detail = detail;
 421        }
 422
 423        public FaultException(TDetail detail, FaultReason reason, FaultCode code, string action)
 424            : base(reason, code, action)
 425        {
 426            Detail = detail;
 427        }
 428
 429        protected FaultException(SerializationInfo info, StreamingContext context)
 430            : base(info, context)
 431        {
 432            Detail = (TDetail)info.GetValue("detail", typeof(TDetail));
 433        }
 434
 435        public TDetail Detail { get; }
 436
 437        public override MessageFault CreateMessageFault()
 438        {
 439            return MessageFault.CreateFault(Code, Reason, Detail);
 440        }
 441
 442        public override void GetObjectData(SerializationInfo info, StreamingContext context)
 443        {
 444            base.GetObjectData(info, context);
 445            info.AddValue("detail", Detail);
 446        }
 447
 448        public override string ToString()
 449        {
 450            return SR.Format(SR.SFxFaultExceptionToString3, GetType(), Message, Detail != null ? Detail.ToString() : str
 451        }
 452    }
 453}

Methods/Properties

.ctor()
.ctor(System.String)
.ctor(CoreWCF.FaultReason)
.ctor(System.String,CoreWCF.FaultCode)
.ctor(CoreWCF.FaultReason,CoreWCF.FaultCode)
.ctor(System.String,CoreWCF.FaultCode,System.String)
.ctor(System.String,CoreWCF.FaultCode,System.String,System.Exception)
.ctor(CoreWCF.FaultReason,CoreWCF.FaultCode,System.String)
.ctor(CoreWCF.FaultReason,CoreWCF.FaultCode,System.String,System.Exception)
.ctor(CoreWCF.Channels.MessageFault)
.ctor(CoreWCF.Channels.MessageFault,System.String)
.ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)
Action()
Code()
DefaultReason()
DefaultCode()
Message()
Reason()
Fault()
AddFaultCodeObjectData(System.Runtime.Serialization.SerializationInfo,System.String,CoreWCF.FaultCode)
AddFaultReasonObjectData(System.Runtime.Serialization.SerializationInfo,System.String,CoreWCF.FaultReason)
CreateCode(System.String)
CreateFault(CoreWCF.Channels.MessageFault,System.Type[])
CreateFault(CoreWCF.Channels.MessageFault,System.String,System.Type[])
CreateMessageFault()
CreateReason(System.String)
GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)
GetReason(CoreWCF.Channels.MessageFault)
GetSafeReasonText(CoreWCF.Channels.MessageFault)
GetSafeReasonText(CoreWCF.FaultReason)
EnsureCode(CoreWCF.FaultCode)
EnsureReason(CoreWCF.FaultReason)
ReconstructFaultCode(System.Runtime.Serialization.SerializationInfo,System.String)
ReconstructFaultReason(System.Runtime.Serialization.SerializationInfo,System.String)
Construct(CoreWCF.FaultException/FaultCodeData[])
GetObjectData(CoreWCF.FaultCode)
GetDepth(CoreWCF.FaultCode)
Construct(CoreWCF.FaultException/FaultReasonData[])
GetObjectData(CoreWCF.FaultReason)