public void RoslynPlugin_GenerateForDependencyAnalyzers_Succeeds() { // Arrange TestLogger logger = new TestLogger(); string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); string dummyContentFile = TestUtils.CreateTextFile("dummy.txt", outputDir, "non-analyzer content file"); // Create a valid analyzer package RoslynAnalyzer11.CSharpAnalyzer analyzer = new RoslynAnalyzer11.CSharpAnalyzer(); string fakeRemoteNuGetDir = TestUtils.CreateTestDirectory(this.TestContext, ".fakeRemoteNuGet"); IPackageManager fakeRemotePkgMgr = CreatePackageManager(fakeRemoteNuGetDir); IPackage child1 = AddPackage(fakeRemotePkgMgr, "Analyzer.Child1", "1.1.0", analyzer.GetType().Assembly.Location); IPackage child2 = AddPackage(fakeRemotePkgMgr, "Analyzer.Child2", "1.2.0", analyzer.GetType().Assembly.Location); IPackage targetPkg = AddPackage(fakeRemotePkgMgr, "Empty.Parent", "1.0.0", dummyContentFile, child1, child2); string localPackageDestination = TestUtils.CreateTestDirectory(this.TestContext, ".localpackages"); // Act NuGetPackageHandler nuGetHandler = new NuGetPackageHandler(fakeRemotePkgMgr.LocalRepository, localPackageDestination, logger); AnalyzerPluginGenerator apg = new AnalyzerPluginGenerator(nuGetHandler, logger); ProcessedArgs args = new ProcessedArgs(targetPkg.Id, targetPkg.Version, "cs", null, false, true /* generate plugins for dependencies with analyzers*/, outputDir); bool result = apg.Generate(args); // Assert Assert.IsTrue(result); // Expecting one plugin per dependency with analyzers CheckJarGeneratedForPackage(outputDir, analyzer, child1); CheckJarGeneratedForPackage(outputDir, analyzer, child2); AssertJarsGenerated(outputDir, 2); }
private static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.Program_AssemblyDescription, logger); Utilities.LogAssemblyVersion(typeof(DiagnosticAnalyzer).Assembly, UIResources.Program_SupportedRoslynVersion, logger); logger.LogInfo(UIResources.Program_SupportedSonarQubeVersions); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { string localNuGetCache = Utilities.CreateTempDirectory(".nuget"); var defaultNuGetDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); var repo = NuGetRepositoryFactory.CreateRepositoryForArguments(logger, processedArgs, defaultNuGetDir); var packageHandler = new NuGetPackageHandler(repo, localNuGetCache, logger); AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(packageHandler, logger); success = generator.Generate(processedArgs); } return(success ? SUCCESS_CODE : ERROR_CODE); }
static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Common.Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.AssemblyDescription, logger); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(logger); success = generator.Generate(processedArgs.AnalyzerRef, processedArgs.SqaleFilePath); } return success ? SUCCESS_CODE : ERROR_CODE; }
public void RoslynPlugin_GenerateForValidAnalyzer_Succeeds() { // Arrange TestLogger logger = new TestLogger(); string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); PluginInspector inspector = CreatePluginInspector(logger); // Create a valid analyzer package ExampleAnalyzer1.CSharpAnalyzer analyzer = new ExampleAnalyzer1.CSharpAnalyzer(); string packageId = "analyzer1.id1"; string localNuGetDir = TestUtils.CreateTestDirectory(this.TestContext, ".localNuGet"); IPackageManager localNuGetStore = CreatePackageManager(localNuGetDir); AddPackage(localNuGetStore, packageId, "1.0", analyzer.GetType().Assembly.Location); // Act NuGetPackageHandler nuGetHandler = new NuGetPackageHandler(localNuGetDir, logger); AnalyzerPluginGenerator apg = new AnalyzerPluginGenerator(nuGetHandler, logger); bool result = apg.Generate(new Roslyn.CommandLine.NuGetReference(packageId, new SemanticVersion("1.0")), "cs", null, outputDir); // Assert Assert.IsTrue(result); string jarFilePath = AssertPluginJarExists(outputDir); JarInfo jarInfo = inspector.GetPluginDescription(jarFilePath); if (jarInfo != null) { this.TestContext.AddResultFile(jarInfo.FileName); } Assert.IsNotNull(jarInfo, "Failed to process the generated jar successfully"); AssertPropertyDefinitionExists(packageId + "_sarif.AnalyzerId", jarInfo); AssertPropertyDefinitionExists(packageId + "_sarif.RuleNamespace", jarInfo); AssertPropertyDefinitionExists(packageId + "_sarif.nuget.packageId", jarInfo); AssertPropertyDefinitionExists(packageId + "_sarif.nuget.packageVersion", jarInfo); JarInfo.RulesDefinition rulesDefn = AssertRulesDefinitionExists(jarInfo); AssertRepositoryIsValid(rulesDefn.Repository); AssertExpectedRulesExist(analyzer, rulesDefn.Repository); Assert.AreEqual(5, jarInfo.Extensions.Count, "Unexpected number of extensions"); }
static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Common.Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.AssemblyDescription, logger); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { NuGetPackageHandler packageHandler = new NuGetPackageHandler(NuGetPackageSource, logger); AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(packageHandler, logger); success = generator.Generate(processedArgs.AnalyzerRef, processedArgs.Language, processedArgs.SqaleFilePath, System.IO.Directory.GetCurrentDirectory()); } return success ? SUCCESS_CODE : ERROR_CODE; }
static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Common.Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.AssemblyDescription, logger); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { NuGetPackageHandler packageHandler = new NuGetPackageHandler(NuGetPackageSource, logger); AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(packageHandler, logger); success = generator.Generate(processedArgs.AnalyzerRef, processedArgs.Language, processedArgs.SqaleFilePath); } return(success ? SUCCESS_CODE : ERROR_CODE); }
static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.AssemblyDescription, logger); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { string exeDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); ISettings nuGetSettings = NuGetRepositoryFactory.GetSettingsFromConfigFiles(exeDir); IPackageRepository repo = NuGetRepositoryFactory.CreateRepository(nuGetSettings, logger); string localNuGetCache = Utilities.CreateTempDirectory(".nuget"); NuGetPackageHandler packageHandler = new NuGetPackageHandler(repo, localNuGetCache, logger); AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(packageHandler, logger); success = generator.Generate(processedArgs); } return success ? SUCCESS_CODE : ERROR_CODE; }
static int Main(string[] args) { ConsoleLogger logger = new ConsoleLogger(); Utilities.LogAssemblyVersion(typeof(Program).Assembly, UIResources.AssemblyDescription, logger); ProcessedArgs processedArgs = ArgumentProcessor.TryProcessArguments(args, logger); bool success = false; if (processedArgs != null) { string exeDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); ISettings nuGetSettings = NuGetRepositoryFactory.GetSettingsFromConfigFiles(exeDir); IPackageRepository repo = NuGetRepositoryFactory.CreateRepository(nuGetSettings, logger); string localNuGetCache = Utilities.CreateTempDirectory(".nuget"); NuGetPackageHandler packageHandler = new NuGetPackageHandler(repo, localNuGetCache, logger); AnalyzerPluginGenerator generator = new AnalyzerPluginGenerator(packageHandler, logger); success = generator.Generate(processedArgs); } return(success ? SUCCESS_CODE : ERROR_CODE); }
public void RoslynPlugin_GenerateForValidAnalyzer_Succeeds() { // Arrange TestLogger logger = new TestLogger(); string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); // Create a valid analyzer package RoslynAnalyzer11.CSharpAnalyzer analyzer = new RoslynAnalyzer11.CSharpAnalyzer(); string packageId = "Analyzer1.Pkgid1"; // package id is not all lowercase string fakeRemoteNuGetDir = TestUtils.CreateTestDirectory(this.TestContext, ".fakeRemoteNuGet"); IPackageManager fakeRemotePkgMgr = CreatePackageManager(fakeRemoteNuGetDir); IPackage analyzerPkg = AddPackage(fakeRemotePkgMgr, packageId, "1.0.2", analyzer.GetType().Assembly.Location); string localPackageDestination = TestUtils.CreateTestDirectory(this.TestContext, ".localpackages"); // Act NuGetPackageHandler nuGetHandler = new NuGetPackageHandler(fakeRemotePkgMgr.LocalRepository, localPackageDestination, logger); AnalyzerPluginGenerator apg = new AnalyzerPluginGenerator(nuGetHandler, logger); ProcessedArgs args = new ProcessedArgs(packageId, new SemanticVersion("1.0.2"), "cs", null, false, false, outputDir); bool result = apg.Generate(args); // Assert Assert.IsTrue(result); // Expecting one plugin per dependency with analyzers CheckJarGeneratedForPackage(outputDir, analyzer, analyzerPkg); AssertJarsGenerated(outputDir, 1); }
public void RoslynPlugin_GenerateForValidAnalyzer_Succeeds() { // Arrange TestLogger logger = new TestLogger(); string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); // Create a valid analyzer package RoslynAnalyzer11.CSharpAnalyzer analyzer = new RoslynAnalyzer11.CSharpAnalyzer(); string packageId = "Analyzer1.Pkgid1"; // package id is not all lowercase string fakeRemoteNuGetDir = TestUtils.CreateTestDirectory(this.TestContext, ".fakeRemoteNuGet"); IPackageManager fakeRemotePkgMgr = CreatePackageManager(fakeRemoteNuGetDir); IPackage analyzerPkg = AddPackage(fakeRemotePkgMgr, packageId, "1.0.2", analyzer.GetType().Assembly.Location); string localPackageDestination = TestUtils.CreateTestDirectory(this.TestContext, ".localpackages"); // Act NuGetPackageHandler nuGetHandler = new NuGetPackageHandler(fakeRemotePkgMgr.LocalRepository, localPackageDestination, logger); AnalyzerPluginGenerator apg = new AnalyzerPluginGenerator(nuGetHandler, logger); ProcessedArgs args = new ProcessedArgs(packageId, new SemanticVersion("1.0.2"), "cs", null, false, outputDir); bool result = apg.Generate(args); // Assert Assert.IsTrue(result); string jarFilePath = AssertPluginJarExists(outputDir); // Check the content of the files embedded in the jar ZipFileChecker jarChecker = new ZipFileChecker(this.TestContext, jarFilePath); // Check the contents of the embedded config file string embeddedConfigFile = jarChecker.AssertFileExists("org\\sonar\\plugins\\roslynsdk\\configuration.xml"); RoslynSdkConfiguration config = RoslynSdkConfiguration.Load(embeddedConfigFile); // Check the config settings Assert.AreEqual("analyzer1pkgid1", config.PluginKeyDifferentiator, "Unexpected repository differentiator"); Assert.AreEqual("roslyn.analyzer1.pkgid1.cs", config.RepositoryKey, "Unexpected repository key"); Assert.AreEqual("cs", config.RepositoryLanguage, "Unexpected language"); Assert.AreEqual("dummy title", config.RepositoryName, "Unexpected repository name"); // Check for the expected property values required by the C# plugin // Property name prefixes should be lower case; the case of the value should be the same as the package id AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.analyzerId", "Analyzer1.Pkgid1", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.ruleNamespace", "Analyzer1.Pkgid1", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.nuget.packageId", "Analyzer1.Pkgid1", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.nuget.packageVersion", "1.0.2", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.staticResourceName", "Analyzer1.Pkgid1.1.0.2.zip", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.pluginKey", "analyzer1pkgid1", config); AssertExpectedPropertyDefinitionValue("analyzer1.pkgid1.cs.pluginVersion", "1.0.2", config); // Check the contents of the manifest string actualManifestFilePath = jarChecker.AssertFileExists("META-INF\\MANIFEST.MF"); string[] actualManifest = File.ReadAllLines(actualManifestFilePath); AssertExpectedManifestValue(WellKnownPluginProperties.Key, "analyzer1pkgid1", actualManifest); AssertExpectedManifestValue("Plugin-Key", "analyzer1pkgid1", actualManifest); // plugin-key should be lowercase and alphanumeric AssertPackagePropertiesInManifest(analyzerPkg, actualManifest); // Check the rules string actualRuleFilePath = jarChecker.AssertFileExists("." + config.RulesXmlResourcePath); AssertExpectedRulesExist(analyzer, actualRuleFilePath); // Now create another checker to check the contents of the zip file (strict check this time) CheckEmbeddedAnalyzerPayload(jarChecker, "static\\analyzer1.pkgid1.1.0.2.zip", /* zip file contents */ "analyzers\\RoslynAnalyzer11.dll"); }