示例#1
0
        /// <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);
            }
        }
示例#2
0
        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;
        }
示例#3
0
        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);
        }