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 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 #3
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);
        }
        /// <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;
        }
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
 }
        public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
        {
            mDataSink = dataSink;

            events.SessionStart  += OnSessionStart;
            events.SessionEnd    += OnSessionEnd;
            events.TestCaseStart += OnTestCaseStart;
            events.TestCaseEnd   += OnTestCaseEnd;
        }
Beispiel #7
0
 public override void Initialize(
     XmlElement configurationElement,
     DataCollectionEvents events,
     DataCollectionSink dataSink,
     DataCollectionLogger logger,
     DataCollectionEnvironmentContext environmentContext)
 {
     tracerPath = configurationElement["TracerPath"].InnerText;
     outputDir  = configurationElement["OutputDir"].InnerText;
 }
Beispiel #8
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 #9
0
 public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, string reportFileName)
     : this(dataSink,
            dataCollectionContext,
            logger,
            eqtTrace,
            reportFileName,
            Guid.NewGuid().ToString(),
            new FileHelper(),
            new DirectoryHelper())
 {
 }
Beispiel #10
0
 public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, ICountDownEvent countDownEvent)
     : this(dataSink,
            dataCollectionContext,
            logger,
            eqtTrace,
            Guid.NewGuid().ToString(),
            new FileHelper(),
            new DirectoryHelper(),
            countDownEvent)
 {
 }
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(
     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 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(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 #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 AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, string reportFileName, string reportDirectoryName, FileHelper fileHelper, DirectoryHelper directoryHelper)
        {
            // Store input vars
            this.dataSink = dataSink;
            this.dataCollectionContext = dataCollectionContext;
            this.logger          = logger;
            this.eqtTrace        = eqtTrace;
            this.reportFileName  = reportFileName;
            this.fileHelper      = fileHelper;
            this.directoryHelper = directoryHelper;

            // Report directory to store the coverage reports.
            this.reportDirectory = Path.Combine(Path.GetTempPath(), reportDirectoryName);

            // Register events
            this.dataSink.SendFileCompleted += this.OnSendFileCompleted;
        }
Beispiel #18
0
        public AttachmentManager(DataCollectionSink dataSink, DataCollectionContext dataCollectionContext, TestPlatformLogger logger, TestPlatformEqtTrace eqtTrace, string reportDirectoryName, IFileHelper fileHelper, IDirectoryHelper directoryHelper, ICountDownEvent countDownEvent)
        {
            // Store input variabless
            _dataSink = dataSink;
            _dataCollectionContext = dataCollectionContext;
            _logger          = logger;
            _eqtTrace        = eqtTrace;
            _fileHelper      = fileHelper;
            _directoryHelper = directoryHelper;
            _countDownEvent  = countDownEvent;

            // Report directory to store the coverage reports.
            _reportDirectory = Path.Combine(Path.GetTempPath(), reportDirectoryName);

            // Register events
            _dataSink.SendFileCompleted += OnSendFileCompleted;
        }
        /// <summary>
        /// Disposes the data collector
        /// </summary>
        /// <param name="disposing">Disposing flag</param>
        protected override void Dispose(bool disposing)
        {
            _eqtTrace.Verbose("{0}: Disposing", CoverletConstants.DataCollectorName);

            // Unregister events
            if (_events != null)
            {
                _events.SessionStart -= OnSessionStart;
                _events.SessionEnd   -= OnSessionEnd;
            }

            // Remove vars
            _events          = null;
            _dataSink        = null;
            _coverageManager = null;

            base.Dispose(disposing);
        }
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;
        }
        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;
        }
Beispiel #22
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 #23
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();
            }
        }
 public DataCollectionSinkWrapper(DataCollectionSink wrapped)
 {
     this.wrapped = wrapped;
 }
 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]");
 }
 public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)
 {
     _ = StartTracing(message => logger.LogWarning(environmentContext.SessionDataCollectionContext, message));
 }
Beispiel #27
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;
            }
        }