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); }
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); } }
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); } }