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);
        }
Example #2
0
        /// <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);
        }
Example #4
0
        /// <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);
        }
Example #5
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));
 }