public void Exe_PreProcFails() { // Arrange BootstrapperTestUtils.EnsureDefaultPropertiesFileDoesNotExist(); using (InitializeNonTeamBuildEnvironment(RootDir)) { MockProcessors(false, true); // Act TestLogger logger = CheckExecutionFails(AnalysisPhase.PreProcessing, true, "/install:true", // this argument should just pass through "/d:sonar.verbose=true", "/d:sonar.host.url=http://host:9", "/d:another.key=will be ignored"); // Assert logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); AssertPreProcessorArgs("/install:true", "/d:sonar.verbose=true", "/d:sonar.host.url=http://host:9", "/d:another.key=will be ignored"); AssertPostProcessorNotCalled(); } }
public void Exe_PreProc_VersionCheckSucceeds_PreProcSucceeds() { // Arrange BootstrapperTestUtils.EnsureDefaultPropertiesFileDoesNotExist(); string rootDir = TestUtils.CreateTestSpecificFolder(this.TestContext); using (InitializeNonTeamBuildEnvironment(rootDir)) { string binDir = CalculateBinDir(rootDir); MockBuildAgentUpdater mockUpdater = CreateValidUpdater(binDir, "http://anotherHost"); mockUpdater.Updating += (sender, args) => { AssertDirectoryExists(args.TargetDir); DummyExeHelper.CreateDummyPreProcessor(args.TargetDir, 0 /* pre-proc succeeds */); }; // Act TestLogger logger = CheckExecutionSucceeds(mockUpdater, "/d:sonar.host.url=http://anotherHost", "begin"); // Assert mockUpdater.AssertUpdateAttempted(); mockUpdater.AssertVersionChecked(); logger.AssertWarningsLogged(0); logger.AssertVerbosity(VerbosityCalculator.DefaultLoggingVerbosity); string logPath = DummyExeHelper.AssertDummyPreProcLogExists(binDir, this.TestContext); DummyExeHelper.AssertExpectedLogContents(logPath, "/d:sonar.host.url=http://anotherHost"); } }
public void Exe_PreProcSucceeds() { // Arrange BootstrapperTestUtils.EnsureDefaultPropertiesFileDoesNotExist(); using (InitializeNonTeamBuildEnvironment(RootDir)) { // Act TestLogger logger = CheckExecutionSucceeds(AnalysisPhase.PreProcessing, false, "/d:sonar.host.url=http://anotherHost"); // Assert logger.AssertWarningsLogged(0); logger.AssertVerbosity(VerbosityCalculator.DefaultLoggingVerbosity); AssertPreProcessorArgs("/d:sonar.host.url=http://anotherHost"); } }
private void AssertAnalysisConfig(string filePath, int noAnalyzers, TestLogger logger) { logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); AssertConfigFileExists(filePath); AnalysisConfig actualConfig = AnalysisConfig.Load(filePath); Assert.AreEqual("key", actualConfig.SonarProjectKey, "Unexpected project key"); Assert.AreEqual("name", actualConfig.SonarProjectName, "Unexpected project name"); Assert.AreEqual("1.0", actualConfig.SonarProjectVersion, "Unexpected project version"); Assert.IsNotNull(actualConfig.AnalyzersSettings, "Analyzer settings should not be null"); Assert.AreEqual(actualConfig.AnalyzersSettings.Count, noAnalyzers); AssertExpectedLocalSetting(SonarProperties.HostUrl, "http://host", actualConfig); AssertExpectedLocalSetting("cmd.line1", "cmdline.value.1", actualConfig); AssertExpectedServerSetting("server.key", "server value 1", actualConfig); }
public void Exe_PreProc_VersionCheckSucceeds_PreProcFails() { // Arrange BootstrapperTestUtils.EnsureDefaultPropertiesFileDoesNotExist(); string rootDir = TestUtils.CreateTestSpecificFolder(this.TestContext); using (InitializeNonTeamBuildEnvironment(rootDir)) { string binDir = CalculateBinDir(rootDir); MockBuildAgentUpdater mockUpdater = CreateValidUpdater(binDir, "http://host:9"); mockUpdater.Updating += (sender, args) => { AssertDirectoryExists(args.TargetDir); DummyExeHelper.CreateDummyPreProcessor(args.TargetDir, 1 /* pre-proc fails */); }; // Act TestLogger logger = CheckExecutionFails(mockUpdater, "begin", "/install:true", // this argument should just pass through "/d:sonar.verbose=true", "/d:sonar.host.url=http://host:9", "/d:another.key=will be ignored"); // Assert mockUpdater.AssertUpdateAttempted(); mockUpdater.AssertVersionChecked(); logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); // sonar.verbose=true was specified string logPath = DummyExeHelper.AssertDummyPreProcLogExists(binDir, this.TestContext); DummyExeHelper.AssertExpectedLogContents(logPath, "/install:true", "/d:sonar.verbose=true", "/d:sonar.host.url=http://host:9", "/d:another.key=will be ignored"); } }
private AnalysisConfig AssertAnalysisConfig(string filePath, int noAnalyzers, TestLogger logger) { logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); AssertConfigFileExists(filePath); var actualConfig = AnalysisConfig.Load(filePath); actualConfig.SonarProjectKey.Should().Be("key", "Unexpected project key"); actualConfig.SonarProjectName.Should().Be("name", "Unexpected project name"); actualConfig.SonarProjectVersion.Should().Be("1.0", "Unexpected project version"); actualConfig.AnalyzersSettings.Should().NotBeNull("Analyzer settings should not be null"); actualConfig.AnalyzersSettings.Should().HaveCount(noAnalyzers); AssertExpectedLocalSetting(SonarProperties.HostUrl, "http://host", actualConfig); AssertExpectedLocalSetting("cmd.line1", "cmdline.value.1", actualConfig); AssertExpectedServerSetting("server.key", "server value 1", actualConfig); return(actualConfig); }
public void PreProc_EndToEnd_SuccessCase() { // Checks end-to-end happy path for the pre-processor i.e. // * arguments are parsed // * targets are installed // * server properties are fetched // * rulesets are generated // * config file is created // Arrange string workingDir = TestUtils.CreateTestSpecificFolder(this.TestContext); TestLogger logger = new TestLogger(); // Configure the server MockSonarQubeServer mockServer = new MockSonarQubeServer(); ServerDataModel data = mockServer.Data; data.ServerProperties.Add("server.key", "server value 1"); data.InstalledPlugins.Add("csharp"); data.InstalledPlugins.Add("vbnet"); data.AddRepository("fxcop", "cs") .AddRule("cs.rule1", "cs.rule1.internal") .AddRule("cs.rule2", "cs.rule2.internal"); data.AddRepository("fxcop-vbnet", "vbnet") .AddRule("vb.rule1", "vb.rule1.internal") .AddRule("vb.rule2", "vb.rule2.internal"); data.AddQualityProfile("test.profile", "cs") .AddProject("key"); data.AddRuleToProfile("cs.rule1", "test.profile"); data.AddQualityProfile("test.profile", "vbnet") .AddProject("key"); data.AddRuleToProfile("vb.rule2", "test.profile"); MockRoslynAnalyzerProvider mockAnalyzerProvider = new MockRoslynAnalyzerProvider(); mockAnalyzerProvider.SettingsToReturn = new AnalyzerSettings(); mockAnalyzerProvider.SettingsToReturn.RuleSetFilePath = "c:\\xxx.ruleset"; MockTargetsInstaller mockTargetsInstaller = new MockTargetsInstaller(); MockObjectFactory mockFactory = new MockObjectFactory(mockServer, mockTargetsInstaller, mockAnalyzerProvider); string[] validArgs = new string[] { "/k:key", "/n:name", "/v:1.0", "/d:cmd.line1=cmdline.value.1", "/d:sonar.host.url=http://host", "/d:sonar.log.level=INFO|DEBUG" }; TeamBuildSettings settings; using (PreprocessTestUtils.CreateValidNonTeamBuildScope()) using (new WorkingDirectoryScope(workingDir)) { settings = TeamBuildSettings.GetSettingsFromEnvironment(new TestLogger()); Assert.IsNotNull(settings, "Test setup error: TFS environment variables have not been set correctly"); Assert.AreEqual(BuildEnvironment.NotTeamBuild, settings.BuildEnvironment, "Test setup error: build environment was not set correctly"); TeamBuildPreProcessor preProcessor = new TeamBuildPreProcessor(mockFactory, logger); // Act bool success = preProcessor.Execute(validArgs); Assert.IsTrue(success, "Expecting the pre-processing to complete successfully"); } // Assert AssertDirectoryExists(settings.AnalysisBaseDirectory); AssertDirectoryExists(settings.SonarConfigDirectory); AssertDirectoryExists(settings.SonarOutputDirectory); // The bootstrapper is responsible for creating the bin directory mockTargetsInstaller.AssertsTargetsCopied(); mockServer.AssertMethodCalled("GetProperties", 1); mockServer.AssertMethodCalled("GetInternalKeys", 2); // C# and VB logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); AssertConfigFileExists(settings.AnalysisConfigFilePath); AnalysisConfig actualConfig = AnalysisConfig.Load(settings.AnalysisConfigFilePath); Assert.AreEqual("key", actualConfig.SonarProjectKey, "Unexpected project key"); Assert.AreEqual("name", actualConfig.SonarProjectName, "Unexpected project name"); Assert.AreEqual("1.0", actualConfig.SonarProjectVersion, "Unexpected project version"); Assert.IsNotNull(actualConfig.AnalyzerSettings, "Analyzer settings should not be null"); Assert.AreEqual("c:\\xxx.ruleset", actualConfig.AnalyzerSettings.RuleSetFilePath, "Unexpected ruleset path"); AssertExpectedLocalSetting(SonarProperties.HostUrl, "http://host", actualConfig); AssertExpectedLocalSetting("cmd.line1", "cmdline.value.1", actualConfig); AssertExpectedServerSetting("server.key", "server value 1", actualConfig); string fxCopFilePath = AssertFileExists(settings.SonarConfigDirectory, TeamBuildPreProcessor.FxCopCSharpRuleset); PreProcessAsserts.AssertRuleSetContainsRules(fxCopFilePath, "cs.rule1"); fxCopFilePath = AssertFileExists(settings.SonarConfigDirectory, TeamBuildPreProcessor.FxCopVBNetRuleset); PreProcessAsserts.AssertRuleSetContainsRules(fxCopFilePath, "vb.rule2"); }
public void PreProc_EndToEnd_SuccessCase() { // Checks end-to-end happy path for the pre-processor i.e. // * arguments are parsed // * targets are installed // * server properties are fetched // * rulesets are generated // * config file is created // Arrange string workingDir = TestUtils.CreateTestSpecificFolder(this.TestContext); MockRulesetGenerator mockRulesetGenerator = new MockRulesetGenerator(); TestLogger logger = new TestLogger(); MockPropertiesFetcher mockPropertiesFetcher = new MockPropertiesFetcher(); mockPropertiesFetcher.PropertiesToReturn = new Dictionary <string, string>(); MockTargetsInstaller mockTargetsInstaller = new MockTargetsInstaller(); // The set of server properties to return mockPropertiesFetcher.PropertiesToReturn.Add("server.key", "server value 1"); string[] validArgs = new string[] { "/k:key", "/n:name", "/v:1.0", "/d:cmd.line1=cmdline.value.1", "/d:sonar.host.url=http://host", "/d:sonar.log.level=INFO|DEBUG" }; TeamBuildSettings settings; using (PreprocessTestUtils.CreateValidNonTeamBuildScope()) using (new WorkingDirectoryScope(workingDir)) { settings = TeamBuildSettings.GetSettingsFromEnvironment(new TestLogger()); Assert.IsNotNull(settings, "Test setup error: TFS environment variables have not been set correctly"); Assert.AreEqual(BuildEnvironment.NotTeamBuild, settings.BuildEnvironment, "Test setup error: build environment was not set correctly"); TeamBuildPreProcessor preProcessor = new TeamBuildPreProcessor(mockPropertiesFetcher, mockRulesetGenerator, mockTargetsInstaller); // Act bool success = preProcessor.Execute(validArgs, logger); Assert.IsTrue(success, "Expecting the pre-processing to complete successfully"); } // Assert AssertDirectoryExists(settings.AnalysisBaseDirectory); AssertDirectoryExists(settings.SonarConfigDirectory); AssertDirectoryExists(settings.SonarOutputDirectory); // The bootstrapper is responsible for creating the bin directory mockTargetsInstaller.AssertsTargetsCopied(); mockPropertiesFetcher.AssertFetchPropertiesCalled(); mockRulesetGenerator.AssertGenerateCalled(2); // C# and VB logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); logger.AssertVerbosity(LoggerVerbosity.Debug); AssertConfigFileExists(settings.AnalysisConfigFilePath); AnalysisConfig actualConfig = AnalysisConfig.Load(settings.AnalysisConfigFilePath); Assert.AreEqual("key", actualConfig.SonarProjectKey, "Unexpected project key"); Assert.AreEqual("name", actualConfig.SonarProjectName, "Unexpected project name"); Assert.AreEqual("1.0", actualConfig.SonarProjectVersion, "Unexpected project version"); AssertExpectedLocalSetting(SonarProperties.HostUrl, "http://host", actualConfig); AssertExpectedLocalSetting("cmd.line1", "cmdline.value.1", actualConfig); AssertExpectedServerSetting("server.key", "server value 1", actualConfig); }