Beispiel #1
0
            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));
            }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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");
        }
Beispiel #5
0
        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");
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
 private SourceRepositoryDependencyProviderTest(
     TestLogger logger,
     PackageSource packageSource,
     Mock <SourceRepository> sourceRepository,
     SourceCacheContext sourceCacheContext,
     SourceRepositoryDependencyProvider provider)
 {
     Logger             = logger;
     PackageSource      = packageSource;
     SourceRepository   = sourceRepository;
     SourceCacheContext = sourceCacheContext;
     Provider           = provider;
 }
Beispiel #8
0
        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));
        }
Beispiel #9
0
        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());
        }
Beispiel #10
0
        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);
            }
        }