Esempio n. 1
0
        public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings()
        {
            Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();
                Mock <IFileSystem> fileSystem        = new Mock <IFileSystem>();
                fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll");
                serviceCollection.AddTransient(_ => fileSystem.Object);

                serviceCollection.AddTransient <IRetryHelper, RetryHelper>();
                serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>();
                serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
                serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>();
                serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>()));
                return(serviceCollection);
            };

            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>()), Times.Once);
        }
        public void OnSessionEndShouldSendGetCoverageReportToTestPlatform()
        {
            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);

            string module = GetType().Assembly.Location;
            string pdb    = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb");

            var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));

            File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true);
            File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true);

            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                Path.Combine(directory.FullName, Path.GetFileName(module))
            });

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));
            _mockDataColectionEvents.Raise(x => x.SessionEnd   += null, new SessionEndEventArgs());

            _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Once);

            directory.Delete(true);
        }
Esempio n. 3
0
        public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount)
        {
            Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();
                Mock <IFileSystem> fileSystem        = new Mock <IFileSystem>();
                fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "Test");
                serviceCollection.AddTransient(_ => fileSystem.Object);

                serviceCollection.AddTransient <IRetryHelper, RetryHelper>();
                serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>();
                serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
                serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>();
                serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>()));
                serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>();
                return(serviceCollection);
            };

            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory);

            IList <IReporter>         reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList();
            Mock <DataCollectionSink> mockDataCollectionSink = new Mock <DataCollectionSink>();

            mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny <FileTransferInformation>())).Callback <FileTransferInformation>(fti =>
            {
                reporters.Remove(reporters.First(x =>
                                                 Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension))
                                 );
            });

            var doc     = new XmlDocument();
            var root    = doc.CreateElement("Configuration");
            var element = doc.CreateElement("Format");

            element.AppendChild(doc.CreateTextNode(formats));
            root.AppendChild(element);

            _configurationElement = root;

            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);

            var sessionStartProperties = new Dictionary <string, object> {
                { "TestSources", new List <string> {
                      "Test"
                  } }
            };

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));
            _mockDataColectionEvents.Raise(x => x.SessionEnd   += null, new SessionEndEventArgs());

            mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Exactly(sendReportsCount));
            Assert.Empty(reporters);
        }
Esempio n. 4
0
        public void OnSessionStartShouldPrepareModulesForCoverage()
        {
            Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();
                Mock <IFileSystem> fileSystem        = new Mock <IFileSystem>();
                fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll");
                serviceCollection.AddTransient(_ => fileSystem.Object);

                serviceCollection.AddTransient <IRetryHelper, RetryHelper>();
                serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>();
                serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
                serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>();
                serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>()));
                serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>();
                return(serviceCollection);
            };

            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                null,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();
            IInstrumentationHelper       instrumentationHelper  =
                new InstrumentationHelper(new Mock <IProcessExitHandler>().Object,
                                          new Mock <IRetryHelper>().Object,
                                          new Mock <IFileSystem>().Object,
                                          new Mock <ILogger>().Object,
                                          new Mock <ISourceRootTranslator>().Object);

            CoverageParameters parameters = new CoverageParameters
            {
                IncludeFilters      = null,
                IncludeDirectories  = null,
                ExcludedSourceFiles = null,
                ExcludeAttributes   = null,
                IncludeTestAssembly = true,
                SingleHit           = true,
                MergeWith           = "abc.json",
                UseSourceLink       = true
            };

            Coverage coverage = new Coverage("abc.dll", parameters, It.IsAny <ILogger>(), instrumentationHelper, new Mock <IFileSystem>().Object, new Mock <ISourceRootTranslator>().Object, new Mock <ICecilSymbolHelper>().Object);

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });
            _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny <CoverletSettings>(), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>(), It.IsAny <ICecilSymbolHelper>())).Returns(coverage);

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => y.TestModule.Contains("abc.dll")), It.IsAny <ILogger>(), It.IsAny <IInstrumentationHelper>(), It.IsAny <IFileSystem>(), It.IsAny <ISourceRootTranslator>(), It.IsAny <ICecilSymbolHelper>()), Times.Once);
            _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny <Coverage>()), Times.Once);
        }
Esempio n. 5
0
        public void OnSessionEndShouldSendGetCoverageReportToTestPlatform()
        {
            Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();
                serviceCollection.AddTransient <IFileSystem, FileSystem>();
                serviceCollection.AddTransient <IRetryHelper, RetryHelper>();
                serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>();
                serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
                serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>();
                serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>()));
                serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>();
                return(serviceCollection);
            };

            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object, serviceCollectionFactory);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);

            string module = GetType().Assembly.Location;
            string pdb    = Path.Combine(Path.GetDirectoryName(module), Path.GetFileNameWithoutExtension(module) + ".pdb");

            var directory = Directory.CreateDirectory(Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()));

            File.Copy(module, Path.Combine(directory.FullName, Path.GetFileName(module)), true);
            File.Copy(pdb, Path.Combine(directory.FullName, Path.GetFileName(pdb)), true);

            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                Path.Combine(directory.FullName, Path.GetFileName(module))
            });

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));
            _mockDataColectionEvents.Raise(x => x.SessionEnd   += null, new SessionEndEventArgs());

            _mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Once);

            directory.Delete(true);
        }
        public void OnSessionStartShouldInitializeCoverageWithCorrectCoverletSettings()
        {
            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => string.Equals(y.TestModule, "abc.dll")), It.IsAny <ILogger>()), Times.Once);
        }
        public void OnSessionEndShouldSendCoverageReportsForMultipleFormatsToTestPlatform(string formats, int sendReportsCount)
        {
            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), new CoverageWrapper(), _mockCountDownEventFactory.Object);

            IList <IReporter>         reporters = formats.Split(',').Select(f => new ReporterFactory(f).CreateReporter()).Where(x => x != null).ToList();
            Mock <DataCollectionSink> mockDataCollectionSink = new Mock <DataCollectionSink>();

            mockDataCollectionSink.Setup(m => m.SendFileAsync(It.IsAny <FileTransferInformation>())).Callback <FileTransferInformation>(fti =>
            {
                reporters.Remove(reporters.First(x =>
                                                 Path.GetFileName(fti.Path) == Path.ChangeExtension(CoverletConstants.DefaultFileName, x.Extension))
                                 );
            });

            var doc     = new XmlDocument();
            var root    = doc.CreateElement("Configuration");
            var element = doc.CreateElement("Format");

            element.AppendChild(doc.CreateTextNode(formats));
            root.AppendChild(element);

            _configurationElement = root;

            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);

            var sessionStartProperties = new Dictionary <string, object> {
                { "TestSources", new List <string> {
                      "Test"
                  } }
            };

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));
            _mockDataColectionEvents.Raise(x => x.SessionEnd   += null, new SessionEndEventArgs());

            mockDataCollectionSink.Verify(x => x.SendFileAsync(It.IsAny <FileTransferInformation>()), Times.Exactly(sendReportsCount));
            Assert.Empty(reporters);
        }
        public void OnSessionStartShouldPrepareModulesForCoverage()
        {
            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                null,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();
            Coverage coverage = new Coverage("abc.dll", null, null, null, null, null, true, true, "abc.json", true, It.IsAny <ILogger>(), DependencyInjection.Current.GetService <IInstrumentationHelper>(), DependencyInjection.Current.GetService <IFileSystem>());

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });
            _mockCoverageWrapper.Setup(x => x.CreateCoverage(It.IsAny <CoverletSettings>(), It.IsAny <ILogger>())).Returns(coverage);

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockCoverageWrapper.Verify(x => x.CreateCoverage(It.Is <CoverletSettings>(y => y.TestModule.Contains("abc.dll")), It.IsAny <ILogger>()), Times.Once);
            _mockCoverageWrapper.Verify(x => x.PrepareModules(It.IsAny <Coverage>()), Times.Once);
        }
        public void OnSessionStartShouldLogWarningIfInstrumentationFailed()
        {
            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });

            _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException());

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext,
                                                 It.Is <string>(y => y.Contains("CoverletDataCollectorException"))));
        }
        public void OnSessionStartShouldLogWarningIfInstrumentationFailed()
        {
            coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), this.mockCoverageWrapper.Object);
            coverletCoverageDataCollector.Initialize(
                this.configurationElement,
                this.mockDataColectionEvents.Object,
                this.mockDataCollectionSink.Object,
                this.mockLogger.Object,
                this.context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });

            this.mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException());

            this.mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            this.mockLogger.Verify(x => x.LogWarning(this.dataCollectionContext,
                                                     "Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.Utilities.CoverletDataCollectorException: CoverletCoverageDataCollector: Failed to instrument modules ---> System.IO.FileNotFoundException: Unable to find the specified file.\r\n   at Moq.MethodCall.ThrowExceptionResponse.RespondTo(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\MethodCall.cs:line 465\r\n   at Moq.MethodCall.Execute(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\MethodCall.cs:line 109\r\n   at Moq.FindAndExecuteMatchingSetup.Handle(Invocation invocation, Mock mock) in C:\\projects\\moq4\\src\\Moq\\Interception\\InterceptionAspects.cs:line 137\r\n   at Moq.Mock.Moq.IInterceptor.Intercept(Invocation invocation) in C:\\projects\\moq4\\src\\Moq\\Interception\\Mock.cs:line 20\r\n   at Castle.DynamicProxy.AbstractInvocation.Proceed()\r\n   at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverageManager.InstrumentModules() in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverageManager.cs:line 51\r\n   --- End of inner exception stack trace ---\r\n   at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverageManager.InstrumentModules() in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverageManager.cs:line 56\r\n   at Microsoft.TestPlatform.Extensions.CoverletCoverageDataCollector.DataCollector.CoverletCoverageCollector.OnSessionStart(Object sender, SessionStartEventArgs sessionStartEventArgs) in E:\\CodeBase\\CoverletDataCollector\\src\\DataCollector\\CoverletCoverageDataCollector.cs:line 115"));
        }
Esempio n. 11
0
        public void OnSessionStartShouldLogWarningIfInstrumentationFailed()
        {
            Func <TestPlatformEqtTrace, TestPlatformLogger, string, IServiceCollection> serviceCollectionFactory = (TestPlatformEqtTrace eqtTrace, TestPlatformLogger logger, string testModule) =>
            {
                IServiceCollection serviceCollection = new ServiceCollection();
                Mock <IFileSystem> fileSystem        = new Mock <IFileSystem>();
                fileSystem.Setup(f => f.Exists(It.IsAny <string>())).Returns((string testLib) => testLib == "abc.dll");
                serviceCollection.AddTransient(_ => fileSystem.Object);

                serviceCollection.AddTransient <IRetryHelper, RetryHelper>();
                serviceCollection.AddTransient <IProcessExitHandler, ProcessExitHandler>();
                serviceCollection.AddTransient <ILogger, CoverletLogger>(_ => new CoverletLogger(eqtTrace, logger));
                serviceCollection.AddSingleton <IInstrumentationHelper, InstrumentationHelper>();
                serviceCollection.AddSingleton <ISourceRootTranslator, SourceRootTranslator>(serviceProvider => new SourceRootTranslator(testModule, serviceProvider.GetRequiredService <ILogger>(), serviceProvider.GetRequiredService <IFileSystem>()));
                serviceCollection.AddSingleton <ICecilSymbolHelper, CecilSymbolHelper>();
                return(serviceCollection);
            };

            _coverletCoverageDataCollector = new CoverletCoverageCollector(new TestPlatformEqtTrace(), _mockCoverageWrapper.Object, _mockCountDownEventFactory.Object, serviceCollectionFactory);
            _coverletCoverageDataCollector.Initialize(
                _configurationElement,
                _mockDataColectionEvents.Object,
                _mockDataCollectionSink.Object,
                _mockLogger.Object,
                _context);
            IDictionary <string, object> sessionStartProperties = new Dictionary <string, object>();

            sessionStartProperties.Add("TestSources", new List <string> {
                "abc.dll"
            });

            _mockCoverageWrapper.Setup(x => x.PrepareModules(It.IsAny <Coverage>())).Throws(new FileNotFoundException());

            _mockDataColectionEvents.Raise(x => x.SessionStart += null, new SessionStartEventArgs(sessionStartProperties));

            _mockLogger.Verify(x => x.LogWarning(_dataCollectionContext,
                                                 It.Is <string>(y => y.Contains("CoverletDataCollectorException"))));
        }