internal static SourceRepositoryDependencyProviderTest Create( bool ignoreFailedSources = true, bool ignoreWarning = true) { var logger = new TestLogger(); var packageSource = new PackageSource("https://unit.test"); var sourceRepository = new Mock <SourceRepository>(); var sourceCacheContext = new SourceCacheContext(); sourceRepository.SetupGet(s => s.PackageSource) .Returns(packageSource); var provider = new SourceRepositoryDependencyProvider( sourceRepository.Object, logger, sourceCacheContext, ignoreFailedSources, ignoreWarning); return(new SourceRepositoryDependencyProviderTest( logger, packageSource, sourceRepository, sourceCacheContext, provider)); }
public async Task SourceRepositoryDependencyProvider_VerifyGetDependencyInfoAsyncThrowsWhenListedPackageIsMissing() { // Arrange var testLogger = new TestLogger(); var cacheContext = new SourceCacheContext(); var findResource = new Mock <FindPackageByIdResource>(); findResource.Setup(s => s.GetAllVersionsAsync(It.IsAny <string>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new[] { NuGetVersion.Parse("1.0.0"), NuGetVersion.Parse("2.0.0") }); findResource.Setup(s => s.GetDependencyInfoAsync(It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ThrowsAsync(new PackageNotFoundProtocolException(new PackageIdentity("x", NuGetVersion.Parse("1.0.0")))); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var libraryRange = new LibraryRange("x", new VersionRange(new NuGetVersion(1, 0, 0)), LibraryDependencyTarget.Package); var provider = new SourceRepositoryDependencyProvider(source.Object, testLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: true); // Act && Assert // Verify the exception it thrown even with ignoreFailedSources: true await Assert.ThrowsAsync <PackageNotFoundProtocolException>(async() => await provider.GetDependenciesAsync(new LibraryIdentity("x", NuGetVersion.Parse("1.0.0"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, testLogger, CancellationToken.None)); }
public static void DownloadPackage(string packageId, NuGetVersion version, Uri feedUri, ICredentials feedCredentials, string targetFilePath) { ILogger logger = new NugetLogger(); var sourceRepository = Repository.Factory.GetCoreV3(feedUri.AbsoluteUri); if (feedCredentials != null) { var cred = feedCredentials.GetCredential(feedUri, "basic"); sourceRepository.PackageSource.Credentials = new PackageSourceCredential("octopus", cred.UserName, cred.Password, true); } var providers = new SourceRepositoryDependencyProvider(sourceRepository, logger, new SourceCacheContext()); var libraryIdentity = new LibraryIdentity(packageId, version, LibraryType.Package); var targetPath = Directory.GetParent(targetFilePath).FullName; if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } string targetTempNupkg = Path.Combine(targetPath, Path.GetRandomFileName()); using (var nupkgStream = new FileStream(targetTempNupkg, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite | FileShare.Delete, 4096, true)) { providers.CopyToAsync(libraryIdentity, nupkgStream, CancellationToken.None) .GetAwaiter() .GetResult(); } File.Move(targetTempNupkg, targetFilePath); }
public async Task FindLibraryAsync_WhenASourceIsInaccessible_AndFailuresAreIgnored_EveryCallLogsAnErrorMessage() { // Arrange var cacheContext = new SourceCacheContext(); var expectedException = new FatalProtocolException("The source cannot be accessed"); var findResource = new Mock <FindPackageByIdResource>(); findResource.Setup(s => s.DoesPackageExistAsync( It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .Throws(expectedException); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var firstTestLogger = new TestLogger(); var secondTestLogger = new TestLogger(); var libraryRange = new LibraryRange("x", new VersionRange(new NuGetVersion(1, 0, 0)), LibraryDependencyTarget.Package); var provider = new SourceRepositoryDependencyProvider( source.Object, firstTestLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: false); var results = await provider.FindLibraryAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, firstTestLogger, CancellationToken.None); // Pre-conditions - Assert results.Should().Be(null); firstTestLogger.WarningMessages.Should().HaveCount(1); firstTestLogger.ShowWarnings().Should().Contain("NU1801"); // Act results = await provider.FindLibraryAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, secondTestLogger, CancellationToken.None); // Assert results.Should().Be(null); secondTestLogger.WarningMessages.Should().HaveCount(1); secondTestLogger.ShowWarnings().Should().Contain("NU1801"); }
public async Task GetDependenciesAsync_WhenPackageHasVariousDependencyGroups_CorrectFrameworkIsSelected() { // Arrange var testLogger = new TestLogger(); var cacheContext = new SourceCacheContext(); var findResource = new Mock <FindPackageByIdResource>(); var net46 = FrameworkConstants.CommonFrameworks.Net46; var netstandard20 = FrameworkConstants.CommonFrameworks.NetStandard20; var packageDependencyGroups = new List <PackageDependencyGroup>(); var net46group = new PackageDependencyGroup(net46, new PackageDependency[] { new PackageDependency("full.framework", VersionRange.Parse("1.0.0")) }); var netstandardGroup = new PackageDependencyGroup(netstandard20, new PackageDependency[] { new PackageDependency("netstandard", VersionRange.Parse("1.0.0")) }); packageDependencyGroups.Add(net46group); packageDependencyGroups.Add(netstandardGroup); findResource.Setup(s => s.GetDependencyInfoAsync( It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new FindPackageByIdDependencyInfo( new PackageIdentity("x", NuGetVersion.Parse("1.0.0-beta")), packageDependencyGroups, Enumerable.Empty <FrameworkSpecificGroup>())); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var provider = new SourceRepositoryDependencyProvider( source.Object, testLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: true, fileCache: null, isFallbackFolderSource: false, new TestEnvironmentVariableReader(new Dictionary <string, string>())); // Act var library = await provider.GetDependenciesAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), FrameworkConstants.CommonFrameworks.Net472, cacheContext, testLogger, CancellationToken.None); // Assert library.Dependencies.Should().HaveCount(1); var dependencies = library.Dependencies.Single(); dependencies.Name.Should().Be("full.framework"); }
public async Task GetDependenciesAsync_ValuesAreCachedAndFindResourceIsHitOnce() { // Arrange var testLogger = new TestLogger(); var cacheContext = new SourceCacheContext(); var findResource = new Mock <FindPackageByIdResource>(); var dependencyHitCount = 0; findResource.Setup(s => s.GetDependencyInfoAsync( It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new FindPackageByIdDependencyInfo( new PackageIdentity("x", NuGetVersion.Parse("1.0.0-beta")), Enumerable.Empty <PackageDependencyGroup>(), Enumerable.Empty <FrameworkSpecificGroup>())) .Callback(() => dependencyHitCount++); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var libraryRange = new LibraryRange( "x", new VersionRange(new NuGetVersion(1, 0, 0, "beta")), LibraryDependencyTarget.Package); var provider = new SourceRepositoryDependencyProvider( source.Object, testLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: true); // Act var library = await provider.GetDependenciesAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, testLogger, CancellationToken.None); library = await provider.GetDependenciesAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, testLogger, CancellationToken.None); // Assert Assert.Equal(1, dependencyHitCount); }
private SourceRepositoryDependencyProviderTest( TestLogger logger, PackageSource packageSource, Mock <SourceRepository> sourceRepository, SourceCacheContext sourceCacheContext, SourceRepositoryDependencyProvider provider) { Logger = logger; PackageSource = packageSource; SourceRepository = sourceRepository; SourceCacheContext = sourceCacheContext; Provider = provider; }
public async Task <GraphNode <RemoteResolveResult> > ResolvePackages(List <PackageId> packages) { var walkerContext = new RemoteWalkContext(_cache, _nuGetLogger); foreach (var sourceRepository in _repositoryProvider.Repositories) { var provider = new SourceRepositoryDependencyProvider(sourceRepository, _nuGetLogger, _cache, true, true); walkerContext.RemoteLibraryProviders.Add(provider); } walkerContext.ProjectLibraryProviders.Add(new ProjectLibraryProvider(packages)); var localProvider = new SourceRepositoryDependencyProvider(_localRepository, _nuGetLogger, _cache, true, true); walkerContext.LocalLibraryProviders.Add(localProvider); var fakeLib = new LibraryRange("Dropcraft", VersionRange.Parse("1.0.0"), LibraryDependencyTarget.Project); var walker = new RemoteDependencyWalker(walkerContext); return(await walker.WalkAsync(fakeLib, _framework, _framework.GetShortFolderName(), RuntimeGraph.Empty, true)); }
public async Task SourceRepositoryDependencyProvider_VerifyGetDependenciesAsyncReturnsOriginalIdentity() { // Arrange var testLogger = new TestLogger(); var cacheContext = new SourceCacheContext(); var findResource = new Mock <FindPackageByIdResource>(); findResource.Setup(s => s.GetAllVersionsAsync(It.IsAny <string>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new[] { NuGetVersion.Parse("1.0.0-beta"), NuGetVersion.Parse("2.0.0") }); findResource.Setup(s => s.GetDependencyInfoAsync(It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new FindPackageByIdDependencyInfo( new PackageIdentity("X", NuGetVersion.Parse("1.0.0-bEta")), Enumerable.Empty <PackageDependencyGroup>(), Enumerable.Empty <FrameworkSpecificGroup>())); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var libraryRange = new LibraryRange("x", new VersionRange(new NuGetVersion(1, 0, 0, "beta")), LibraryDependencyTarget.Package); var provider = new SourceRepositoryDependencyProvider(source.Object, testLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: true); // Act var library = await provider.GetDependenciesAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), NuGetFramework.Parse("net45"), cacheContext, testLogger, CancellationToken.None); // Assert Assert.Equal("X", library.Library.Name); Assert.Equal("1.0.0-bEta", library.Library.Version.ToString()); }
public async Task GetDependenciesAsync_WhenPackageIsSelectedWithAssetTargetFallback_AndLegacyDependencyResolutionVariableIsSpecified_CorrectDependenciesAreSelected(string envValue, bool areDependenciesSelected) { // Arrange var testLogger = new TestLogger(); var cacheContext = new SourceCacheContext(); var findResource = new Mock <FindPackageByIdResource>(); var wrapper = new TestEnvironmentVariableReader(new Dictionary <string, string> { { "NUGET_USE_LEGACY_ASSET_TARGET_FALLBACK_DEPENDENCY_RESOLUTION", envValue } }); var net472 = FrameworkConstants.CommonFrameworks.Net472; var net60 = FrameworkConstants.CommonFrameworks.Net60; var inputFramework = new AssetTargetFallbackFramework(net60, new List <NuGetFramework> { net472 }); var packageDependencyGroups = new List <PackageDependencyGroup>(); var net472Group = new PackageDependencyGroup(net472, new PackageDependency[] { new PackageDependency("full.framework", VersionRange.Parse("1.0.0")) }); packageDependencyGroups.Add(net472Group); findResource.Setup(s => s.GetDependencyInfoAsync( It.IsAny <string>(), It.IsAny <NuGetVersion>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new FindPackageByIdDependencyInfo( new PackageIdentity("x", NuGetVersion.Parse("1.0.0-beta")), packageDependencyGroups, Enumerable.Empty <FrameworkSpecificGroup>())); var source = new Mock <SourceRepository>(); source.Setup(s => s.GetResourceAsync <FindPackageByIdResource>()) .ReturnsAsync(findResource.Object); source.SetupGet(s => s.PackageSource) .Returns(new PackageSource("http://test/index.json")); var provider = new SourceRepositoryDependencyProvider( source.Object, testLogger, cacheContext, ignoreFailedSources: true, ignoreWarning: true, fileCache: null, isFallbackFolderSource: false, wrapper); // Act var library = await provider.GetDependenciesAsync( new LibraryIdentity("x", NuGetVersion.Parse("1.0.0-beta"), LibraryType.Package), inputFramework, cacheContext, testLogger, CancellationToken.None); // Assert if (areDependenciesSelected) { library.Dependencies.Should().HaveCount(1); var dependencies = library.Dependencies.Single(); dependencies.Name.Should().Be("full.framework"); } else { library.Dependencies.Should().HaveCount(0); } }