/// <summary> /// Runs the test specified in the configuration. /// </summary> private static ExitCode RunTest(Configuration configuration) { try { Console.WriteLine($". Testing {configuration.AssemblyToBeAnalyzed}."); using TestingEngine engine = TestingEngine.Create(configuration); engine.Run(); string directory = OutputFileManager.CreateOutputDirectory(configuration); string fileName = OutputFileManager.GetResolvedFileName(configuration.AssemblyToBeAnalyzed, directory); // Emit the test reports. Console.WriteLine($"... Emitting trace-related reports:"); if (engine.TryEmitReports(directory, fileName, out IEnumerable <string> reportPaths)) { foreach (var path in reportPaths) { Console.WriteLine($"..... Writing {path}."); } } else { Console.WriteLine($"..... No test reports available."); } // Emit the coverage reports. Console.WriteLine($"... Emitting coverage reports:"); if (engine.TryEmitCoverageReports(directory, fileName, out reportPaths)) { foreach (var path in reportPaths) { Console.WriteLine($"..... Writing {path}."); } } else { Console.WriteLine($"..... No coverage reports available."); } Console.WriteLine(engine.TestReport.GetText(configuration, "...")); Console.WriteLine($"... Elapsed {engine.Profiler.Results()} sec."); return(GetExitCodeFromTestReport(engine.TestReport)); } catch (Exception ex) { IO.Debug.WriteLine(ex.Message); IO.Debug.WriteLine(ex.StackTrace); return(ExitCode.Error); } }
public static Dictionary<string, string> ProcessOutputs(PackageEngineState engineState, string ftpRoot, out IEnumerable<TaskFileDescription> outFiles, out TimeSpan outputFilesTime) { var forbiddenFileNamesRx = (new string[] { @"\.\./", @"torque", @"\.dataList\.src$", @"\.hosts$", @"\.sh$", @"\.exe$" }).Select(st => new Regex(st, RegexOptions.IgnoreCase)); string ftpRootWithoutSlash = ftpRoot.TrimEnd(new[] { '/', '\\' }); var allFilePaths = IOProxy.Ftp.GetFileNamesInAllTree(ftpRootWithoutSlash); var filteredFilePathsWithRoot = allFilePaths.Where(st => !forbiddenFileNamesRx.Any(rx => rx.IsMatch(st))); var filteredFilePaths = filteredFilePathsWithRoot.Select(st => st.Substring(ftpRoot.Length)); var fileManager = new OutputFileManager(ftpRoot, engineState.StoragePathBase); var engine = new PackageEngine(engineState.CompiledDef, engineState.EngineContext); var actionStarted = DateTime.Now; { TimeSpan timeLimit = PB_PROCESS_TIME_LIMIT; try { Tools.ProcessWithTimeLimit(timeLimit, () => { //engine.ProcessOutputs(outputFileNames, fileManager); engine.ProcessOutputs(filteredFilePaths, fileManager); }); } catch (TimeLimitException tle) { throw new PackageBaseException("Outputs processing in Package base exceeded time limit (" + timeLimit.TotalSeconds + " seconds).", tle); } finally { outFiles = fileManager.GetOutputFiles(); // includes Cleanup(); } } var actionFinished = DateTime.Now; outputFilesTime = actionFinished - actionStarted; // todo : fix ugliness var processedOuts = engine.GetEnabledOutsValues(); var outFilesAndGroups = engine.GetEnabledOutDefs().Where(def => def is IOutFileDef || def is OutFileGroupDefBase); foreach (var def in outFilesAndGroups) { var memoryEntry = processedOuts.First(me => me.VarName == def.Name); if (memoryEntry.IsSet) // file was there { if (def is IOutFileDef) { var extFileDef = memoryEntry.Value as ExternalFileDef; extFileDef.Locator = outFiles.FirstOrDefault(fd => fd.SlotName == def.Name).StorageId; if (extFileDef.Locator == null) // todo : null.StorageId will fail earlier { Log.Warn("No output file processed for param " + memoryEntry.VarName + ", and memoryEntry.IsSet == true"); } } else if (def is OutFileGroupDefBase) { var group = def as OutFileGroupDefBase; var extFileDefs = memoryEntry.Value as IEnumerable<ExternalFileDef>; foreach (var extFileDef in extFileDefs) { extFileDef.Locator = outFiles.FirstOrDefault(file => file.SlotName == def.Name && file.FileName == extFileDef.FileName ).StorageId; if (extFileDef.Locator == null) // todo : null.StorageId will fail earlier { Log.Warn(String.Format( "File '{0}' wasn't processed for param {1}, and memoryEntry.IsSet == true", extFileDef.FileName, memoryEntry.VarName )); } } } } } //var outputParams = engine.Stringify(processedOuts, engine.CompiledMode.Outs.Values); var outputParams = PackageBase.Serializer.PackageBaseSerializer.Serialize(processedOuts, engine.CompiledMode.Outs.Values); Log.Debug(String.Format("Task's {0} output params are: {1}", engineState._taskDescription.TaskId, String.Join(", ", outputParams.Select(pair => pair.Key + " = " + pair.Value)) )); return outputParams; }
public static Dictionary <string, string> ProcessOutputs(PackageEngineState engineState, string ftpRoot, out IEnumerable <TaskFileDescription> outFiles, out TimeSpan outputFilesTime) { var forbiddenFileNamesRx = (new string[] { @"\.\./", @"torque", @"\.dataList\.src$", @"\.hosts$", @"\.sh$", @"\.exe$" }).Select(st => new Regex(st, RegexOptions.IgnoreCase)); string ftpRootWithoutSlash = ftpRoot.TrimEnd(new[] { '/', '\\' }); var allFilePaths = IOProxy.Ftp.GetFileNamesInAllTree(ftpRootWithoutSlash); var filteredFilePathsWithRoot = allFilePaths.Where(st => !forbiddenFileNamesRx.Any(rx => rx.IsMatch(st))); var filteredFilePaths = filteredFilePathsWithRoot.Select(st => st.Substring(ftpRoot.Length)); var fileManager = new OutputFileManager(ftpRoot, engineState.StoragePathBase); var engine = new PackageEngine(engineState.CompiledDef, engineState.EngineContext); var actionStarted = DateTime.Now; { TimeSpan timeLimit = PB_PROCESS_TIME_LIMIT; try { Tools.ProcessWithTimeLimit(timeLimit, () => { //engine.ProcessOutputs(outputFileNames, fileManager); engine.ProcessOutputs(filteredFilePaths, fileManager); }); } catch (TimeLimitException tle) { throw new PackageBaseException("Outputs processing in Package base exceeded time limit (" + timeLimit.TotalSeconds + " seconds).", tle); } finally { outFiles = fileManager.GetOutputFiles(); // includes Cleanup(); } } var actionFinished = DateTime.Now; outputFilesTime = actionFinished - actionStarted; // todo : fix ugliness var processedOuts = engine.GetEnabledOutsValues(); var outFilesAndGroups = engine.GetEnabledOutDefs().Where(def => def is IOutFileDef || def is OutFileGroupDefBase); foreach (var def in outFilesAndGroups) { var memoryEntry = processedOuts.First(me => me.VarName == def.Name); if (memoryEntry.IsSet) // file was there { if (def is IOutFileDef) { var extFileDef = memoryEntry.Value as ExternalFileDef; extFileDef.Locator = outFiles.FirstOrDefault(fd => fd.SlotName == def.Name).StorageId; if (extFileDef.Locator == null) // todo : null.StorageId will fail earlier { Log.Warn("No output file processed for param " + memoryEntry.VarName + ", and memoryEntry.IsSet == true"); } } else if (def is OutFileGroupDefBase) { var group = def as OutFileGroupDefBase; var extFileDefs = memoryEntry.Value as IEnumerable <ExternalFileDef>; foreach (var extFileDef in extFileDefs) { extFileDef.Locator = outFiles.FirstOrDefault(file => file.SlotName == def.Name && file.FileName == extFileDef.FileName ).StorageId; if (extFileDef.Locator == null) // todo : null.StorageId will fail earlier { Log.Warn(String.Format( "File '{0}' wasn't processed for param {1}, and memoryEntry.IsSet == true", extFileDef.FileName, memoryEntry.VarName )); } } } } } //var outputParams = engine.Stringify(processedOuts, engine.CompiledMode.Outs.Values); var outputParams = PackageBase.Serializer.PackageBaseSerializer.Serialize(processedOuts, engine.CompiledMode.Outs.Values); Log.Debug(String.Format("Task's {0} output params are: {1}", engineState._taskDescription.TaskId, String.Join(", ", outputParams.Select(pair => pair.Key + " = " + pair.Value)) )); return(outputParams); }