Пример #1
0
        /// <summary>
        /// Encapsulates logic for reporting results for non-interactive analysis.
        /// </summary>
        public override void Execute()
        {
            TestRecords tests   = TestRecords.Load(RunDirectory);
            RunInfo     runInfo = RunInfo.Load(RunDirectory);

            tests.GenerateXmlReport(tests, runInfo, ReportDirectory, TestBinariesDirectory);
        }
Пример #2
0
        /// <summary>
        /// Encapsulates logic for executing.
        /// </summary>
        public override void Execute()
        {
            DirectoryInfo distributedExecutionDirectory = TestRecords.GetDistributedDirectory(DistributionKey, RunDirectory);
            TestRecords   tests = TestRecords.Load(distributedExecutionDirectory);

            ExecutionSettings settings = new ExecutionSettings();

            settings.Tests = tests;
            settings.TestBinariesDirectory = TestBinariesDirectory;
            settings.DebugTests            = DebugTests;
            settings.DebugSti            = DebugSti;
            settings.WaitForDebugger     = WaitForDebugger;
            settings.LogFilesPath        = distributedExecutionDirectory;
            settings.JitDebuggerCommand  = JitDebuggerCommand;
            settings.TimeoutMultiplier   = TimeoutMultiplier;
            settings.ContinueExecution   = ContinueExecution;
            settings.CodeCoverageEnabled = CodeCoverage;
            settings.CodeCoverageImport  = CodeCoverageImport;
            settings.RerunFailures       = RerunFailures;
            settings.SkipDxDiag          = SkipDxDiag;
            CodeCoverageUtilities.ValidateForCodeCoverage(CodeCoverage, CodeCoverageImport);

            tests.Execute(settings);
            tests.Save(distributedExecutionDirectory);
            ExecutionBackupStore.ClearAllIntermediateTestResults(settings.LogFilesPath);
            tests.DisplayConsoleSummary();
        }
Пример #3
0
        /// <summary>
        /// Merges the results of distributed execution back together.
        /// </summary>
        /// <param name="distributionDirectory">Root distribution directory for the full set of tests.</param>
        /// /// <param name="useCodeCoverage">Specifies if distribution should account for code coverage data</param>
        /// <param name="codeCoverageConnection">Connection string for Code Coverage Database</param>
        public static void Merge(DirectoryInfo distributionDirectory, bool useCodeCoverage, string codeCoverageConnection)
        {
            DirectoryInfo[] subdirectories = distributionDirectory.GetDirectories();

            TestRecords mergedTestResults = new TestRecords();

            for (int i = 0; i < subdirectories.Length; i++)
            {
                TestRecords deserializedTestResults = TestRecords.Load(subdirectories[i]);
                // If for a testcollection it looks like nothing was run, this
                // suggests badness and we want to halt the merge. If we proceed
                // along with a merge, we end up deleted the TestCollection
                // subsets, making the run unsalvagable. By failing hard here,
                // the culprit set of tests can be rerun, and then merge
                // attempted again.
                if (!ValidateTestsWereExecuted(deserializedTestResults))
                {
                    throw new ApplicationException("TestCollection located in the " + subdirectories[i].FullName + " directory did not have any results. It is highly likely that execution on the associated machine failed. Aborting merge.");
                }

                foreach (TestRecord test in deserializedTestResults.TestCollection)
                {
                    mergedTestResults.TestCollection.Add(test);
                }

                foreach (ExecutionGroupRecord group in deserializedTestResults.ExecutionGroupRecords)
                {
                    mergedTestResults.ExecutionGroupRecords.Add(group);
                }
            }

            mergedTestResults.Save(distributionDirectory);

            if (useCodeCoverage)
            {
                CodeCoverageUtilities.MergeCodeCoverage(subdirectories, distributionDirectory);
                Console.WriteLine("Attempting to Upload Results.");
                CodeCoverageUtilities.UploadCodeCoverage(distributionDirectory, codeCoverageConnection);
                CodeCoverageUtilities.DeleteCodeCoverageMergeInputs(subdirectories);
            }

            // Once we have safely merged the test collections and saved the merged
            // TestCollection to disk, delete those distributed subsets.
            for (int i = 0; i < subdirectories.Length; i++)
            {
                TestRecords.Delete(subdirectories[i]);
            }
        }
Пример #4
0
        /// <summary>
        /// Encapsulates logic for running tests.
        /// </summary>
        public override void Execute()
        {
            if (!ContinueExecution)
            {
                // If the run directory already exists, we need to get rid of it for
                // now. In the future we may add a directory versioning scheme so
                // that the results of multiple runs can be retained.
                if (RunDirectory.Exists)
                {
                    RunDirectory.Delete(true);
                }
                RunDirectory.Create();
            }
            else
            {
                if (!RunDirectory.Exists)
                {
                    throw new InvalidOperationException("No run directory exists - the ContinueExecution mode is only intended for finishing an incomplete run.");
                }
            }

            //


            TestRecords.RegisterKey(Environment.MachineName, RunDirectory);

            FilteringSettings filteringSettings = FilteringSettings;
            TestRecords       tests             = TestRecords.Discover(DiscoveryInfoPath, filteringSettings);

            tests.Filter(filteringSettings, DiscoveryInfoPath.Directory);
            tests.Distribute(RunDirectory, null, DiscoveryInfoPath.Directory);

            DirectoryInfo distributedExecutionDirectory = TestRecords.GetDistributedDirectory(Environment.MachineName, RunDirectory);

            tests = TestRecords.Load(distributedExecutionDirectory);
            ExecutionSettings settings = new ExecutionSettings();

            settings.Tests = tests;
            settings.TestBinariesDirectory = DiscoveryInfoPath.Directory;
            settings.DebugTests            = DebugTests;
            settings.DebugSti                    = DebugSti;
            settings.WaitForDebugger             = WaitForDebugger;
            settings.LogFilesPath                = distributedExecutionDirectory;
            settings.FixedTestExecutionDirectory = FixedTestExecutionDirectory;
            settings.JitDebuggerCommand          = JitDebuggerCommand;
            settings.TimeoutMultiplier           = TimeoutMultiplier;
            settings.ContinueExecution           = ContinueExecution;
            settings.CodeCoverageEnabled         = CodeCoverage;
            settings.CodeCoverageImport          = CodeCoverageImport;
            settings.RerunFailures               = RerunFailures;
            settings.SkipDxDiag                  = SkipDxDiag;
            CodeCoverageUtilities.ValidateForCodeCoverage(CodeCoverage, CodeCoverageImport);
            tests.Execute(settings);
            tests.Save(distributedExecutionDirectory);
            ExecutionBackupStore.ClearAllIntermediateTestResults(settings.LogFilesPath);

            TestRecords.Merge(RunDirectory, CodeCoverage, CodeCoverageImport);

            // RunCommand's report policy will be to publish reports to a
            // Report subdirectory of the RunDirectory.
            tests = TestRecords.Load(RunDirectory);
            string  reportDirectoryPath = Path.Combine(RunDirectory.FullName, "Report");
            RunInfo runInfo             = RunInfo.FromOS();

            runInfo.Save(RunDirectory);
            Console.WriteLine("Saving Report to: {0}\\LabReport.xml", reportDirectoryPath);
            tests.GenerateXmlReport(tests, runInfo, new DirectoryInfo(reportDirectoryPath), DiscoveryInfoPath.Directory);
            tests.DisplayConsoleSummary();
        }