public async Task TestFilePublisherLogPlugin_DisableIfMavenPresent()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var plugin            = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);

            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") }
            });

            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("ac4ee482-65da-4485-a532-7b085873e532")
                }
            });

            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
        }
        public async Task TestFilePublisherLogPlugin_DisableForNonResolvableSearchFolders()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var plugin            = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);

            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") },
                { "build.repository.provider", new VariableValue("GitHub") },
                { "build.buildId", new VariableValue("1") },
                { "agent.testfilepublisher.pattern", new VariableValue("test-*.xml") },
                { "agent.testfilepublisher.searchfolders", new VariableValue("agent.tempdirectory") }
            });
            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("1B0F01ED-7DDE-43FF-9CBB-E48954DAF9B1")
                }
            });

            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
        }
        public async Task TestFilePublisherLogPlugin_DisableForInvalidBuildContext()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var plugin            = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);

            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") }
            });
            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("1B0F01ED-7DDE-43FF-9CBB-E48954DAF9B1")
                }
            });

            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
        }
        public async Task TestFilePublisherLogPlugin_DisableIfOnPremPipeline()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var plugin            = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);

            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("OnPrem") }
            });

            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
        }
        public async Task TestFilePublisherLogPlugin_DisableWhenServerTypeNotSet()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var plugin            = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);

            telemetry.Setup(x => x.PublishCumulativeTelemetryAsync()).Returns(Task.FromResult(TaskResult.Succeeded));

            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.servertype", null }
            });

            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
        }
        public async Task TestFilePublisherLogPlugin_EnableForBuildPipeline()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var vssConnection     = new Mock <VssConnection>(new Uri("http://fake"), new VssCredentials());
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();

            telemetry.Setup(x => x.PublishCumulativeTelemetryAsync()).Returns(Task.FromResult(TaskResult.Succeeded));
            telemetry.Setup(x => x.PublishTelemetryAsync(It.IsAny <string>(), It.IsAny <Dictionary <string, Object> >())).Callback <string, Dictionary <string, Object> >((feature, props) => TelemetryPropsUtil.AssertPipelineData(props)).Returns(Task.FromResult(TaskResult.Succeeded));

            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("1B0F01ED-7DDE-43FF-9CBB-E48954DAF9B1")
                }
            });

            Dictionary <string, VariableValue> agentContextVariables = new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") },
                { "build.repository.provider", new VariableValue("GitHub") },
                { "build.buildId", new VariableValue("1") },
                { "agent.tempdirectory", new VariableValue("/tmp") },
                { "agent.testfilepublisher.pattern", new VariableValue("test-*.xml") },
                { "agent.testfilepublisher.searchfolders", new VariableValue("agent.tempdirectory") }
            };

            TelemetryPropsUtil.AddPipelineDataIntoAgentContext(agentContextVariables);
            agentContext.Setup(x => x.VssConnection).Returns(vssConnection.Object);
            agentContext.Setup(x => x.Variables).Returns(agentContextVariables);
            testFilePublisher.Setup(x => x.InitializeAsync()).Returns(Task.CompletedTask);

            var plugin = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);
            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == true);
        }
        public async Task TestFilePublisherLogPlugin_ValidateFoldersAreResolved()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var vssConnection     = new Mock <VssConnection>(new Uri("http://fake"), new VssCredentials());
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var logger            = new Mock <ITraceLogger>();
            var telemetry         = new Mock <ITelemetryDataCollector>();

            telemetry.Setup(x => x.PublishCumulativeTelemetryAsync()).Returns(Task.FromResult(TaskResult.Succeeded));

            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("1B0F01ED-7DDE-43FF-9CBB-E48954DAF9B1")
                }
            });

            agentContext.Setup(x => x.VssConnection).Returns(vssConnection.Object);
            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") },
                { "build.repository.provider", new VariableValue("GitHub") },
                { "build.buildId", new VariableValue("1") },
                { "agent.tempdirectory", new VariableValue("/tmp") },
                { "system.defaultworkingdirectory", new VariableValue("/def") },
                { "agent.testfilepublisher.pattern", new VariableValue("test-*.xml") },
                { "agent.testfilepublisher.searchfolders", new VariableValue("agent.tempdirectory,system.defaultworkingdirectory") }
            });
            testFilePublisher.Setup(x => x.InitializeAsync()).Returns(Task.CompletedTask);

            var plugin = new TestFilePublisherLogPlugin(logger.Object, telemetry.Object, testFilePublisher.Object);
            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == true);
            Assert.True(plugin.PipelineConfig.SearchFolders.Count == 2);
            Assert.True(plugin.PipelineConfig.SearchFolders[0].Equals("/tmp") && plugin.PipelineConfig.SearchFolders[1].Equals("/def"));
        }
        public async Task TestFilePublisherLogPlugin_DisableIfExceptionThrown()
        {
            var agentContext      = new Mock <IAgentLogPluginContext>();
            var vssConnection     = new Mock <VssConnection>(new Uri("http://fake"), new VssCredentials());
            var testFilePublisher = new Mock <ITestFilePublisher>();
            var telemetry         = new Mock <ITelemetryDataCollector>();

            telemetry.Setup(x => x.PublishCumulativeTelemetryAsync()).Returns(Task.FromResult(TaskResult.Succeeded));

            agentContext.Setup(x => x.VssConnection).Returns(vssConnection.Object);
            agentContext.Setup(x => x.Steps).Returns(new List <TaskStepDefinitionReference>()
            {
                new TaskStepDefinitionReference()
                {
                    Id = new Guid("1B0F01ED-7DDE-43FF-9CBB-E48954DAF9B1")
                }
            });
            agentContext.Setup(x => x.Variables).Returns(new Dictionary <string, VariableValue>()
            {
                { "system.hosttype", new VariableValue("build") },
                { "system.servertype", new VariableValue("Hosted") },
                { "build.repository.provider", new VariableValue("GitHub") },
                { "build.buildId", new VariableValue("1") },
                { "agent.tempdirectory", new VariableValue("/tmp") },
                { "agent.testfilepublisher.pattern", new VariableValue("test-*.xml") },
                { "agent.testfilepublisher.searchfolders", new VariableValue("agent.tempdirectory") }
            });

            testFilePublisher.Setup(x => x.InitializeAsync()).Throws(new Exception("some exception"));

            var plugin = new TestFilePublisherLogPlugin(null, telemetry.Object, testFilePublisher.Object);
            var result = await plugin.InitializeAsync(agentContext.Object);

            Assert.True(result == false);
            agentContext.Verify(x => x.Output(It.Is <string>(msg => msg.Contains("Unable to initialize TestFilePublisher"))), Times.Once);
        }