private bool VerifyContentWrittenToFile(Pip pip, PipGraph graph) { var success = true; var serializedPip = DumpPipLiteAnalysisUtilities.CreateObjectForSerialization(pip, dynamicData: null, Context.PathTable, Context.StringTable, Context.SymbolTable, graph); var pipWrittenToFile = File.ReadAllBytes(GetDumpFilePath(pip)); var serializerOptions = new JsonSerializerOptions { WriteIndented = true, #if (NET_COREAPP_50 || NET_COREAPP_60) // .NET 5 and 6 have a different way of dealing with null values DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, #else IgnoreNullValues = true, #endif }; var dumpContents = JsonSerializer.SerializeToUtf8Bytes(serializedPip, serializerOptions); success &= pipWrittenToFile.SequenceEqual(dumpContents); // Verify some random data written to the file var dumpString = Encoding.UTF8.GetString(pipWrittenToFile); success &= dumpString.Contains(pip.PipId.Value.ToString(CultureInfo.InvariantCulture) + " (" + pip.PipId.Value.ToString("X16", CultureInfo.InvariantCulture) + ")"); success &= dumpString.Contains(pip.PipType.ToString()); return(success); }
/// <summary> /// Dumps the specified pip. /// </summary> /// <returns>0 if dump pip was successful, or 1 if dump pip was unsuccessful</returns> public override int Analyze() { var directoryCreateResult = DumpPipLiteAnalysisUtilities.CreateLoggingDirectory(m_logPath, LoggingContext); var dumpPipResult = false; if (directoryCreateResult) { dumpPipResult = DumpPipLiteAnalysisUtilities.DumpPip( m_pip, m_dynamicData, m_logPath, PathTable, StringTable, SymbolTable, m_pipGraph, LoggingContext ); } if (!(directoryCreateResult && dumpPipResult)) { return(1); // An error should be logged for this already } return(0); }
public void TestBadPath() { FileArtifact outputFile = CreateOutputFileArtifact(); WriteFile pip = CreateWriteFile(outputFile, string.Empty, new[] { "some content" }); PipGraphBuilder.AddWriteFile(pip); var graph = PipGraphBuilder.Build(); var success = DumpPipLiteAnalysisUtilities.DumpPip(pip, @"X:\not\a\real\path\", Context.PathTable, Context.StringTable, Context.SymbolTable, graph, LoggingContext); Assert.False(success); AssertWarningEventLogged(LogEventId.DumpPipLiteUnableToSerializePipDueToBadPath); }
/// <summary> /// If the user specifies a single pip with the /pip option, this function will dump that pip. /// </summary> /// <returns>0 if dump pip was successful, or 1 if dump pip was unsuccessful</returns> public override int Analyze() { if (!m_dumpAllFailedPips) { bool directoryCreateResult = DumpPipLiteAnalysisUtilities.CreateLoggingDirectory(m_logPath, LoggingContext); bool dumpPipResult = false; if (directoryCreateResult) { dumpPipResult = DumpPipLiteAnalysisUtilities.DumpPip(m_pip, m_logPath, PathTable, StringTable, SymbolTable, m_pipGraph, LoggingContext); } if (!(directoryCreateResult && dumpPipResult)) { // An error should be logged for this already return(1); } } return(0); }
/// <summary> /// Dumps all failing pips is the /dumpAllFailedPips flag is set. /// </summary> /// <param name="data"></param> public override void PipExecutionPerformance(PipExecutionPerformanceEventData data) { if (m_dumpAllFailedPips && data.ExecutionPerformance.ExecutionLevel == PipExecutionLevel.Failed) { if (!m_isLogDirectoryCreated) { m_isLogDirectoryCreated = DumpPipLiteAnalysisUtilities.CreateLoggingDirectory(m_logPath, LoggingContext); } if (m_isLogDirectoryCreated) { var pip = m_pipTable.HydratePip(data.PipId, PipQueryContext.DumpPipLiteAnalyzer); // A log entry should have been generated already if this fails DumpPipLiteAnalysisUtilities.DumpPip(pip, m_logPath, PathTable, StringTable, SymbolTable, m_pipGraph); } } }
private bool VerifyContentWrittenToFile(Pip pip, PipGraph graph) { var success = true; var serializedPip = DumpPipLiteAnalysisUtilities.CreateObjectForSerialization(pip, Context.PathTable, Context.StringTable, Context.SymbolTable, graph); var pipWrittenToFile = File.ReadAllBytes(GetDumpFilePath(pip)); var serializerOptions = new JsonSerializerOptions { WriteIndented = true, IgnoreNullValues = true }; var dumpContents = JsonSerializer.SerializeToUtf8Bytes(serializedPip, serializerOptions); success &= pipWrittenToFile.SequenceEqual(dumpContents); // Verify some random data written to the file var dumpString = Encoding.UTF8.GetString(pipWrittenToFile); success &= dumpString.Contains(pip.PipId.Value.ToString(CultureInfo.InvariantCulture) + " (" + pip.PipId.Value.ToString("X16", CultureInfo.InvariantCulture) + ")"); success &= dumpString.Contains(pip.PipType.ToString()); return(success); }
private bool CreateLogPathAndRun(Pip pip, PipGraph graph) { DumpPipLiteAnalysisUtilities.CreateLoggingDirectory(m_logPath, LoggingContext); return(DumpPipLiteAnalysisUtilities.DumpPip(pip, m_logPath, Context.PathTable, Context.StringTable, Context.SymbolTable, graph, LoggingContext)); }