/// <summary>
        /// Initializes the data collector
        /// </summary>
        /// <param name="configurationElement">
        /// The XML element containing configuration information for the data collector. Currently,
        /// this data collector does not have any configuration, so we ignore this parameter.
        /// </param>
        /// <param name="events">
        /// Object containing the execution events the data collector registers for
        /// </param>
        /// <param name="dataSink">The sink used by the data collector to send its data</param>
        /// <param name="logger">
        /// Used by the data collector to send warnings, errors, or other messages
        /// </param>
        /// <param name="dataCollectionEnvironmentContext">Provides contextual information about the agent environment</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext dataCollectionEnvironmentContext)
        {
            ValidateArg.NotNull(events, nameof(events));
            ValidateArg.NotNull(dataSink, nameof(dataSink));
            ValidateArg.NotNull(logger, nameof(logger));

            this.events               = events;
            this.dataSink             = dataSink;
            this.logger               = logger;
            this.dataCollectorContext = dataCollectionEnvironmentContext.SessionDataCollectionContext;

            // Load the configuration
            CollectorNameValueConfigurationManager nameValueSettings =
                new CollectorNameValueConfigurationManager(configurationElement);

            // Apply the configuration
            this.ConfigureEventSources(nameValueSettings);
            this.ConfigureEntryTypes(nameValueSettings);
            this.ConfigureMaxEntries(nameValueSettings);
            this.ConfigureEventLogNames(nameValueSettings);

            // Register for events
            events.SessionStart  += this.sessionStartEventHandler;
            events.SessionEnd    += this.sessionEndEventHandler;
            events.TestCaseStart += this.testCaseStartEventHandler;
            events.TestCaseEnd   += this.testCaseEndEventHandler;
        }
Beispiel #2
0
        /// <summary>
        /// Initializes parameters for the new instance of the class <see cref="BlameDataCollector"/>
        /// </summary>
        /// <param name="configurationElement">The Xml Element to save to</param>
        /// <param name="events">Data collection events to which methods subscribe</param>
        /// <param name="dataSink">A data collection sink for data transfer</param>
        /// <param name="logger">Data Collection Logger to send messages to the client </param>
        /// <param name="environmentContext">Context of data collector environment</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            ValidateArg.NotNull(logger, nameof(logger));

            this.events               = events;
            this.dataCollectionSink   = dataSink;
            this.context              = environmentContext;
            this.configurationElement = configurationElement;
            this.testSequence         = new List <TestCase>();
            this.logger               = logger;

            // Subscribing to events
            this.events.TestHostLaunched += this.TestHostLaunched_Handler;
            this.events.SessionEnd       += this.SessionEnded_Handler;
            this.events.TestCaseStart    += this.EventsTestCaseStart;
            this.events.TestCaseEnd      += this.EventsTestCaseEnd;

            if (this.configurationElement != null)
            {
                this.processDumpEnabled = this.configurationElement[Constants.DumpModeKey] != null;
            }

            this.attachmentGuid = Guid.NewGuid().ToString().Replace("-", string.Empty);
        }
        public override void Initialize(
            System.Xml.XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            log = new Lazy <CloudwatchLogsSink>(() =>
                                                // have to wait as late as possible for DataCollector to bind the right assembly versions
                                                new ServiceCollection()
                                                .AddAlteredAws()
                                                .AddCloudwatchLogs()
                                                .BuildServiceProvider()
                                                .GetService <CloudwatchLogsSink>());

            log2 = logger;

            events.TestHostLaunched += TestHostLaunched_Handler;
            events.SessionStart     += SessionStarted_Handler;
            events.SessionEnd       += SessionEnded_Handler;
            events.TestCaseStart    += Events_TestCaseStart;
            events.TestCaseEnd      += Events_TestCaseEnd;

            dataSink.SendFileCompleted += DataSink_SendFileCompleted;
        }
        /// <summary>
        /// Initializes data collector
        /// </summary>
        /// <param name="configurationElement">Configuration element</param>
        /// <param name="events">Events to register on</param>
        /// <param name="dataSink">Data sink to send attachments to test platform</param>
        /// <param name="logger">Test platform logger</param>
        /// <param name="environmentContext">Environment context</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            AttachDebugger();

            if (_eqtTrace.IsInfoEnabled)
            {
                _eqtTrace.Info("Initializing {0} with configuration: '{1}'", CoverletConstants.DataCollectorName, configurationElement?.OuterXml);
            }

            // Store input variables
            _events = events;
            _configurationElement  = configurationElement;
            _dataSink              = dataSink;
            _dataCollectionContext = environmentContext.SessionDataCollectionContext;
            _logger = new TestPlatformLogger(logger, _dataCollectionContext);

            // Register events
            _events.SessionStart += OnSessionStart;
            _events.SessionEnd   += OnSessionEnd;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="BlameCollectorTests"/> class.
        /// </summary>
        public BlameCollectorTests()
        {
            // Initializing mocks
            this.mockLogger = new Mock <DataCollectionLogger>();
            this.mockDataColectionEvents = new Mock <DataCollectionEvents>();
            this.mockDataCollectionSink  = new Mock <DataCollectionSink>();
            this.mockBlameReaderWriter   = new Mock <IBlameReaderWriter>();
            this.mockProcessDumpUtility  = new Mock <IProcessDumpUtility>();
            this.mockInactivityTimer     = new Mock <IInactivityTimer>();
            this.mockFileHelper          = new Mock <IFileHelper>();
            this.blameDataCollector      = new TestableBlameCollector(
                this.mockBlameReaderWriter.Object,
                this.mockProcessDumpUtility.Object,
                this.mockInactivityTimer.Object,
                this.mockFileHelper.Object);

            // Initializing members
            TestCase testcase = new TestCase {
                Id = Guid.NewGuid()
            };

            this.dataCollectionContext = new DataCollectionContext(testcase);
            this.configurationElement  = null;
            this.context = new DataCollectionEnvironmentContext(this.dataCollectionContext);

            this.filepath = Path.Combine(Path.GetTempPath(), "Test");
            FileStream stream = File.Create(this.filepath);

            stream.Dispose();
        }
        /// <summary>
        /// Creates an environment context for a local (hosted) agent and controller
        /// </summary>
        /// <param name="sessionDataCollectionContext">Session level data collection context.</param>
        /// <returns>An environment context for a local (hosted) agent and controller</returns>
        public static DataCollectionEnvironmentContext CreateForLocalEnvironment(DataCollectionContext sessionDataCollectionContext)
        {
            var dataCollectionEnvironmentContext = new DataCollectionEnvironmentContext();

            dataCollectionEnvironmentContext.SessionDataCollectionContext = sessionDataCollectionContext;

            return(dataCollectionEnvironmentContext);
        }
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
 }
        /// <inheritdoc/>
        public IDictionary <string, string> InitializeDataCollectors(string settingsXml)
        {
            if (string.IsNullOrEmpty(settingsXml) && EqtTrace.IsInfoEnabled)
            {
                EqtTrace.Info("DataCollectionManager.InitializeDataCollectors : Runsettings is null or empty.");
            }

            ValidateArg.NotNull(settingsXml, "settingsXml");

            var sessionId             = new SessionId(Guid.NewGuid());
            var dataCollectionContext = new DataCollectionContext(sessionId);

            this.dataCollectionEnvironmentContext = DataCollectionEnvironmentContext.CreateForLocalEnvironment(dataCollectionContext);

            this.attachmentManager.Initialize(sessionId, sourceDirectory, this.messageSink);

            // Enviornment variables are passed to testhost process, through ProcessStartInfo.EnvironmentVariables, which handles the key in a case-insensitive manner, which is translated to lowercase.
            // Therefore, using StringComparer.OrdinalIgnoreCase so that same keys with different cases are treated as same.
            var executionEnvironmentVariables = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            var runConfiguration = XmlRunSettingsUtilities.GetRunConfigurationNode(settingsXml);

            sourceDirectory = RunSettingsUtilities.GetTestResultsDirectory(runConfiguration);

            var dataCollectionRunSettings = XmlRunSettingsUtilities.GetDataCollectionRunSettings(settingsXml);

            this.isDataCollectionEnabled = dataCollectionRunSettings.IsCollectionEnabled;

            // If dataCollectionRunSettings is null, that means datacollectors are not configured.
            if (dataCollectionRunSettings == null || !dataCollectionRunSettings.IsCollectionEnabled)
            {
                return(executionEnvironmentVariables);
            }

            // Get settings for each data collector, load and initialize the data collectors.
            var enabledDataCollectorsSettings = this.GetDataCollectorsEnabledForRun(dataCollectionRunSettings);

            if (enabledDataCollectorsSettings == null || enabledDataCollectorsSettings.Count == 0)
            {
                return(executionEnvironmentVariables);
            }

            foreach (var dataCollectorSettings in enabledDataCollectorsSettings)
            {
                this.LoadAndInitialize(dataCollectorSettings);
            }

            // Once all data collectors have been initialized, query for environment variables
            bool unloadedAnyCollector;
            var  dataCollectorEnvironmentVariables = this.GetEnvironmentVariables(out unloadedAnyCollector);

            foreach (var variable in dataCollectorEnvironmentVariables.Values)
            {
                executionEnvironmentVariables.Add(variable.Name, variable.Value);
            }

            return(executionEnvironmentVariables);
        }
Beispiel #9
0
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     tracerPath = configurationElement["TracerPath"].InnerText;
     outputDir  = configurationElement["OutputDir"].InnerText;
 }
Beispiel #10
0
        /// <summary>
        /// Initializes parameters for the new instance of the class <see cref="BlameDataCollector"/>
        /// </summary>
        /// <param name="configurationElement">The Xml Element to save to</param>
        /// <param name="events">Data collection events to which methods subscribe</param>
        /// <param name="dataSink">A data collection sink for data transfer</param>
        /// <param name="logger">Data Collection Logger to send messages to the client </param>
        /// <param name="environmentContext">Context of data collector environment</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            ValidateArg.NotNull(logger, nameof(logger));

            this.events               = events;
            this.dataCollectionSink   = dataSink;
            this.context              = environmentContext;
            this.configurationElement = configurationElement;
            this.testSequence         = new List <Guid>();
            this.testObjectDictionary = new Dictionary <Guid, BlameTestObject>();
            this.logger               = logger;

            // Subscribing to events
            this.events.TestHostLaunched += this.TestHostLaunchedHandler;
            this.events.SessionEnd       += this.SessionEndedHandler;
            this.events.TestCaseStart    += this.EventsTestCaseStart;
            this.events.TestCaseEnd      += this.EventsTestCaseEnd;

            if (this.configurationElement != null)
            {
                var collectDumpNode = this.configurationElement[Constants.DumpModeKey];
                this.collectProcessDumpOnTrigger = collectDumpNode != null;

                if (this.collectProcessDumpOnTrigger)
                {
                    this.ValidateAndAddTriggerBasedProcessDumpParameters(collectDumpNode);
                }

                var collectHangBasedDumpNode = this.configurationElement[Constants.CollectDumpOnTestSessionHang];
                this.collectProcessDumpOnTestHostHang = collectHangBasedDumpNode != null;
                if (this.collectProcessDumpOnTestHostHang)
                {
                    this.ValidateAndAddHangBasedProcessDumpParameters(collectHangBasedDumpNode);
                }

                var tfm = this.configurationElement[Constants.TargetFramework]?.InnerText;
                if (!string.IsNullOrWhiteSpace(tfm))
                {
                    this.targetFramework = tfm;
                }
            }

            this.attachmentGuid = Guid.NewGuid().ToString().Replace("-", string.Empty);

            if (this.collectProcessDumpOnTestHostHang)
            {
                this.inactivityTimer = this.inactivityTimer ?? new InactivityTimer(this.CollectDumpAndAbortTesthost);
                this.ResetInactivityTimer();
            }
        }
Beispiel #11
0
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     events.SessionEnd  += SessionEnded_Handler;
     _dataCollectionSink = dataSink;
     _context            = environmentContext;
 }
Beispiel #12
0
 public override void Initialize(
     System.Xml.XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     events.SessionStart  += this.SessionStarted_Handler;
     events.TestCaseStart += this.Events_TestCaseStart;
     _logger  = logger;
     _context = environmentContext;
 }
        public override void Initialize(XmlElement configurationElement, DataCollectionEvents events,
            DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
        {
            _dataEvents = events;
            _dataLogger = logger;
            _dataSink = dataSink;

            _configSettings = configurationElement;
            RegisterEventHandlers();

            _nyanCat = new CatRenderer();
            _stats = new TestStats();
        }
 public override void Initialize(
     System.Xml.XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     events.SessionStart    += new EventHandler <SessionStartEventArgs>(this.SessionStarted_Handler);
     events.SessionEnd      += new EventHandler <SessionEndEventArgs>(this.SessionEnded_Handler);
     this.dataCollectionSink = dataSink;
     this.context            = environmentContext;
     this.logger             = logger;
 }
        public EventLogDataCollectorTests()
        {
            this.mockDataCollectionEvents = new Mock <DataCollectionEvents>();
            this.mockDataCollectionSink   = new TestableDataCollectionSink();
            this.mockFileHelper           = new Mock <IFileHelper>();
            TestCase tc = new TestCase();
            DataCollectionContext dataCollectionContext =
                new DataCollectionContext(new SessionId(Guid.NewGuid()));

            this.dataCollectionEnvironmentContext = new DataCollectionEnvironmentContext(dataCollectionContext);
            this.mockDataCollectionLogger         = new Mock <DataCollectionLogger>();
            this.eventLogDataCollector            = new EventLogDataCollector(this.mockFileHelper.Object);
        }
Beispiel #16
0
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     this.Initialize(
         configurationElement,
         new DataCollectionEventsWrapper(events),
         new DataCollectionSinkWrapper(dataSink),
         new DataCollectionLoggerWrapper(logger),
         new DataCollectionEnvironmentContextWrapper(environmentContext));
 }
Beispiel #17
0
        public CoverletCoverageDataCollectorTests()
        {
            _mockDataColectionEvents = new Mock <DataCollectionEvents>();
            _mockDataCollectionSink  = new Mock <DataCollectionSink>();
            _mockLogger           = new Mock <DataCollectionLogger>();
            _configurationElement = null;

            TestCase testcase = new TestCase {
                Id = Guid.NewGuid()
            };

            _dataCollectionContext = new DataCollectionContext(testcase);
            _context             = new DataCollectionEnvironmentContext(_dataCollectionContext);
            _mockCoverageWrapper = new Mock <ICoverageWrapper>();
        }
Beispiel #18
0
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            _logger = logger;
            context = environmentContext;

            events.TestCaseEnd   += EventsOnTestCaseEnd;
            events.TestCaseStart += EventsOnTestCaseStart;

            events.SessionEnd   += EventsOnSessionEnd;
            events.SessionStart += EventsOnSessionStart;
        }
Beispiel #19
0
        public CoverletCoverageDataCollectorTests()
        {
            _mockDataColectionEvents = new Mock <DataCollectionEvents>();
            _mockDataCollectionSink  = new Mock <DataCollectionSink>();
            _mockLogger           = new Mock <DataCollectionLogger>();
            _configurationElement = null;

            TestCase testcase = new TestCase {
                Id = Guid.NewGuid()
            };

            _dataCollectionContext = new DataCollectionContext(testcase);
            _context                   = new DataCollectionEnvironmentContext(_dataCollectionContext);
            _mockCoverageWrapper       = new Mock <ICoverageWrapper>();
            _mockCountDownEventFactory = new Mock <ICountDownEventFactory>();
            _mockCountDownEventFactory.Setup(def => def.Create(It.IsAny <int>(), It.IsAny <TimeSpan>())).Returns(new Mock <ICountDownEvent>().Object);
        }
Beispiel #20
0
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            _logger = logger;
            context = environmentContext;

            events.TestCaseEnd   += EventsOnTestCaseEnd;
            events.TestCaseStart += EventsOnTestCaseStart;

            events.SessionEnd   += EventsOnSessionEnd;
            events.SessionStart += EventsOnSessionStart;

            AppDomain.CurrentDomain.ProcessExit        += OnCurrentDomain_ProcessExit;
            AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_ProcessExit;
        }
Beispiel #21
0
        /// <summary>
        /// Initializes parameters for the new instance of the class <see cref="BlameDataCollector"/>
        /// </summary>
        /// <param name="configurationElement">The Xml Element to save to</param>
        /// <param name="events">Data collection events to which methods subscribe</param>
        /// <param name="dataSink">A data collection sink for data transfer</param>
        /// <param name="logger">Data Collection Logger to send messages to the client </param>
        /// <param name="environmentContext">Context of data collector environment</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            ValidateArg.NotNull(logger, nameof(logger));

            this.events               = events;
            this.dataCollectionSink   = dataSink;
            this.context              = environmentContext;
            this.configurationElement = configurationElement;
            this.testSequence         = new List <TestCase>();

            // Subscribing to events
            this.events.SessionEnd    += this.SessionEnded_Handler;
            this.events.TestCaseStart += this.EventsTestCaseStart;
            this.events.TestCaseEnd   += this.EventsTestCaseEnd;
        }
Beispiel #22
0
        /// <inheritdoc />
        public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
        {
            _events = events;
            _logger = new DataCollectorLogger(logger, environmentContext.SessionDataCollectionContext);

            try
            {
                _ciVisibilitySettings = CIVisibilitySettings.FromDefaultSources();

                // Read the SIGNALFX_DOTNET_TRACER_HOME environment variable
                _tracerHome = Util.EnvironmentHelpers.GetEnvironmentVariable("SIGNALFX_DOTNET_TRACER_HOME");
                if (string.IsNullOrEmpty(_tracerHome) || !Directory.Exists(_tracerHome))
                {
                    _logger.Error("Tracer home (SIGNALFX_DOTNET_TRACER_HOME environment variable) is not defined or folder doesn't exist, coverage has been disabled.");

                    // By not register a handler to SessionStart and SessionEnd the coverage gets disabled (assemblies are not being processed).
                    return;
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                _ciVisibilitySettings = null;
            }

            if (_events is not null)
            {
                _events.SessionStart += OnSessionStart;
                _events.SessionEnd   += OnSessionEnd;
            }
        }
 public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
 {
     _ = StartTracing(message => logger.LogWarning(environmentContext.SessionDataCollectionContext, message));
 }
        public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
        {
            // Load config
            _sessionConfiguration = new SessionConfiguration(
                (uint)ReadIntAttribute(configurationElement, "circularBufferSizeMB", 1024),
                EventPipeSerializationFormat.NetTrace,
                ReadProviders(configurationElement));
            _dataSink = dataSink;
            _logger   = logger;

            var traceExt = _sessionConfiguration.Format == EventPipeSerializationFormat.NetTrace ? "nettrace" : "netperf";

            _traceDirectory = Path.Combine(Path.GetTempPath(), "vstest_eventpipe", $"{environmentContext.SessionDataCollectionContext.SessionId.Id:N}_{Guid.NewGuid():N}");
            if (!Directory.Exists(_traceDirectory))
            {
                Directory.CreateDirectory(_traceDirectory);
            }

            events.SessionEnd += Events_SessionEnd;
        }
 public DataCollectionEnvironmentContextWrapper(DataCollectionEnvironmentContext environmentContext)
 {
     this.environmentContext = environmentContext;
 }
        public override void Initialize(XmlElement configurationElement, DataCollectionEvents events,
                                        DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
        {
            _dataEvents = events;
            _dataLogger = logger;
            _dataSink   = dataSink;

            _configSettings = configurationElement;
            RegisterEventHandlers();

            _nyanCat = new CatRenderer();
            _stats   = new TestStats();
        }
Beispiel #27
0
        /// <summary>
        /// Initializes parameters for the new instance of the class <see cref="BlameDataCollector"/>
        /// </summary>
        /// <param name="configurationElement">The Xml Element to save to</param>
        /// <param name="events">Data collection events to which methods subscribe</param>
        /// <param name="dataSink">A data collection sink for data transfer</param>
        /// <param name="logger">Data Collection Logger to send messages to the client </param>
        /// <param name="environmentContext">Context of data collector environment</param>
        public override void Initialize(
            XmlElement configurationElement,
            DataCollectionEvents events,
            DataCollectionSink dataSink,
            DataCollectionLogger logger,
            DataCollectionEnvironmentContext environmentContext)
        {
            ValidateArg.NotNull(logger, nameof(logger));

            this.events               = events;
            this.dataCollectionSink   = dataSink;
            this.context              = environmentContext;
            this.configurationElement = configurationElement;
            this.testSequence         = new List <Guid>();
            this.testObjectDictionary = new Dictionary <Guid, BlameTestObject>();
            this.logger               = logger;

            // Subscribing to events
            this.events.TestHostLaunched += this.TestHostLaunchedHandler;
            this.events.SessionEnd       += this.SessionEndedHandler;
            this.events.TestCaseStart    += this.EventsTestCaseStart;
            this.events.TestCaseEnd      += this.EventsTestCaseEnd;

            if (this.configurationElement != null)
            {
                var collectDumpNode = this.configurationElement[Constants.DumpModeKey];
                this.collectProcessDumpOnTrigger = collectDumpNode != null;

                if (this.collectProcessDumpOnTrigger)
                {
                    this.ValidateAndAddTriggerBasedProcessDumpParameters(collectDumpNode);

                    // enabling dumps on MacOS needs to be done explicitly https://github.com/dotnet/runtime/pull/40105
                    this.environmentVariables.Add(new KeyValuePair <string, string>("COMPlus_DbgEnableElfDumpOnMacOS", "1"));
                    this.environmentVariables.Add(new KeyValuePair <string, string>("COMPlus_DbgEnableMiniDump", "1"));

                    // https://github.com/dotnet/coreclr/blob/master/Documentation/botr/xplat-minidump-generation.md
                    // 2   MiniDumpWithPrivateReadWriteMemory
                    // 4   MiniDumpWithFullMemory
                    this.environmentVariables.Add(new KeyValuePair <string, string>("COMPlus_DbgMiniDumpType", this.processFullDumpEnabled ? "4" : "2"));
                    var dumpDirectory = this.GetDumpDirectory();
                    var dumpPath      = Path.Combine(dumpDirectory, $"%e_%p_%t_crashdump.dmp");
                    this.environmentVariables.Add(new KeyValuePair <string, string>("COMPlus_DbgMiniDumpName", dumpPath));
                }

                var collectHangBasedDumpNode = this.configurationElement[Constants.CollectDumpOnTestSessionHang];
                this.collectProcessDumpOnTestHostHang = collectHangBasedDumpNode != null;
                if (this.collectProcessDumpOnTestHostHang)
                {
                    // enabling dumps on MacOS needs to be done explicitly https://github.com/dotnet/runtime/pull/40105
                    this.environmentVariables.Add(new KeyValuePair <string, string>("COMPlus_DbgEnableElfDumpOnMacOS", "1"));

                    this.ValidateAndAddHangBasedProcessDumpParameters(collectHangBasedDumpNode);
                }

                var tfm = this.configurationElement[Constants.TargetFramework]?.InnerText;
                if (!string.IsNullOrWhiteSpace(tfm))
                {
                    this.targetFramework = tfm;
                }
            }

            this.attachmentGuid = Guid.NewGuid().ToString().Replace("-", string.Empty);

            if (this.collectProcessDumpOnTestHostHang)
            {
                this.inactivityTimer = this.inactivityTimer ?? new InactivityTimer(this.CollectDumpAndAbortTesthost);
                this.ResetInactivityTimer();
            }
        }
Beispiel #28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DataCollectorInformation"/> class.
 /// </summary>
 /// <param name="dataCollector">
 /// The data collector.
 /// </param>
 /// <param name="configurationElement">
 /// The configuration element.
 /// </param>
 /// <param name="dataCollectorConfig">
 /// The data collector config.
 /// </param>
 /// <param name="environmentContext">
 /// The environment Context.
 /// </param>
 /// <param name="attachmentManager">
 /// The attachment Manager.
 /// </param>
 /// <param name="events">
 /// The events.
 /// </param>
 /// <param name="messageSink">
 /// The message Sink.
 /// </param>
 /// <param name="settingsXml"></param>
 internal DataCollectorInformation(DataCollector dataCollector, XmlElement configurationElement, DataCollectorConfig dataCollectorConfig, DataCollectionEnvironmentContext environmentContext, IDataCollectionAttachmentManager attachmentManager, TestPlatformDataCollectionEvents events, IMessageSink messageSink, string settingsXml)
 {
     this.DataCollector        = dataCollector;
     this.ConfigurationElement = configurationElement;
     this.DataCollectorConfig  = dataCollectorConfig;
     this.Events             = events;
     this.EnvironmentContext = environmentContext;
     this.DataCollectionSink = new TestPlatformDataCollectionSink(attachmentManager, dataCollectorConfig);
     this.Logger             = new TestPlatformDataCollectionLogger(messageSink, dataCollectorConfig);
     this.SettingsXml        = settingsXml;
 }
 public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
 {
     events.TestCaseStart += (sender, e) => logger.LogWarning(environmentContext.SessionDataCollectionContext, e.TestCaseName + " [Start]");
     events.TestCaseEnd   += (sender, e) => logger.LogWarning(environmentContext.SessionDataCollectionContext, e.TestCaseName + " [Ended]");
 }