示例#1
0
        /// <summary>
        /// Performs checks on an individual termination event
        /// </summary>
        /// <param name="validationLevel">Validation level</param>
        /// <param name="terminateEventArgs">Termination event</param>
        internal static void Validate(ValidationLevel validationLevel, TerminateEventArgs terminateEventArgs)
        {
            if (validationLevel.HasFlag(ValidationLevel.ExitCodeWithBoundaries))
            {
                if (terminateEventArgs.ExitCode > TerminatorBuilder.MaxErrorExitCode)
                {
                    throw new ArgumentOutOfRangeException($"{nameof(terminateEventArgs.ExitCode)} cannot be greater than {nameof(TerminatorBuilder.MaxErrorExitCode)}: {TerminatorBuilder.MaxErrorExitCode}");
                }
                else if (terminateEventArgs.ExitCode < 0)
                {
                    throw new ArgumentOutOfRangeException($"{nameof(terminateEventArgs.ExitCode)} cannot be less than 0.");
                }
            }

            if (validationLevel.HasFlag(ValidationLevel.ExitCodeNotInReservedSpace))
            {
                if (Enum.IsDefined(typeof(UnixCode), terminateEventArgs.ExitCode))
                {
                    var linuxExitCode = (UnixCode)terminateEventArgs.ExitCode;

                    throw new ArgumentException($"Exit code {terminateEventArgs.ExitCode} is already defined by {nameof(UnixCode)}: {linuxExitCode}");
                }
            }
        }
示例#2
0
        /// <summary>
        /// Performs checks on the event store
        /// </summary>
        /// <param name="validationLevel">Validation level</param>
        /// <param name="registry">Event store</param>
        internal static void Validate(ValidationLevel validationLevel, Dictionary <Type, TerminateEventArgs> registry)
        {
            if (validationLevel.HasFlag(ValidationLevel.ExitCodeOnlyOnce))
            {
                var multipleUsage = (from r in registry
                                     group r by r.Value.ExitCode
                                     into m
                                     where m.Count() > 1
                                     select m);

                if (multipleUsage.Any())
                {
                    var code = multipleUsage.First();

                    throw new ArgumentException($"Code {code.Key} is used more than once.");
                }
            }
        }