private void Verify( IBinarySkimmer skimmer, IEnumerable<string> additionalTestFiles, bool useDefaultPolicy, bool expectToPass) { var targets = new List<string>(); string ruleName = skimmer.GetType().Name; string testFilesDirectory = ruleName; testFilesDirectory = Path.Combine(Environment.CurrentDirectory, "FunctionalTestsData", testFilesDirectory); testFilesDirectory = Path.Combine(testFilesDirectory, expectToPass ? "Pass" : "Fail"); Assert.True(Directory.Exists(testFilesDirectory)); foreach (string target in Directory.GetFiles(testFilesDirectory, "*", SearchOption.AllDirectories)) { if (AnalyzeCommand.ValidAnalysisFileExtensions.Contains(Path.GetExtension(target))) { targets.Add(target); } } if (additionalTestFiles != null) { foreach (string additionalTestFile in additionalTestFiles) { targets.Add(additionalTestFile); } } var context = new BinaryAnalyzerContext(); var logger = new TestMessageLogger(); context.Logger = logger; PropertyBag policy = null; if (useDefaultPolicy) { policy = new PropertyBag(); } context.Policy = policy; skimmer.Initialize(context); foreach (string target in targets) { PE pe = new PE(target); if (!pe.IsPEFile) { continue; } context = CreateContext(logger, policy, target); context.Rule = skimmer; string reasonForNotAnalyzing; if (skimmer.CanAnalyze(context, out reasonForNotAnalyzing) != AnalysisApplicability.ApplicableToSpecifiedTarget) { continue; } skimmer.Analyze(context); } HashSet<string> expected = expectToPass ? logger.PassTargets : logger.FailTargets; HashSet<string> other = expectToPass ? logger.FailTargets : logger.PassTargets; HashSet<string> configErrors = logger.ConfigurationErrorTargets; string expectedText = expectToPass ? "success" : "failure"; string actualText = expectToPass ? "failed" : "succeeded"; var sb = new StringBuilder(); foreach (string target in targets) { if (expected.Contains(target)) { expected.Remove(target); continue; } bool missingEntirely = !other.Contains(target); if (missingEntirely && !expectToPass && target.Contains("Pdb")) { // Missing pdbs provoke configuration errors; if (configErrors.Contains(target)) { missingEntirely = false; configErrors.Remove(target); continue; } } if (missingEntirely) { sb.AppendLine("Expected '" + ruleName + "' " + expectedText + " but saw no result at all for file: " + Path.GetFileName(target)); } else { other.Remove(target); sb.AppendLine("Expected '" + ruleName + "' " + expectedText + " but check " + actualText + " for: " + Path.GetFileName(target)); } } if (sb.Length > 0) { _testOutputHelper.WriteLine(sb.ToString()); } Assert.Equal(0, sb.Length); Assert.Equal(0, expected.Count); Assert.Equal(0, other.Count); }
public static bool IsWindowsCEPriorToV7(PE portableExecutable) { return portableExecutable.Subsystem == Subsystem.WindowsCEGui && portableExecutable.OSVersion < WindowsCE7; }
public void DisposePortableExecutableData() { if (_pdb != null) { _pdb.Dispose(); _pdb = null; } if (_pe != null) { _pe.Dispose(); _pe = null; } }