public void Generate_LicenseAcceptanceNotRequired_Succeeds() { // Arrange string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); // Multi-level dependencies: no package requires license acceptence IPackage grandchild = CreatePackageWithAnalyzer(remoteRepoBuilder, "grandchild.id", "1.2", License.NotRequired /* no dependencies */); IPackage child = CreatePackageWithAnalyzer(remoteRepoBuilder, "child.id", "1.1", License.NotRequired, grandchild); CreatePackageWithAnalyzer(remoteRepoBuilder, "parent.id", "1.0", License.NotRequired, child); TestLogger logger = new TestLogger(); AnalyzerPluginGenerator apg = CreateTestSubjectWithFakeRemoteRepo(remoteRepoBuilder, logger); // 1. Acceptance not required -> succeeds if accept = false ProcessedArgs args = CreateArgs("parent.id", "1.0", "cs", null, false /* accept licenses */ , outputDir); bool result = apg.Generate(args); Assert.IsTrue(result, "Generator should succeed if there are no licenses to accept"); logger.AssertErrorsLogged(0); logger.AssertWarningNotLogged("parent.id"); // not expecting warnings about packages that don't require acceptance logger.AssertWarningNotLogged("child.id"); logger.AssertWarningNotLogged("grandchild.id"); // 2. Acceptance not required -> succeeds if accept = true args = CreateArgs("parent.id", "1.0", "cs", null, true /* accept licenses */ , outputDir); result = apg.Generate(args); Assert.IsTrue(result, "Generator should succeed if there are no licenses to accept"); logger.AssertErrorsLogged(0); logger.AssertWarningNotLogged("parent.id"); // not expecting warnings about packages that don't require acceptance logger.AssertWarningNotLogged("child.id"); logger.AssertWarningNotLogged("grandchild.id"); }
public void RepoFactory_MultipleEnabledSources_RepoCreated() { // Arrange TestLogger logger = new TestLogger(); // Create a valid config settings file that specifies the package sources to use string configXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <packageSources> <add key=""local1_inactive"" value=""c:\inactiveCache\should.be.ignored"" /> <add key=""local2_active"" value=""d:\active_cache"" /> <add key=""local3_active"" value=""c:\another\active\cache"" /> </packageSources> <disabledPackageSources> <add key=""local1_inactive"" value=""true"" /> </disabledPackageSources> </configuration>"; Settings settings = CreateSettingsFromXml(configXml); // Act IPackageRepository actualRepo = NuGetRepositoryFactory.CreateRepository(settings, logger); // Assert Assert.IsInstanceOfType(actualRepo, typeof(AggregateRepository)); AggregateRepository actualAggregateRepo = (AggregateRepository)actualRepo; AssertExpectedPackageSources(actualAggregateRepo, "d:\\active_cache", "c:\\another\\active\\cache"); logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); }
public void RepoFactory_FailingRepo_ErrorLoggedAndSuppressed() { // Arrange TestLogger logger = new TestLogger(); string configXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <packageSources> <add key=""remote_bad"" value=""http://bad.remote.unreachable.repo"" /> </packageSources> </configuration>"; Settings settings = CreateSettingsFromXml(configXml); // Act IPackageRepository actualRepo = NuGetRepositoryFactory.CreateRepository(settings, logger); IPackage locatedPackage = actualRepo.FindPackage("dummy.package.id"); // trying to use the bad repo should fail // Assert Assert.IsNull(locatedPackage, "Should have failed to locate a package"); logger.AssertSingleWarningExists(NuGetLoggerAdapter.LogMessagePrefix, "http://bad.remote.unreachable.repo"); logger.AssertWarningsLogged(1); logger.AssertErrorsLogged(0); }
public void Generate_LicenseAcceptanceRequiredByMainPackage() { // Arrange string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); // Parent and child: only parent requires license IPackage child = CreatePackageWithAnalyzer(remoteRepoBuilder, "child.id", "1.1", License.NotRequired); CreatePackageWithAnalyzer(remoteRepoBuilder, "parent.requiredAccept.id", "1.0", License.Required, child); TestLogger logger = new TestLogger(); AnalyzerPluginGenerator apg = CreateTestSubjectWithFakeRemoteRepo(remoteRepoBuilder, logger); // 1. User does not accept -> fails with error ProcessedArgs args = CreateArgs("parent.requiredAccept.id", "1.0", "cs", null, false /* accept licenses */ , outputDir); bool result = apg.Generate(args); Assert.IsFalse(result, "Generator should fail because license has not been accepted"); logger.AssertSingleErrorExists("parent.requiredAccept.id", "1.0"); // error listing the main package logger.AssertSingleWarningExists("parent.requiredAccept.id", "1.0"); // warning for each licensed package logger.AssertWarningsLogged(1); // 2. User accepts -> succeeds with warnings logger.Reset(); args = CreateArgs("parent.requiredAccept.id", "1.0", "cs", null, true /* accept licenses */ , outputDir); result = apg.Generate(args); Assert.IsTrue(result, "Generator should succeed if licenses are accepted"); logger.AssertSingleWarningExists(UIResources.APG_NGAcceptedPackageLicenses); // warning that licenses accepted logger.AssertSingleWarningExists("parent.requiredAccept.id", "1.0"); // warning for each licensed package logger.AssertWarningsLogged(2); logger.AssertErrorsLogged(0); }
private static void AssertArgumentsProcessed(ProcessedArgs actualArgs, TestLogger logger, string expectedId, string expectedVersion, string expectedSqale, bool expectedAcceptLicenses) { Assert.IsNotNull(actualArgs, "Expecting the arguments to have been processed successfully"); Assert.AreEqual(actualArgs.PackageId, expectedId, "Unexpected package id returned"); if (expectedVersion == null) { Assert.IsNull(actualArgs.PackageVersion, "Expecting the version to be null"); } else { Assert.IsNotNull(actualArgs.PackageVersion, "Not expecting the version to be null"); Assert.AreEqual(expectedVersion, actualArgs.PackageVersion.ToString()); } Assert.AreEqual(expectedSqale, actualArgs.SqaleFilePath, "Unexpected sqale file path"); if (expectedSqale != null) { Assert.IsTrue(File.Exists(expectedSqale), "Specified sqale file should exist: {0}", expectedSqale); } Assert.AreEqual(expectedAcceptLicenses, actualArgs.AcceptLicenses, "Unexpected value for AcceptLicenses"); logger.AssertErrorsLogged(0); }
public void Generate_LicenseAcceptanceNotRequestedIfNoAnalysers() { // No point in asking the user to accept licenses for packages that don't contain analyzers // Arrange string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); string dummyContentFile = TestUtils.CreateTextFile("dummy.txt", outputDir, "non-analyzer content file"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); // Parent only: requires license remoteRepoBuilder.CreatePackage("non.analyzer.requireAccept.id", "1.0", dummyContentFile, License.Required); TestLogger logger = new TestLogger(); AnalyzerPluginGenerator apg = CreateTestSubjectWithFakeRemoteRepo(remoteRepoBuilder, logger); // 1. User does not accept, but no analyzers so no license prompt -> fails due absence of analyzers ProcessedArgs args = CreateArgs("non.analyzer.requireAccept.id", "1.0", "cs", null, false /* accept licenses */ , outputDir); bool result = apg.Generate(args); Assert.IsFalse(result, "Expecting generator to fail"); logger.AssertSingleWarningExists(UIResources.APG_NoAnalyzersFound); logger.AssertWarningsLogged(1); logger.AssertErrorsLogged(0); }
public void Generate_LicenseAcceptanceRequired_NoAnalysersInTarget() { // If there are: // Required licenses // No analyzers in the targeted package, but analyzers in the dependencies // We should fail due to the absence of analyzers if we are only generating a plugin for the targeted package // We should fail with an error due to licenses if we are generating plugins for the targeted package and dependencies // Arrange string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); string dummyContentFile = TestUtils.CreateTextFile("dummy.txt", outputDir, "non-analyzer content file"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); // Multi-level: parent and some but not all dependencies require license acceptance // Parent has no analyzers, but dependencies do IPackage child1 = CreatePackageWithAnalyzer(remoteRepoBuilder, "child1.requiredAccept.id", "2.1", License.Required); IPackage child2 = CreatePackageWithAnalyzer(remoteRepoBuilder, "child2.id", "2.2", License.NotRequired); remoteRepoBuilder.CreatePackage("non-analyzer.parent.requireAccept.id", "1.0", dummyContentFile, License.Required, child1, child2); TestLogger logger = new TestLogger(); AnalyzerPluginGenerator apg = CreateTestSubjectWithFakeRemoteRepo(remoteRepoBuilder, logger); // 1. a) Only target package. User does not accept, but no analyzers so no license prompt -> fails due to absence of analyzers ProcessedArgs args = CreateArgs("non-analyzer.parent.requireAccept.id", "1.0", "cs", null, false /* accept licenses */ , false, outputDir); bool result = apg.Generate(args); Assert.IsFalse(result, "Expecting generator to fail"); logger.AssertSingleWarningExists(String.Format(UIResources.APG_NoAnalyzersFound, "non-analyzer.parent.requireAccept.id")); logger.AssertSingleWarningExists(UIResources.APG_NoAnalyzersInTargetSuggestRecurse); logger.AssertWarningsLogged(2); logger.AssertErrorsLogged(0); // 1. b) Target package and dependencies. User does not accept. // No analyzers in the target package, but analyzers in the dependencies -> fails with error logger.Reset(); args = CreateArgs("non-analyzer.parent.requireAccept.id", "1.0", "cs", null, false /* accept licenses */ , true /* generate plugins for dependencies */, outputDir); result = apg.Generate(args); Assert.IsFalse(result, "Generator should fail because license has not been accepted"); logger.AssertSingleWarningExists(String.Format(UIResources.APG_NoAnalyzersFound, "non-analyzer.parent.requireAccept.id")); logger.AssertSingleWarningExists("non-analyzer.parent.requireAccept.id", "1.0"); // warning for each licensed package logger.AssertSingleWarningExists(child1.Id, child1.Version.ToString()); logger.AssertWarningsLogged(3); logger.AssertSingleErrorExists("non-analyzer.parent.requireAccept.id", "1.0"); // error listing the main package logger.AssertErrorsLogged(1); // 2. b) Target package and dependencies. User accepts. // No analyzers in the target package, but analyzers in the dependencies -> succeeds with warnings logger.Reset(); args = CreateArgs("non-analyzer.parent.requireAccept.id", "1.0", "cs", null, true /* accept licenses */ , true /* generate plugins for dependencies */, outputDir); result = apg.Generate(args); Assert.IsTrue(result, "Generator should succeed if licenses are accepted"); logger.AssertSingleWarningExists(String.Format(UIResources.APG_NoAnalyzersFound, "non-analyzer.parent.requireAccept.id")); logger.AssertSingleWarningExists(UIResources.APG_NGAcceptedPackageLicenses); // warning that licenses have been accepted logger.AssertSingleWarningExists("non-analyzer.parent.requireAccept.id", "1.0"); // warning for each licensed package logger.AssertSingleWarningExists(child1.Id, child1.Version.ToString()); logger.AssertWarningsLogged(5); logger.AssertErrorsLogged(0); }
private static void AssertArgumentsNotProcessed(ProcessedArgs actualArgs, TestLogger logger) { Assert.IsNull(actualArgs, "Not expecting the arguments to have been processed successfully"); logger.AssertErrorsLogged(); }
public void Generate_LicenseAcceptanceNotRequired_NoAnalyzersInTarget() { // If there are: // No required licenses // No analyzers in the targeted package, but analyzers in the dependencies // We should fail due to the absence of analyzers if we are only generating a plugin for the targeted package // We should succeed if we are generating plugins for the targeted package and its dependencies // Arrange string outputDir = TestUtils.CreateTestDirectory(this.TestContext, ".out"); string dummyContentFile = TestUtils.CreateTextFile("dummy.txt", outputDir, "non-analyzer content file"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); // Multi-level dependencies: no package requires license acceptence // Parent has no analyzers, but dependencies do IPackage grandchild = CreatePackageWithAnalyzer(remoteRepoBuilder, "grandchild.id", "1.2", License.NotRequired /* no dependencies */); IPackage child = CreatePackageWithAnalyzer(remoteRepoBuilder, "child.id", "1.1", License.NotRequired, grandchild); remoteRepoBuilder.CreatePackage("parent.id", "1.0", dummyContentFile, License.NotRequired, child); TestLogger logger = new TestLogger(); AnalyzerPluginGenerator apg = CreateTestSubjectWithFakeRemoteRepo(remoteRepoBuilder, logger); // 1. a) Only target package. Acceptance not required -> fails due to absence of analyzers ProcessedArgs args = CreateArgs("parent.id", "1.0", "cs", null, false /* accept licenses */ , false, outputDir); bool result = apg.Generate(args); Assert.IsFalse(result, "Expecting generator to fail"); logger.AssertSingleWarningExists(String.Format(UIResources.APG_NoAnalyzersFound, "parent.id")); logger.AssertSingleWarningExists(UIResources.APG_NoAnalyzersInTargetSuggestRecurse); logger.AssertWarningsLogged(2); logger.AssertErrorsLogged(0); // 1. b) Target package and dependencies. Acceptance not required -> succeeds if generate dependencies = true logger.Reset(); args = CreateArgs("parent.id", "1.0", "cs", null, false /* accept licenses */ , true /* generate plugins for dependencies */, outputDir); result = apg.Generate(args); Assert.IsTrue(result, "Generator should succeed if there are no licenses to accept"); logger.AssertSingleWarningExists(String.Format(UIResources.APG_NoAnalyzersFound, "parent.id")); logger.AssertWarningNotLogged("child.id"); logger.AssertWarningNotLogged("grandchild.id"); logger.AssertWarningsLogged(2); logger.AssertErrorsLogged(0); }
private static void AssertArgumentsProcessed(ProcessedArgs actualArgs, TestLogger logger, string expectedId, string expectedVersion, string expectedSqale) { Assert.IsNotNull(actualArgs, "Expecting the arguments to have been processed successfully"); Assert.IsNotNull(actualArgs.AnalyzerRef, "Not expecting the analyzer reference to be null"); Assert.AreEqual(actualArgs.AnalyzerRef.PackageId, expectedId, "Unexpected package id returned"); NuGetReference actualRef = actualArgs.AnalyzerRef; if (expectedVersion == null) { Assert.IsNull(actualRef.Version, "Expecting the version to be null"); } else { Assert.IsNotNull(actualRef.Version, "Not expecting the version to be null"); Assert.AreEqual(expectedVersion, actualRef.Version.ToString()); } Assert.AreEqual(expectedSqale, actualArgs.SqaleFilePath, "Unexpected sqale file path"); if (expectedSqale != null) { Assert.IsTrue(File.Exists(expectedSqale), "Specified sqale file should exist: {0}", expectedSqale); } logger.AssertErrorsLogged(0); }
public void GetDependencies_DependenciesNotInstalledLocally_Warning() { // Arrange string targetNuGetRoot = TestUtils.CreateTestDirectory(this.TestContext, ".nuget.target"); RemoteRepoBuilder remoteRepoBuilder = new RemoteRepoBuilder(this.TestContext); string dummyContentFile = CreateDummyContentFile(); IEnumerable<IPackage> actualDependencies; // Build a dependency graph: "main" depends on "dependency" IPackage dependencyPackage = remoteRepoBuilder.CreatePackage("dependency.package.id", "1.2", dummyContentFile, RemoteRepoBuilder.License.Required /* no dependencies */); IPackage mainPackage = remoteRepoBuilder.CreatePackage("a", "2.0", dummyContentFile, RemoteRepoBuilder.License.NotRequired, dependencyPackage); // 1. Dependencies have not been installed locally -> warning but no error TestLogger logger = new TestLogger(); NuGetPackageHandler testSubject = new NuGetPackageHandler(remoteRepoBuilder.FakeRemoteRepo, targetNuGetRoot, logger); actualDependencies = testSubject.GetInstalledDependencies(mainPackage); AssertExpectedPackageIds(actualDependencies /* no dependencies resolved*/); logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(1); logger.AssertSingleWarningExists("dependency.package.id"); // 2. Now install the package -> dependencies should resolve ok logger = new TestLogger(); testSubject = new NuGetPackageHandler(remoteRepoBuilder.FakeRemoteRepo, targetNuGetRoot, logger); testSubject.FetchPackage(mainPackage.Id, mainPackage.Version); actualDependencies = testSubject.GetInstalledDependencies(mainPackage); AssertExpectedPackageIds(actualDependencies, "dependency.package.id"); logger.AssertErrorsLogged(0); logger.AssertWarningsLogged(0); }
private void BuildAndCheckCompileFails(PluginBuilder builder, TestLogger logger) { AssertException.Expect<JavaCompilerException>(() => builder.Build()); Assert.IsNotNull(builder.JarFilePath, "Expecting the jar file path to be set"); TestUtils.AssertFileDoesNotExist(builder.JarFilePath); logger.AssertErrorsLogged(); }
private void BuildAndCheckSucceeds(PluginBuilder builder, TestLogger logger) { builder.Build(); Assert.IsNotNull(builder.JarFilePath, "Expecting the jar file path to be set"); TestUtils.AssertFileExists(builder.JarFilePath); this.TestContext.AddResultFile(builder.JarFilePath); logger.AssertErrorsLogged(0); }