From 6d98f0e31291fdcb4bd5eba312e3c56eefb68519 Mon Sep 17 00:00:00 2001 From: Robert May Date: Mon, 3 Aug 2020 16:16:36 -0600 Subject: [PATCH] Added a setting to enable enum validations to be disabled. --- QuickFIXn/DataDictionary/DataDictionary.cs | 6 +++++- QuickFIXn/SessionFactory.cs | 2 ++ QuickFIXn/SessionSettings.cs | 1 + UnitTests/DataDictionaryTests.cs | 6 ++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/QuickFIXn/DataDictionary/DataDictionary.cs b/QuickFIXn/DataDictionary/DataDictionary.cs index 2ffc8d7a4..47d694263 100644 --- a/QuickFIXn/DataDictionary/DataDictionary.cs +++ b/QuickFIXn/DataDictionary/DataDictionary.cs @@ -25,6 +25,8 @@ public class DataDictionary public bool CheckUserDefinedFields { get; set; } public bool AllowUnknownMessageFields { get; set; } + public bool CheckEnumValues { get; set; } + public DDMap Header = new DDMap(); public DDMap Trailer = new DDMap(); @@ -33,6 +35,7 @@ public DataDictionary() CheckFieldsHaveValues = true; CheckFieldsOutOfOrder = true; CheckUserDefinedFields = true; + CheckEnumValues = true; AllowUnknownMessageFields = false; } @@ -75,6 +78,7 @@ public DataDictionary(DataDictionary src) this.CheckFieldsHaveValues = src.CheckFieldsHaveValues; this.CheckFieldsOutOfOrder = src.CheckFieldsOutOfOrder; this.CheckUserDefinedFields = src.CheckUserDefinedFields; + this.CheckEnumValues = src.CheckEnumValues; this.Header = src.Header; this.Trailer = src.Trailer; } @@ -353,7 +357,7 @@ public void CheckValue(Fields.IField field) { if (FieldsByTag.TryGetValue(field.Tag, out var fld)) { - if (fld.HasEnums()) + if (fld.HasEnums() && this.CheckEnumValues) { if (fld.IsMultipleValueFieldWithEnums) { diff --git a/QuickFIXn/SessionFactory.cs b/QuickFIXn/SessionFactory.cs index d498f8096..914a00c00 100755 --- a/QuickFIXn/SessionFactory.cs +++ b/QuickFIXn/SessionFactory.cs @@ -182,6 +182,8 @@ protected DataDictionary.DataDictionary createDataDictionary(SessionID sessionID ddCopy.CheckUserDefinedFields = settings.GetBool(SessionSettings.VALIDATE_USER_DEFINED_FIELDS); if (settings.Has(SessionSettings.ALLOW_UNKNOWN_MSG_FIELDS)) ddCopy.AllowUnknownMessageFields = settings.GetBool(SessionSettings.ALLOW_UNKNOWN_MSG_FIELDS); + if (settings.Has(SessionSettings.VALIDATE_ENUM_VALUES)) + ddCopy.CheckEnumValues = settings.GetBool(SessionSettings.VALIDATE_ENUM_VALUES); return ddCopy; } diff --git a/QuickFIXn/SessionSettings.cs b/QuickFIXn/SessionSettings.cs index 7f87d8364..788cb2daa 100755 --- a/QuickFIXn/SessionSettings.cs +++ b/QuickFIXn/SessionSettings.cs @@ -42,6 +42,7 @@ public class SessionSettings public const string RESET_ON_LOGON = "ResetOnLogon"; public const string RESET_ON_LOGOUT = "ResetOnLogout"; public const string RESET_ON_DISCONNECT = "ResetOnDisconnect"; + public const string VALIDATE_ENUM_VALUES = "ValidateEnumValues"; public const string VALIDATE_FIELDS_OUT_OF_ORDER = "ValidateFieldsOutOfOrder"; public const string VALIDATE_FIELDS_HAVE_VALUES = "ValidateFieldsHaveValues"; public const string VALIDATE_USER_DEFINED_FIELDS = "ValidateUserDefinedFields"; diff --git a/UnitTests/DataDictionaryTests.cs b/UnitTests/DataDictionaryTests.cs index b346d32d6..8b49c5822 100644 --- a/UnitTests/DataDictionaryTests.cs +++ b/UnitTests/DataDictionaryTests.cs @@ -266,6 +266,11 @@ public void CheckValue() // multiple-value field, one value is invalid Assert.Throws(typeof(IncorrectTagValue), delegate { dd.CheckValue(new QuickFix.Fields.QuoteCondition("A @ D")); }); + + + dd.CheckEnumValues = false; + dd.CheckValue(new QuickFix.Fields.TickDirection('9')); + dd.CheckValue(new QuickFix.Fields.QuoteCondition("A @ D")); } [Test] @@ -298,6 +303,7 @@ public void CheckIsInGroupTest() } [Test] + [Category("Integration")] public void CheckGroupCountTest() { QuickFix.DataDictionary.DataDictionary dd = new QuickFix.DataDictionary.DataDictionary();