private void ExceptionTestHelper( ExceptionCondition exceptionCondition, RuntimeConditions runtimeConditions, ExitReason expectedExitReason = ExitReason.None, TestAnalyzeOptions analyzeOptions = null) { ExceptionRaisingRule.s_exceptionCondition = exceptionCondition; analyzeOptions = analyzeOptions ?? new TestAnalyzeOptions() { TargetFileSpecifiers = new string[0] }; var command = new TestAnalyzeCommand(); Assembly[] plugInAssemblies = null; if (analyzeOptions.DefaultPlugInFilePaths != null) { var assemblies = new List <Assembly>(); foreach (string plugInFilePath in analyzeOptions.DefaultPlugInFilePaths) { assemblies.Add(Assembly.LoadFrom(plugInFilePath)); } plugInAssemblies = new Assembly[assemblies.Count]; assemblies.CopyTo(plugInAssemblies, 0); } else { plugInAssemblies = new Assembly[] { typeof(ExceptionRaisingRule).Assembly }; } command.DefaultPlugInAssemblies = plugInAssemblies; int result = command.Run(analyzeOptions); int expectedResult = (runtimeConditions & RuntimeConditions.Fatal) == RuntimeConditions.NoErrors ? TestAnalyzeCommand.SUCCESS : TestAnalyzeCommand.FAILURE; Assert.Equal(runtimeConditions, command.RuntimeErrors); Assert.Equal(expectedResult, result); if (expectedExitReason != ExitReason.None) { Assert.NotNull(command.ExecutionException); if (expectedExitReason != ExitReason.UnhandledExceptionInEngine) { var eax = command.ExecutionException as ExitApplicationException <ExitReason>; Assert.NotNull(eax); } } else { Assert.Null(command.ExecutionException); } ExceptionRaisingRule.s_exceptionCondition = ExceptionCondition.None; }
public RunLog AnalyzeFile(string fileName) { string path = Path.GetTempFileName(); RunLog runLog = null; try { var options = new TestAnalyzeOptions { TargetFileSpecifiers = new string[] { fileName }, Verbose = true, Statistics = true, ComputeTargetsHash = true, PolicyFilePath = "default", Recurse = true, OutputFilePath = path, }; var command = new TestAnalyzeCommand(); command.DefaultPlugInAssemblies = new Assembly[] { this.GetType().Assembly }; int result = command.Run(options); Assert.Equal(TestAnalyzeCommand.SUCCESS, result); JsonSerializerSettings settings = new JsonSerializerSettings() { ContractResolver = SarifContractResolver.Instance }; ResultLog log = JsonConvert.DeserializeObject <ResultLog>(File.ReadAllText(path), settings); Assert.NotNull(log); Assert.Equal <int>(1, log.RunLogs.Count); runLog = log.RunLogs[0]; } finally { File.Delete(path); } return(runLog); }
private void ExceptionTestHelper( ExceptionCondition exceptionCondition, RuntimeConditions runtimeConditions, ExitReason expectedExitReason = ExitReason.None, TestAnalyzeOptions analyzeOptions = null) { ExceptionRaisingRule.s_exceptionCondition = exceptionCondition; analyzeOptions = analyzeOptions ?? new TestAnalyzeOptions() { TargetFileSpecifiers = new string[0] }; var command = new TestAnalyzeCommand(); command.DefaultPlugInAssemblies = new Assembly[] { typeof(ExceptionRaisingRule).Assembly }; int result = command.Run(analyzeOptions); int expectedResult = (runtimeConditions & RuntimeConditions.Fatal) == RuntimeConditions.NoErrors ? TestAnalyzeCommand.SUCCESS : TestAnalyzeCommand.FAILURE; Assert.Equal(runtimeConditions, command.RuntimeErrors); Assert.Equal(expectedResult, result); if (expectedExitReason != ExitReason.None) { Assert.NotNull(command.ExecutionException); if (expectedExitReason != ExitReason.UnhandledExceptionInEngine) { var eax = command.ExecutionException as ExitApplicationException <ExitReason>; Assert.NotNull(eax); } } else { Assert.Null(command.ExecutionException); } ExceptionRaisingRule.s_exceptionCondition = ExceptionCondition.None; }