コード例 #1
0
        public void FakesDataCollectorSettingsShouldBeInserted()
        {
            string runSettingsXml = @"<RunSettings><RunConfiguration></RunConfiguration></RunSettings>";
            var    doc            = new XmlDocument();

            using (var xmlReader = XmlReader.Create(
                       new StringReader(runSettingsXml),
                       new XmlReaderSettings()
            {
                CloseInput = true
            }))
            {
                doc.Load(xmlReader);
            }

            var dataCollectorNode2 = new DataCollectorSettings()
            {
                AssemblyQualifiedName = FakesUtilities.FakesMetadata.DataCollectorAssemblyQualifiedName,
                Uri           = new Uri(FakesUtilities.FakesMetadata.DataCollectorUriV2),
                FriendlyName  = FakesUtilities.FakesMetadata.FriendlyName,
                IsEnabled     = true,
                Configuration = doc.FirstChild as XmlElement
            };

            FakesUtilities.InsertOrReplaceFakesDataCollectorNode(doc, dataCollectorNode2);
            Assert.IsTrue(XmlRunSettingsUtilities.ContainsDataCollector(doc, FakesUtilities.FakesMetadata.DataCollectorUriV2));
        }
 public void SetSettings(DataCollectorSettings settings)
 {
     _settings             = settings;
     AfDatabaseName        = _settings.AFDatabaseName;
     AfElementTemplateName = _settings.AFElementTemplateName;
     AfServerName          = _settings.AFServerName;
 }
コード例 #3
0
        public void OtherRunsettingsShouldNotBeChanged()
        {
            string runSettingsXml = @"<RunSettings><RunConfiguration><TargetFrameworkVersion>FrameworkCore10</TargetFrameworkVersion></RunConfiguration></RunSettings>";
            var    doc            = new XmlDocument();

            using (var xmlReader = XmlReader.Create(
                       new StringReader(runSettingsXml),
                       new XmlReaderSettings()
            {
                CloseInput = true
            }))
            {
                doc.Load(xmlReader);
            }

            var dataCollectorNode2 = new DataCollectorSettings()
            {
                AssemblyQualifiedName = FakesUtilities.FakesMetadata.DataCollectorAssemblyQualifiedName,
                Uri           = new Uri(FakesUtilities.FakesMetadata.DataCollectorUriV2),
                FriendlyName  = FakesUtilities.FakesMetadata.FriendlyName,
                IsEnabled     = true,
                Configuration = doc.CreateElement("Configuration")
            };

            FakesUtilities.InsertOrReplaceFakesDataCollectorNode(doc, dataCollectorNode2);
            Assert.IsTrue(XmlRunSettingsUtilities.ContainsDataCollector(doc, FakesUtilities.FakesMetadata.DataCollectorUriV2));
            XmlNodeList nodes = doc.SelectNodes("//RunSettings/RunConfiguration/TargetFrameworkVersion");

            Assert.AreEqual("FrameworkCore10", nodes[0].InnerText);
        }
コード例 #4
0
 CoverageParameters GetCoverageParameters(DataCollectorSettings coverageSettings)
 {
     if (coverageSettings is null)
     {
         return(defaultCoverageParameters);
     }
     return(ParseSettings(coverageSettings));
 }
        public void SetSettings(DataCollectorSettings settings)
        {
            _settings = settings;

            AfDatabaseName = _settings.AFDatabaseName;
            AfElementTemplateName = _settings.AFElementTemplateName;
            AfServerName = _settings.AFServerName;
        }
コード例 #6
0
        protected virtual IInProcDataCollector CreateDataCollector(DataCollectorSettings dataCollectorSettings, TypeInfo interfaceTypeInfo)
        {
            var inProcDataCollector = new InProcDataCollector(dataCollectorSettings.CodeBase, dataCollectorSettings.AssemblyQualifiedName,
                                                              interfaceTypeInfo, dataCollectorSettings.Configuration.OuterXml);

            inProcDataCollector.LoadDataCollector(inProcDataCollectionSink);

            return(inProcDataCollector);
        }
コード例 #7
0
    /// <summary>
    /// To be called once at game start!
    /// </summary>
    public static void Initialize(DataCollectorSettings settings)
    {
        //Debug.Log("[DataCollector] initializing");

        if (_instance != null)
        {
            Debug.LogError("[DataCollector] already instantiated before initialization");
        }
        DataCollector.settings = settings;
        instance.buildVersion  = settings.buildVersion; // doing random thing calling instance to start instanciation
    }
コード例 #8
0
        /// <summary>
        /// Adds the Fakes data collector settings in the run settings document.
        /// </summary>
        /// <returns>
        /// The <see cref="DataCollectorSettings"/>.
        /// </returns>
        private static DataCollectorSettings CreateFakesDataCollectorSettings()
        {
            // embed the fakes run settings
            var settings = new DataCollectorSettings
            {
                AssemblyQualifiedName = FakesMetadata.DataCollectorAssemblyQualifiedName,
                FriendlyName          = FakesMetadata.FriendlyName,
                IsEnabled             = true,
                Uri = new Uri(FakesMetadata.DataCollectorUri)
            };

            return(settings);
        }
コード例 #9
0
        public void InProcDataCollectorIsReadingMultipleDataCollector()
        {
            var multiSettingsXml = @"<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.Tests1.dll'>
                                                <Configuration>
                                                    <Port>4312</Port>
                                                </Configuration>
                                            </InProcDataCollector>
                                            <InProcDataCollector friendlyName='InProcDataCol' uri='InProcDataCollector://Microsoft/InProcDataCol/2.0' assemblyQualifiedName='TestImpactListener.Tests, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7ccb7239ffde675a'  codebase='E:\repos\MSTest\src\managed\TestPlatform\TestImpactListener.Tests\bin\Debug\TestImpactListener.Tests2.dll'>
                                                <Configuration>
                                                    <Port>4313</Port>
                                                </Configuration>
                                            </InProcDataCollector>
                                        </InProcDataCollectors>
                                    </InProcDataCollectionRunSettings>
                                </RunSettings>";

            var inProcDataCollectionManager = new TestableInProcDataCollectionExtensionManager(multiSettingsXml, null);

            Assert.IsTrue(inProcDataCollectionManager.IsInProcDataCollectionEnabled, "InProcDataCollection must be enabled if runsettings contains inproc datacollectors.");

            Assert.AreEqual(inProcDataCollectionManager.DataCollectors.Count, 2, "One Datacollector must be registered");

            bool secondOne = false;
            DataCollectorSettings dataCollectorSettings1 = null;
            DataCollectorSettings dataCollectorSettings2 = null;

            foreach (var inProcDC in inProcDataCollectionManager.DataCollectors.Values)
            {
                if (secondOne)
                {
                    dataCollectorSettings2 = (inProcDC as MockDataCollector).DataCollectorSettings;
                }
                else
                {
                    dataCollectorSettings1 = (inProcDC as MockDataCollector).DataCollectorSettings;
                    secondOne = true;
                }
            }

            Assert.IsTrue(string.Equals(dataCollectorSettings1.AssemblyQualifiedName, "TestImpactListener.Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7ccb7239ffde675a", StringComparison.OrdinalIgnoreCase));
            Assert.IsTrue(string.Equals(dataCollectorSettings1.CodeBase, @"E:\repos\MSTest\src\managed\TestPlatform\TestImpactListener.Tests\bin\Debug\TestImpactListener.Tests1.dll", StringComparison.OrdinalIgnoreCase));
            Assert.IsTrue(string.Equals(dataCollectorSettings1.Configuration.OuterXml.ToString(), @"<Configuration><Port>4312</Port></Configuration>", StringComparison.OrdinalIgnoreCase));

            Assert.IsTrue(string.Equals(dataCollectorSettings2.AssemblyQualifiedName, "TestImpactListener.Tests, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7ccb7239ffde675a", StringComparison.OrdinalIgnoreCase));
            Assert.IsTrue(string.Equals(dataCollectorSettings2.CodeBase, @"E:\repos\MSTest\src\managed\TestPlatform\TestImpactListener.Tests\bin\Debug\TestImpactListener.Tests2.dll", StringComparison.OrdinalIgnoreCase));
            Assert.IsTrue(string.Equals(dataCollectorSettings2.Configuration.OuterXml.ToString(), @"<Configuration><Port>4313</Port></Configuration>", StringComparison.OrdinalIgnoreCase));
        }
コード例 #10
0
 CoverageParameters ParseSettings(DataCollectorSettings coverageSettings)
 {
     try
     {
         string        configurationXml = coverageSettings.Configuration.OuterXml;
         XmlSerializer serializer       = new XmlSerializer(typeof(CoverletRunSettingsConfiguration));
         using StringReader reader = new StringReader(configurationXml);
         CoverletRunSettingsConfiguration settings = (CoverletRunSettingsConfiguration)serializer.Deserialize(reader);
         return(settings.ToParameters());
     }
     catch (Exception e)
     {
         Debug.WriteLine(e);
         return(defaultCoverageParameters);
     }
 }
コード例 #11
0
        private static bool DoesDataCollectorSettingsExist(string friendlyName,
                                                           DataCollectionRunSettings dataCollectionRunSettings,
                                                           out DataCollectorSettings dataCollectorSettings)
        {
            dataCollectorSettings = null;
            foreach (var dataCollectorSetting in dataCollectionRunSettings.DataCollectorSettingsList)
            {
                if (dataCollectorSetting.FriendlyName.Equals(friendlyName, StringComparison.OrdinalIgnoreCase))
                {
                    dataCollectorSettings = dataCollectorSetting;
                    return(true);
                }
            }

            return(false);
        }
コード例 #12
0
        internal static void EnableDataCollectorUsingFriendlyName(string argument, DataCollectionRunSettings dataCollectionRunSettings)
        {
            DataCollectorSettings dataCollectorSettings = null;

            if (!DoesDataCollectorSettingsExist(argument, dataCollectionRunSettings, out dataCollectorSettings))
            {
                dataCollectorSettings = new DataCollectorSettings();
                dataCollectorSettings.FriendlyName = argument;
                dataCollectorSettings.IsEnabled    = true;
                dataCollectionRunSettings.DataCollectorSettingsList.Add(dataCollectorSettings);
            }
            else
            {
                dataCollectorSettings.IsEnabled = true;
            }
        }
コード例 #13
0
        private async void UnitTestService_TestSessionStarting(object sender, TestSessionEventArgs e)
        {
            if (coverageCollectionCompletion == null || e.Test.OwnerObject is not Project testProject)
            {
                return;
            }

            var configuration = IdeApp.Workspace.ActiveConfiguration;
            DataCollectorSettings coverageSettings = GetRunSettings(testProject);

            provider.Prepare(testProject, configuration, coverageSettings);
            await e.Session.Task;
            var results = provider.GetCoverage(testProject, configuration);

            if (results != null)
            {
                SaveResults(results, testProject, configuration);
            }
            coverageCollectionCompletion.SetResult(true);
        }
コード例 #14
0
        /// <summary>
        /// Enables coverlet in-proc datacollector
        /// </summary>
        internal static void EnableCoverletInProcDataCollector(string argument, DataCollectionRunSettings dataCollectionRunSettings, IRunSettingsProvider runSettingProvider, IFileHelper fileHelper)
        {
            DataCollectorSettings dataCollectorSettings = null;

            if (!DoesDataCollectorSettingsExist(argument, dataCollectionRunSettings, out dataCollectorSettings))
            {
                // Create a new setting with default values
                dataCollectorSettings = new DataCollectorSettings();
                dataCollectorSettings.FriendlyName          = argument;
                dataCollectorSettings.AssemblyQualifiedName = CoverletConstants.CoverletDataCollectorAssemblyQualifiedName;
                dataCollectorSettings.CodeBase  = GetCoverletCodeBasePath(runSettingProvider, fileHelper) ?? CoverletConstants.CoverletDataCollectorCodebase;
                dataCollectorSettings.IsEnabled = true;
                dataCollectionRunSettings.DataCollectorSettingsList.Add(dataCollectorSettings);
            }
            else
            {
                // Set Assembly qualified name and code base if not already set
                dataCollectorSettings.AssemblyQualifiedName = dataCollectorSettings.AssemblyQualifiedName ?? CoverletConstants.CoverletDataCollectorAssemblyQualifiedName;
                dataCollectorSettings.CodeBase  = (dataCollectorSettings.CodeBase ?? GetCoverletCodeBasePath(runSettingProvider, fileHelper)) ?? CoverletConstants.CoverletDataCollectorCodebase;
                dataCollectorSettings.IsEnabled = true;
            }
        }
コード例 #15
0
 public MockDataCollector(DataCollectorSettings dataCollectorSettings)
 {
     this.DataCollectorSettings = dataCollectorSettings;
 }
コード例 #16
0
        /// <summary>
        /// Loads and initializes data collector using data collector settings.
        /// </summary>
        /// <param name="dataCollectorSettings">
        /// The data collector settings.
        /// </param>
        /// <param name="settingsXml"> runsettings Xml</param>
        private void LoadAndInitialize(DataCollectorSettings dataCollectorSettings, string settingsXml)
        {
            DataCollectorInformation dataCollectorInfo;
            DataCollectorConfig      dataCollectorConfig;

            try
            {
                // Look up the extension and initialize it if one is found.
                var extensionManager = this.DataCollectorExtensionManager;
                var dataCollectorUri = string.Empty;
                this.TryGetUriFromFriendlyName(dataCollectorSettings.FriendlyName, out dataCollectorUri);

                DataCollector dataCollector = null;
                if (!string.IsNullOrWhiteSpace(dataCollectorUri))
                {
                    dataCollector = this.TryGetTestExtension(dataCollectorUri);
                }

                if (dataCollector == null)
                {
                    this.LogWarning(string.Format(CultureInfo.CurrentUICulture, Resources.Resources.DataCollectorNotFound, dataCollectorSettings.FriendlyName));
                    return;
                }

                if (this.RunDataCollectors.ContainsKey(dataCollector.GetType()))
                {
                    // Collector is already loaded (may be configured twice). Ignore duplicates and return.
                    return;
                }

                dataCollectorConfig = new DataCollectorConfig(dataCollector.GetType());

                // Attempt to get the data collector information verifying that all of the required metadata for the collector is available.
                dataCollectorInfo = new DataCollectorInformation(
                    dataCollector,
                    dataCollectorSettings.Configuration,
                    dataCollectorConfig,
                    this.dataCollectionEnvironmentContext,
                    this.attachmentManager,
                    this.events,
                    this.messageSink,
                    settingsXml);
            }
            catch (Exception ex)
            {
                if (EqtTrace.IsErrorEnabled)
                {
                    EqtTrace.Error("DataCollectionManager.LoadAndInitialize: exception while creating data collector {0} : {1}", dataCollectorSettings.FriendlyName, ex);
                }

                // No data collector info, so send the error with no direct association to the collector.
                this.LogWarning(string.Format(CultureInfo.CurrentUICulture, Resources.Resources.DataCollectorInitializationError, dataCollectorSettings.FriendlyName, ex));
                return;
            }

            try
            {
                dataCollectorInfo.InitializeDataCollector();
                lock (this.RunDataCollectors)
                {
                    // Add data collectors to run cache.
                    this.RunDataCollectors[dataCollectorConfig.DataCollectorType] = dataCollectorInfo;
                }
            }
            catch (Exception ex)
            {
                if (EqtTrace.IsErrorEnabled)
                {
                    EqtTrace.Error("DataCollectionManager.LoadAndInitialize: exception while initializing data collector {0} : {1}", dataCollectorSettings.FriendlyName, ex);
                }

                // Log error.
                dataCollectorInfo.Logger.LogError(this.dataCollectionEnvironmentContext.SessionDataCollectionContext, string.Format(CultureInfo.CurrentCulture, Resources.Resources.DataCollectorInitializationError, dataCollectorConfig.FriendlyName, ex.Message));

                // Dispose datacollector.
                dataCollectorInfo.DisposeDataCollector();
            }
        }
コード例 #17
0
        /// <summary>
        /// Inserts a data collector settings in the file
        /// </summary>
        /// <param name="runSettingDocument">runSettingDocument</param>
        /// <param name="settings">settings</param>
        public static void InsertDataCollectorsNode(IXPathNavigable runSettingDocument, DataCollectorSettings settings)
        {
            if (runSettingDocument == null)
            {
                throw new ArgumentNullException(nameof(runSettingDocument));
            }

            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            var navigator = runSettingDocument.CreateNavigator();

            MoveToDataCollectorsNode(ref navigator);

            var settingsXml       = settings.ToXml();
            var dataCollectorNode = settingsXml.CreateNavigator();

            dataCollectorNode.MoveToRoot();

            navigator.AppendChild(dataCollectorNode);
        }
コード例 #18
0
 protected override IInProcDataCollector CreateDataCollector(DataCollectorSettings dataCollectorSettings, TypeInfo interfaceTypeInfo)
 {
     return(new MockDataCollector(dataCollectorSettings));
 }
コード例 #19
0
        /// <summary>
        /// Loads and initializes datacollector using datacollector settings.
        /// </summary>
        /// <param name="dataCollectorSettings">
        /// The data collector settings.
        /// </param>
        private void LoadAndInitialize(DataCollectorSettings dataCollectorSettings)
        {
            var collectorTypeName = dataCollectorSettings.AssemblyQualifiedName;
            DataCollectorInformation dataCollectorInfo;
            DataCollectorConfig      dataCollectorConfig;

            try
            {
                var dataCollector = this.dataCollectorLoader.Load(dataCollectorSettings.CodeBase, dataCollectorSettings.AssemblyQualifiedName);

                if (dataCollector == null)
                {
                    this.LogWarning(string.Format(CultureInfo.CurrentUICulture, Resources.Resources.DataCollectorNotFound, collectorTypeName, string.Empty));
                    return;
                }

                if (this.RunDataCollectors.ContainsKey(dataCollector.GetType()))
                {
                    // Collector is already loaded (may be configured twice). Ignore duplicates and return.
                    return;
                }

                dataCollectorConfig = new DataCollectorConfig(dataCollector.GetType());

                // Attempt to get the data collector information verifying that all of the required metadata for the collector is available.
                dataCollectorInfo = new DataCollectorInformation(
                    dataCollector,
                    dataCollectorSettings.Configuration,
                    dataCollectorConfig,
                    this.dataCollectionEnvironmentContext,
                    this.attachmentManager,
                    this.events,
                    this.messageSink);

                if (!dataCollectorInfo.DataCollectorConfig.TypeUri.Equals(dataCollectorSettings.Uri))
                {
                    // If the data collector was not found, send an error.
                    this.LogWarning(string.Format(CultureInfo.CurrentCulture, Resources.Resources.DataCollectorNotFound, dataCollectorConfig.DataCollectorType.FullName, dataCollectorSettings.Uri));
                    return;
                }
            }
            catch (Exception ex)
            {
                if (EqtTrace.IsErrorEnabled)
                {
                    EqtTrace.Error("DataCollectionManager.LoadAndInitialize: exception while creating data collector {0} : {1}", collectorTypeName, ex);
                }

                // No data collector info, so send the error with no direct association to the collector.
                this.LogWarning(string.Format(CultureInfo.CurrentUICulture, Resources.Resources.DataCollectorInitializationError, collectorTypeName, ex.Message));
                return;
            }

            try
            {
                dataCollectorInfo.InitializeDataCollector();
                lock (this.RunDataCollectors)
                {
                    // Add data collectors to run cache.
                    this.RunDataCollectors[dataCollectorConfig.DataCollectorType] = dataCollectorInfo;
                }
            }
            catch (Exception ex)
            {
                if (EqtTrace.IsErrorEnabled)
                {
                    EqtTrace.Error("DataCollectionManager.LoadAndInitialize: exception while initializing data collector {0}: " + ex, collectorTypeName);
                }

                // Log error.
                dataCollectorInfo.Logger.LogError(this.dataCollectionEnvironmentContext.SessionDataCollectionContext, string.Format(CultureInfo.CurrentCulture, Resources.Resources.DataCollectorInitializationError, dataCollectorConfig.FriendlyName, ex.Message));

                // Dispose datacollector.
                dataCollectorInfo.DisposeDataCollector();
            }
        }
コード例 #20
0
        internal static void InsertOrReplaceFakesDataCollectorNode(XmlDocument runSettings, DataCollectorSettings settings)
        {
            // override current settings
            var navigator = runSettings.CreateNavigator();
            var nodes     = navigator.Select("/RunSettings/DataCollectionRunSettings/DataCollectors/DataCollector");

            foreach (XPathNavigator dataCollectorNavigator in nodes)
            {
                var uri = dataCollectorNavigator.GetAttribute("uri", string.Empty);
                // We assume that only one uri can exist in a given runsettings
                if (string.Equals(FakesMetadata.DataCollectorUriV1, uri, StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(FakesMetadata.DataCollectorUriV2, uri, StringComparison.OrdinalIgnoreCase))
                {
                    dataCollectorNavigator.ReplaceSelf(settings.ToXml().CreateNavigator());
                    return;
                }
            }

            // insert new node
            XmlRunSettingsUtilities.InsertDataCollectorsNode(runSettings.CreateNavigator(), settings);
        }
コード例 #21
0
        public void Prepare(Project testProject, ConfigurationSelector configuration, DataCollectorSettings coverageSettings)
        {
            var unitTestDll           = testProject.GetOutputFileName(configuration).ToString();
            var sourceRootTranslator  = new SourceRootTranslator(logger, fileSystem);
            var cecilSymbolHelper     = new CecilSymbolHelper();
            var instrumentationHelper = new InstrumentationHelper(new ProcessExitHandler(), new RetryHelper(), fileSystem, logger, sourceRootTranslator);
            var coverageParameters    = GetCoverageParameters(coverageSettings);

            var coverage = new CoverletCoverage(unitTestDll,
                                                coverageParameters,
                                                logger,
                                                instrumentationHelper,
                                                fileSystem,
                                                sourceRootTranslator,
                                                cecilSymbolHelper);

            coverage.PrepareModules();
            projectCoverageMap[new Tuple <Project, ConfigurationSelector>(testProject, configuration)] = coverage;
        }