/// <summary> /// Loads all the inproc data collector dlls /// </summary> /// <param name="runSettings"> /// The run Settings. /// </param> private void InitializeInProcDataCollectors(string runSettings) { try { // Check if runsettings contains in-proc datacollector element var inProcDataCollectionRunSettings = XmlRunSettingsUtilities.GetInProcDataCollectionRunSettings(runSettings); var inProcDataCollectionSettingsPresentInRunSettings = inProcDataCollectionRunSettings?.IsCollectionEnabled ?? false; // Verify if it has any valid in-proc datacollectors or just a dummy element inProcDataCollectionSettingsPresentInRunSettings = inProcDataCollectionSettingsPresentInRunSettings && inProcDataCollectionRunSettings.DataCollectorSettingsList.Any(); // Initialize if we have atleast one if (inProcDataCollectionSettingsPresentInRunSettings) { this.inProcDataCollectorSettingsCollection = inProcDataCollectionRunSettings.DataCollectorSettingsList; var interfaceTypeInfo = typeof(InProcDataCollection).GetTypeInfo(); foreach (var inProcDc in this.inProcDataCollectorSettingsCollection) { var inProcDataCollector = this.CreateDataCollector(inProcDc, interfaceTypeInfo); this.InProcDataCollectors[inProcDataCollector.AssemblyQualifiedName] = inProcDataCollector; } } } catch (Exception ex) { EqtTrace.Error("InProcDataCollectionExtensionManager: Error occured while Initializing the datacollectors : {0}", ex); } finally { this.IsInProcDataCollectionEnabled = this.InProcDataCollectors.Any(); } }
internal static void AddDataCollectorToRunSettings(string argument, IRunSettingsProvider runSettingsManager, IFileHelper fileHelper) { EnabledDataCollectors.Add(argument.ToLower()); var settings = runSettingsManager.ActiveRunSettings?.SettingsXml; if (settings == null) { runSettingsManager.AddDefaultRunSettings(); settings = runSettingsManager.ActiveRunSettings?.SettingsXml; } var dataCollectionRunSettings = XmlRunSettingsUtilities.GetDataCollectionRunSettings(settings) ?? new DataCollectionRunSettings(); var inProcDataCollectionRunSettings = XmlRunSettingsUtilities.GetInProcDataCollectionRunSettings(settings) ?? new DataCollectionRunSettings( Constants.InProcDataCollectionRunSettingsName, Constants.InProcDataCollectorsSettingName, Constants.InProcDataCollectorSettingName); // Add data collectors if not already present, enable if already present. EnableDataCollectorUsingFriendlyName(argument, dataCollectionRunSettings); runSettingsManager.UpdateRunSettingsNodeInnerXml(Constants.DataCollectionRunSettingsName, dataCollectionRunSettings.ToXml().InnerXml); if (string.Equals(argument, CoverletConstants.CoverletDataCollectorFriendlyName, StringComparison.OrdinalIgnoreCase)) { // Add in-proc data collector to runsettings if coverlet code coverage is enabled EnableCoverletInProcDataCollector(argument, inProcDataCollectionRunSettings, runSettingsManager, fileHelper); runSettingsManager.UpdateRunSettingsNodeInnerXml(Constants.InProcDataCollectionRunSettingsName, inProcDataCollectionRunSettings.ToXml().InnerXml); } }
public void GetInProcDataCollectionRunSettingsThrowsExceptionWhenXMLNotValid() { string settingsXml = @"<RunSettings> <InProcDataCollectionRunSettings> <InProcDataCollectors> <InProcDataCollector friendlyNames='Test Impact' uris='InProcDataCollector://Microsoft/TestImpact/1.0' assemblyQualifiedName='TestImpactListener.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7ccb7239ffde675a' codebase='E:\repos\MSTest\src\managed\TestPlatform\TestImpactListener.Tests\bin\Debug\TestImpactListener.Tests.dll'> <Configuration> <Port>4312</Port> </Configuration> </InProcDataCollector> </InProcDataCollectors> </InProcDataCollectionRunSettings> </RunSettings>"; Assert.ThrowsException <SettingsException>( () => XmlRunSettingsUtilities.GetInProcDataCollectionRunSettings(settingsXml)); }
public void GetInProcDataCollectionRunSettingsFromSettings() { string settingsXml = @"<RunSettings> <InProcDataCollectionRunSettings> <InProcDataCollectors> <InProcDataCollector friendlyName='Test Impact' uri='InProcDataCollector://Microsoft/TestImpact/1.0' assemblyQualifiedName='TestImpactListener.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7ccb7239ffde675a' codebase='E:\repos\MSTest\src\managed\TestPlatform\TestImpactListener.Tests\bin\Debug\TestImpactListener.Tests.dll'> <Configuration> <Port>4312</Port> </Configuration> </InProcDataCollector> </InProcDataCollectors> </InProcDataCollectionRunSettings> </RunSettings>"; var inProcDCRunSettings = XmlRunSettingsUtilities.GetInProcDataCollectionRunSettings(settingsXml); Assert.IsNotNull(inProcDCRunSettings); Assert.AreEqual(inProcDCRunSettings.DataCollectorSettingsList.Count, 1); }
/// <summary> /// Validates the collectors in runsettings when an in-lined testsettings is specified /// </summary> /// <param name="runsettings">RunSettings used for the run</param> /// <returns>True if an incompatible collector is found</returns> public static bool AreRunSettingsCollectorsInCompatibleWithTestSettings(string runsettings) { // If there's no embedded testsettings.. bail out if (!IsTestSettingsEnabled(runsettings)) { return(false); } // Explicitly blocking usage of data collectors through modes runsettings and testsettings except // for couple of scenarios where the IDE generates the collector settings in the runsettings file even when // it has an embedded testsettings file. Longterm runsettings will be the single run configuration source // In-proc collectors are incompatible with testsettings var inprocDataCollectionSettings = XmlRunSettingsUtilities.GetInProcDataCollectionRunSettings(runsettings); if (inprocDataCollectionSettings != null && inprocDataCollectionSettings.IsCollectionEnabled && inprocDataCollectionSettings.DataCollectorSettingsList != null) { foreach (var collectorSettings in inprocDataCollectionSettings.DataCollectorSettingsList) { if (collectorSettings.IsEnabled) { EqtTrace.Warning($"Incompatible collector found. {collectorSettings.FriendlyName} : {collectorSettings.Uri}"); return(true); } } } // TestSettings and collection is enabled in runsetttings.. the only allowed collectors are code coverage and fakes var datacollectionSettings = XmlRunSettingsUtilities.GetDataCollectionRunSettings(runsettings); if (datacollectionSettings != null && datacollectionSettings.IsCollectionEnabled && datacollectionSettings.DataCollectorSettingsList != null) { foreach (var collectorRef in datacollectionSettings.DataCollectorSettingsList) { // Ignore disabled collector if (!collectorRef.IsEnabled) { continue; } // If the configured collector is code coverage or fakes.. ignore if (!string.IsNullOrWhiteSpace(collectorRef.FriendlyName) && (FakesFriendlyName.Equals(collectorRef.FriendlyName, StringComparison.OrdinalIgnoreCase) || CodeCoverageFriendlyName.Equals(collectorRef.FriendlyName, StringComparison.OrdinalIgnoreCase))) { continue; } // If the configured collector is code coverage or fakes.. ignore if (collectorRef.Uri != null && (CodeCoverageCollectorUri.Equals(collectorRef.Uri.ToString(), StringComparison.OrdinalIgnoreCase) || FakesCollectorUri.Equals(collectorRef.Uri.ToString(), StringComparison.OrdinalIgnoreCase))) { continue; } EqtTrace.Warning($"Incompatible collector found. {collectorRef.FriendlyName} : {collectorRef.Uri}"); return(true); } } return(false); }