Пример #1
0
        public void ForwardedPipProcessErrorTest()
        {
            var eventName         = "PipProcessError";
            var text              = "Pip process error message";
            var pipSemiStableHash = (long)24;

            m_eventListener.RegisterEventSource(global::BuildXL.Engine.ETWLogger.Log);
            m_eventListener.NestedLoggerHandler += eventData =>
            {
                m_eventFields = new PipProcessErrorEventFields(eventData.Payload, true);
            };

            using (var testElements = PipProcessErrorTestElement.Create(this))
                using (AzureDevOpsListener listener = new AzureDevOpsListener(Events.Log, testElements.Console, DateTime.Now, testElements.ViewModel, false, null))
                {
                    listener.RegisterEventSource(global::BuildXL.Engine.ETWLogger.Log);
                    global::BuildXL.Engine.Tracing.Logger.Log.DistributionWorkerForwardedError(LoggingContext, new WorkerForwardedEvent()
                    {
                        EventId              = (int)LogEventId.PipProcessError,
                        EventName            = eventName,
                        EventKeywords        = 0,
                        Text                 = text,
                        PipProcessErrorEvent = testElements.PipProcessError,
                    });
                    testElements.Console.ValidateCall(MessageLevel.Info, testElements.ExpectingConsoleLog);
                    XAssert.IsTrue(testElements.ViewModel.BuildSummary.PipErrors.Any(e => e.SemiStablePipId == $"Pip{(pipSemiStableHash):X16}"));
                    XAssert.AreEqual(m_eventFields, testElements.PipProcessError, "You may edit the PipProcessError and/or WorkerForwardedEvent fields, and/or struct PipProcessErrorEventFields.");
                    AssertErrorEventLogged(SharedLogEventId.DistributionWorkerForwardedError);
                }
        }
Пример #2
0
        public void ValidateErrorCap()
        {
            m_eventListener.RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log);
            m_eventListener.NestedLoggerHandler += eventData =>
            {
                m_eventFields = new PipProcessErrorEventFields(eventData.Payload, false);
            };

            using (var testElements = PipProcessErrorTestElement.Create(this))
                using (AzureDevOpsListener listener = new AzureDevOpsListener(Events.Log, testElements.Console, DateTime.Now, testElements.ViewModel, false, null, maxIssuesToLog: 1))
                {
                    listener.RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log);

                    // First log should go through as normal
                    testElements.LogPipProcessError();
                    testElements.Console.ValidateCall(MessageLevel.Info, testElements.ExpectingConsoleLog);

                    // Second will log the message about being truncated
                    testElements.LogPipProcessError();
                    testElements.Console.ValidateCall(MessageLevel.Info, "truncated");

                    // Third should result in no more messages logged
                    testElements.LogPipProcessError();
                    testElements.Console.ValidateNoCall();
                }

            // The TestEventListener is watching all errors, not the AzureDevOpsListener processed ones. Make sure it's cool with seeing 3 errors
            AssertErrorEventLogged(LogEventId.PipProcessError, 3);
        }
Пример #3
0
            public static PipProcessErrorTestElement Create(BuildXLTestBase testBase)
            {
                var result          = new PipProcessErrorTestElement();
                var pipProcessError = new PipProcessErrorEventFields(
                    (long)24,
                    "my cool pip",
                    @"specs\mypip.dsc",
                    @"specs\workingDir",
                    "coolpip.exe",
                    "Failure message Line1\r\nFailure message Line2\rFailure message Line3\n",
                    "Find output file in following path:",
                    @"specs\workingDir\out.txt",
                    -1,
                    "what does this do?",
                    "my pip");

                var processedOutputToLog = "Failure message Line1%0D%0A##[error]Failure message Line2%0D##[error]Failure message Line3%0A##[error]";

                result.ExpectingConsoleLog = @$ "##vso[task.logIssue type=error;]DX0064 [Pip0000000000000018, {pipProcessError.ShortPipDescription}, {pipProcessError.PipSpecPath}] - failed with exit code {pipProcessError.ExitCode}, {pipProcessError.OptionalMessage}%0D%0A##[error]{processedOutputToLog}%0D%0A##[error]{pipProcessError.MessageAboutPathsToLog}%0D%0A##[error]{pipProcessError.PathsToLog}";
                result.PipProcessError     = pipProcessError;
                result.Console             = new MockConsole();
                result.ViewModel           = new BuildViewModel();
                var buildSummaryFilePath = Path.Combine(testBase.TestOutputDirectory, "test.md");

                result.ViewModel.BuildSummary = new BuildSummary(buildSummaryFilePath);
                result.m_loggingContext       = testBase.LoggingContext;

                return(result);
            }
Пример #4
0
        public void LogAzureDevOpsIssueTest()
        {
            m_eventListener.RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log);
            m_eventListener.NestedLoggerHandler += eventData =>
            {
                m_eventFields = new PipProcessErrorEventFields(eventData.Payload, false);
            };

            using (var testElements = PipProcessErrorTestElement.Create(this))
                using (AzureDevOpsListener listener = new AzureDevOpsListener(Events.Log, testElements.Console, DateTime.Now, testElements.ViewModel, false, null))
                {
                    listener.RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log);
                    testElements.LogPipProcessError();
                    testElements.Console.ValidateCall(MessageLevel.Info, testElements.ExpectingConsoleLog);
                    XAssert.AreEqual(m_eventFields, testElements.PipProcessError, "You may edit the PipProcessError event fields, update the test and/or struct PipProcessErrorEventFields.");
                    AssertErrorEventLogged(LogEventId.PipProcessError);
                }
        }