From 4e51709ab0a631f71be1743cc2f6e43c7e6d50da Mon Sep 17 00:00:00 2001 From: Offir Shvartz Date: Tue, 10 Aug 2021 09:30:01 +0300 Subject: [PATCH] add white list --- .../NonAsciiValidations.Tests.csproj | 1 + .../NonAsciiValidationsTests.cs | 44 ++++++++++++++++--- .../SkipValidationsTemplates.json | 9 ++++ .../TemplatesToSkipValidationReader.cs | 31 +++++++++++++ 4 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 .script/tests/NonAsciiValidationsTests/SkipValidationsTemplates.json create mode 100644 .script/tests/NonAsciiValidationsTests/TemplatesToSkipValidationReader.cs diff --git a/.script/tests/NonAsciiValidationsTests/NonAsciiValidations.Tests.csproj b/.script/tests/NonAsciiValidationsTests/NonAsciiValidations.Tests.csproj index ae152f7167..6c268cdc80 100644 --- a/.script/tests/NonAsciiValidationsTests/NonAsciiValidations.Tests.csproj +++ b/.script/tests/NonAsciiValidationsTests/NonAsciiValidations.Tests.csproj @@ -7,6 +7,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/.script/tests/NonAsciiValidationsTests/NonAsciiValidationsTests.cs b/.script/tests/NonAsciiValidationsTests/NonAsciiValidationsTests.cs index 67fe8f5be2..95e46a20d3 100644 --- a/.script/tests/NonAsciiValidationsTests/NonAsciiValidationsTests.cs +++ b/.script/tests/NonAsciiValidationsTests/NonAsciiValidationsTests.cs @@ -5,6 +5,7 @@ using System.Text; using System.Text.RegularExpressions; using Xunit; using Xunit.Abstractions; +using YamlDotNet.Serialization; namespace NonAsciiValidations.Tests { @@ -41,13 +42,46 @@ namespace NonAsciiValidations.Tests ValidateOnlyAscii(yamlFullPath, detectionsYamlFileName); } - private void ValidateOnlyAscii(string yamlFilePath, string yamlFileName) + private bool ShouldSkipTemplateValidation(string templateId) { - var yaml = File.ReadAllText(yamlFilePath); - var nonAsciiCharMatch = Regex.Match(yaml, @"[^\u0000-\u007F]+"); - Assert.False(nonAsciiCharMatch.Success, $"${yamlFileName} includes the non ascii char:{nonAsciiCharMatch.Value} string index:{nonAsciiCharMatch.Index}"); + return TemplatesToSkipValidationReader.WhiteListTemplates + .Where(template => template.id == templateId) + .Where(template => !string.IsNullOrWhiteSpace(template.validationFailReason)) + .Where(template => !string.IsNullOrWhiteSpace(template.templateName)) + .Any(); } - } + + private void ValidateOnlyAscii(string yamlFilePath, string yamlFileName) + { + var yaml = File.ReadAllText(yamlFilePath); + var extracted = TryExtractTemplateId(yaml,out string id); + + //we ignore specific templates + if (extracted && ShouldSkipTemplateValidation(id)) + { + return; + } + + var nonAsciiCharMatch = Regex.Match(yaml, @"[^\u0000-\u007F]+"); + Assert.False(nonAsciiCharMatch.Success, $"${yamlFileName} includes the non ascii char:{nonAsciiCharMatch.Value} string index:{nonAsciiCharMatch.Index}"); + } + + private static bool TryExtractTemplateId(string yaml,out string tempateId) + { + tempateId = null; + try + { + var deserializer = new DeserializerBuilder().Build(); + var res = deserializer.Deserialize(yaml); + tempateId = res["id"]; + } + catch + { + return false; + } + return true; + } + } } diff --git a/.script/tests/NonAsciiValidationsTests/SkipValidationsTemplates.json b/.script/tests/NonAsciiValidationsTests/SkipValidationsTemplates.json new file mode 100644 index 0000000000..c70a019e45 --- /dev/null +++ b/.script/tests/NonAsciiValidationsTests/SkipValidationsTemplates.json @@ -0,0 +1,9 @@ +[ + { + "id": "a953f304-12e4-48ae-bedc-d58fb1b0c6a6", + "templateName": "Unicode Obfuscation in Command Line", + "validationFailReason": "include unicode by design" + } +] + + diff --git a/.script/tests/NonAsciiValidationsTests/TemplatesToSkipValidationReader.cs b/.script/tests/NonAsciiValidationsTests/TemplatesToSkipValidationReader.cs new file mode 100644 index 0000000000..a818595f77 --- /dev/null +++ b/.script/tests/NonAsciiValidationsTests/TemplatesToSkipValidationReader.cs @@ -0,0 +1,31 @@ +using Newtonsoft.Json; +using System.Collections.Generic; +using System.IO; + +namespace NonAsciiValidations.Tests +{ + public class SkipTemplate + { + public string id; + public string templateName; + public string validationFailReason; + + } + + public static class TemplatesToSkipValidationReader + { + private const string SKipJsonFileName = "SkipValidationsTemplates.json"; + + static TemplatesToSkipValidationReader() + { + var jsonFilePath = Path.Combine(FilesTestData.GetSkipTemplatesPath(), SKipJsonFileName); + using (StreamReader r = new StreamReader(jsonFilePath)) + { + string json = r.ReadToEnd(); + WhiteListTemplates = JsonConvert.DeserializeObject>(json); + } + } + + public static IEnumerable WhiteListTemplates { get; private set; } + } +}