예제 #1
0
        public void GivenRangeOf1To2VerifyBestMatch(string expected, string versionStrings)
        {
            var range    = VersionRange.Parse("[1.0.0, 2.0.0]");
            var versions = new SortedSet <NuGetVersion>(versionStrings.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(NuGetVersion.Parse));

            UnresolvedMessages.GetBestMatch(versions, range).Should().BeEquivalentTo(NuGetVersion.Parse(expected));
        }
        public async Task GivenAnUnresolvedPackageWithNoVersionsAndMultipleSourcesVerifyMessage()
        {
            var range    = new LibraryRange("x", LibraryDependencyTarget.Package);
            var versions = new List <NuGetVersion>();

            var token             = CancellationToken.None;
            var logger            = new TestLogger();
            var provider1         = GetProvider("http://nuget.org/a/", versions);
            var provider2         = GetProvider("http://nuget.org/b/", versions);
            var cacheContext      = new Mock <SourceCacheContext>();
            var remoteWalkContext = new RemoteWalkContext(cacheContext.Object, NullLogger.Instance);

            remoteWalkContext.RemoteLibraryProviders.Add(provider1.Object);
            remoteWalkContext.RemoteLibraryProviders.Add(provider2.Object);
            var graph = new Mock <IRestoreTargetGraph>();

            graph.SetupGet(e => e.TargetGraphName).Returns("abc");

            var message = await UnresolvedMessages.GetMessageAsync(graph.Object, range, remoteWalkContext, logger, token);

            message.Code.Should().Be(NuGetLogCode.NU1101);
            message.LibraryId.Should().Be("x");
            message.Message.Should().Be("Unable to find package x. No packages exist with this id in source(s): http://nuget.org/a/, http://nuget.org/b/");
            message.TargetGraphs.ShouldBeEquivalentTo(new[] { "abc" });
            message.Level.Should().Be(LogLevel.Error);
        }
예제 #3
0
        public void GivenAStableRangeAndAPreRelVersionInRangeVerifyHasPrereleaseVersionsOnlyTrue()
        {
            var range    = VersionRange.Parse("1.0.0");
            var versions = new[] { NuGetVersion.Parse("1.0.1-beta") };

            UnresolvedMessages.HasPrereleaseVersionsOnly(range, versions).Should().BeTrue();
        }
        public async Task GivenAMultipleSourcesVerifyInfosReturned()
        {
            var versions1 = new[]
            {
                NuGetVersion.Parse("1.0.0"),
                NuGetVersion.Parse("2.0.0"),
                NuGetVersion.Parse("3.0.0-beta"),
            };

            var versions2 = new[]
            {
                NuGetVersion.Parse("1.0.0")
            };

            var provider1 = GetProvider("http://nuget.org/a/", versions1);
            var provider2 = GetProvider("http://nuget.org/b/", versions2);

            var cacheContext      = new Mock <SourceCacheContext>();
            var remoteWalkContext = new RemoteWalkContext(cacheContext.Object, NullLogger.Instance);

            remoteWalkContext.RemoteLibraryProviders.Add(provider1.Object);
            remoteWalkContext.RemoteLibraryProviders.Add(provider2.Object);

            var infos = await UnresolvedMessages.GetSourceInfosForIdAsync("a", VersionRange.Parse("1.0.0"), remoteWalkContext, NullLogger.Instance, CancellationToken.None);

            infos.Count.Should().Be(2);
            infos[0].Value.ShouldBeEquivalentTo(versions1);
            infos[1].Value.ShouldBeEquivalentTo(versions2);
            infos[0].Key.Source.Should().Be("http://nuget.org/a/");
            infos[1].Key.Source.Should().Be("http://nuget.org/b/");
        }
예제 #5
0
        public void GivenNoVersionsVerifyBestMatch()
        {
            var range    = VersionRange.Parse("2.0.0");
            var versions = new SortedSet <NuGetVersion>();

            UnresolvedMessages.GetBestMatch(versions, range).Should().BeNull();
        }
예제 #6
0
        public void GivenAStableRangeAndAStableVersionOutOfRangeVerifyHasPrereleaseVersionsOnlyFalse()
        {
            var range    = VersionRange.Parse("2.0.0");
            var versions = new[] { NuGetVersion.Parse("1.0.0") };

            UnresolvedMessages.HasPrereleaseVersionsOnly(range, versions).Should().BeFalse();
        }
예제 #7
0
        public async Task GetMessageAsync_WithPackageSourceMappingAndProvidersNotConsidered_NU1101IncludesSourceMappingDetails()
        {
            var  libraryId = "x";
            var  range     = new LibraryRange(libraryId, LibraryDependencyTarget.Package);
            bool isPackageSourceMappingEnabled = true;
            var  provider1        = GetProvider("http://nuget.org/a/", new List <NuGetVersion>());
            var  provider2        = GetProvider("http://nuget.org/b/", new List <NuGetVersion>());
            var  provider3        = GetProvider("http://nuget.org/c/", new List <NuGetVersion>());
            var  enabledProviders = new List <IRemoteDependencyProvider>()
            {
                provider1.Object
            };
            var allProviders = new List <IRemoteDependencyProvider>()
            {
                provider3.Object, provider1.Object, provider2.Object
            };
            var targetGraphName = "targetGraphName";

            var message = await UnresolvedMessages.GetMessageAsync(targetGraphName, range, enabledProviders, isPackageSourceMappingEnabled, allProviders, new Mock <SourceCacheContext>().Object, new TestLogger(), CancellationToken.None);

            message.Code.Should().Be(NuGetLogCode.NU1101);
            message.LibraryId.Should().Be(libraryId);
            message.Message.Should().Be($"Unable to find package x. No packages exist with this id in source(s): http://nuget.org/a/. PackageSourceMapping is enabled, the following source(s) were not considered: http://nuget.org/b/, http://nuget.org/c/.");
            message.TargetGraphs.Should().BeEquivalentTo(new[] { targetGraphName });
            message.Level.Should().Be(LogLevel.Error);
        }
예제 #8
0
        [InlineData("[1.*, 2.0.0]", "3.0.0", "0.1.0,0.3.0,3.0.0,4.0.0")]              // lower bound, upper bound, floating - Version immediately above upper bound chosen
        public void GivenVersionRangeVerifyBestMatch(string versionRange, string expectedVersion, string versionStrings)
        {
            var range    = VersionRange.Parse(versionRange);
            var versions = new SortedSet <NuGetVersion>(versionStrings.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(NuGetVersion.Parse));

            Assert.Null(range.FindBestMatch(versions));
            UnresolvedMessages.GetBestMatch(versions, range).Should().BeEquivalentTo(NuGetVersion.Parse(expectedVersion));
        }
예제 #9
0
        public void GivenARangeWithExclusiveBoundsVerifyExactMatchesCanStillBeSelectedForUpper()
        {
            var range    = VersionRange.Parse("(1.0.0, 2.0.0)");
            var versions = new SortedSet <NuGetVersion>()
            {
                NuGetVersion.Parse("2.0.0")
            };

            UnresolvedMessages.GetBestMatch(versions, range).Should().BeEquivalentTo(NuGetVersion.Parse("2.0.0"));
        }
예제 #10
0
        public void GivenASourceInfoWithNoVersionsVerifyOutputString()
        {
            var range      = VersionRange.Parse("2.0.0");
            var sourceInfo = new KeyValuePair <PackageSource, SortedSet <NuGetVersion> >(
                key: new PackageSource("http://nuget.org/a/"),
                value: new SortedSet <NuGetVersion>());

            var s = UnresolvedMessages.FormatSourceInfo(sourceInfo, range);

            s.Should().Be("Found 0 version(s) in http://nuget.org/a/");
        }
예제 #11
0
        public void GivenASourceInfoVerifyFullFormatting()
        {
            var range      = VersionRange.Parse("2.0.0");
            var sourceInfo = new KeyValuePair <PackageSource, SortedSet <NuGetVersion> >(
                key: new PackageSource("http://nuget.org/a/"),
                value: new SortedSet <NuGetVersion>()
            {
                NuGetVersion.Parse("1.0.0")
            });

            var s = UnresolvedMessages.FormatSourceInfo(sourceInfo, range);

            s.Should().Be("Found 1 version(s) in http://nuget.org/a/ [ Nearest version: 1.0.0 ]");
        }
예제 #12
0
        public async Task GivenAnUnreachableSource_DoesNotThrow()
        {
            var source   = new PackageSource("http://nuget.org/a/");
            var context  = new Mock <SourceCacheContext>();
            var provider = new Mock <IRemoteDependencyProvider>();

            provider.Setup(e => e.GetAllVersionsAsync(It.IsAny <string>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => null);         // unreachable sources would return null
            provider.SetupGet(e => e.Source).Returns(source);

            var info = await UnresolvedMessages.GetSourceInfoForIdAsync(provider.Object, "a", context.Object, NullLogger.Instance, CancellationToken.None);

            info.Value.Should().BeEmpty();
            info.Key.Source.Should().Be(source.Source);
        }
예제 #13
0
        private static async Task <RestoreLogMessage> GetMessage(LibraryRange range, List <NuGetVersion> versions)
        {
            var token                  = CancellationToken.None;
            var logger                 = new TestLogger();
            var provider               = GetProvider("http://nuget.org/a/", versions);
            var cacheContext           = new Mock <SourceCacheContext>();
            var remoteLibraryProviders = new List <IRemoteDependencyProvider>()
            {
                provider.Object
            };
            var targetGraphName = "abc";

            var message = await UnresolvedMessages.GetMessageAsync(targetGraphName, range, remoteLibraryProviders, false, remoteLibraryProviders, cacheContext.Object, logger, token);

            return(message);
        }
예제 #14
0
        private static async Task <RestoreLogMessage> GetMessage(LibraryRange range, List <NuGetVersion> versions)
        {
            var token             = CancellationToken.None;
            var logger            = new TestLogger();
            var provider          = GetProvider("http://nuget.org/a/", versions);
            var cacheContext      = new Mock <SourceCacheContext>();
            var remoteWalkContext = new RemoteWalkContext(cacheContext.Object, NullLogger.Instance);

            remoteWalkContext.RemoteLibraryProviders.Add(provider.Object);
            var graph = new Mock <IRestoreTargetGraph>();

            graph.SetupGet(e => e.TargetGraphName).Returns("abc");

            var message = await UnresolvedMessages.GetMessageAsync(graph.Object, range, remoteWalkContext, logger, token);

            return(message);
        }
예제 #15
0
        public async Task GivenAnEmptySourceVerifySourceInfoContainsAllVersions()
        {
            var versions = new[]
            {
                NuGetVersion.Parse("1.0.0"),
                NuGetVersion.Parse("2.0.0"),
                NuGetVersion.Parse("3.0.0-beta"),
            };

            var source   = new PackageSource("http://nuget.org/a/");
            var context  = new Mock <SourceCacheContext>();
            var provider = new Mock <IRemoteDependencyProvider>();

            provider.Setup(e => e.GetAllVersionsAsync(It.IsAny <string>(), It.IsAny <SourceCacheContext>(), It.IsAny <ILogger>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(() => versions);
            provider.SetupGet(e => e.Source).Returns(source);

            var info = await UnresolvedMessages.GetSourceInfoForIdAsync(provider.Object, "a", context.Object, NullLogger.Instance, CancellationToken.None);

            info.Value.Should().BeEquivalentTo(versions);
            info.Key.Source.Should().Be(source.Source);
        }
예제 #16
0
        public async Task GetMessageAsync_WithPackageSourceMappingAndProvidersNotConsidered_NU1102IncludesSourceMappingDetails()
        {
            var  libraryId = "x";
            var  range     = new LibraryRange(libraryId, VersionRange.Parse("6.0.0"), LibraryDependencyTarget.Package);
            bool isPackageSourceMappingEnabled = true;
            var  provider1 = GetProvider("http://nuget.org/a/", new List <NuGetVersion>()
            {
                NuGetVersion.Parse("6.0.0")
            });
            var provider2        = GetProvider("http://nuget.org/b/", new List <NuGetVersion>());
            var provider3        = GetProvider("http://nuget.org/c/", new List <NuGetVersion>());
            var enabledProviders = new List <IRemoteDependencyProvider>()
            {
                provider1.Object
            };
            var allProviders = new List <IRemoteDependencyProvider>()
            {
                provider3.Object, provider1.Object, provider2.Object
            };
            var targetGraphName = "targetGraphName";

            var message = await UnresolvedMessages.GetMessageAsync(targetGraphName, range, enabledProviders, isPackageSourceMappingEnabled, allProviders, new Mock <SourceCacheContext>().Object, new TestLogger(), CancellationToken.None);

            message.Code.Should().Be(NuGetLogCode.NU1102);
            message.LibraryId.Should().Be(libraryId);
            message.Message.Should().Be($"Unable to find package x with version (>= 6.0.0)" +
                                        Environment.NewLine +
                                        "  - Found 1 version(s) in http://nuget.org/a/ [ Nearest version: 6.0.0 ]" +
                                        Environment.NewLine +
                                        "  - Versions from http://nuget.org/b/ were not considered" +
                                        Environment.NewLine +
                                        "  - Versions from http://nuget.org/c/ were not considered"
                                        );
            message.TargetGraphs.Should().BeEquivalentTo(new[] { targetGraphName });
            message.Level.Should().Be(LogLevel.Error);
        }
예제 #17
0
        public async Task GivenAnUnresolvedPackageWithNoVersionsAndMultipleSourcesVerifyMessage()
        {
            var range    = new LibraryRange("x", LibraryDependencyTarget.Package);
            var versions = new List <NuGetVersion>();

            var token                  = CancellationToken.None;
            var logger                 = new TestLogger();
            var provider1              = GetProvider("http://nuget.org/a/", versions);
            var provider2              = GetProvider("http://nuget.org/b/", versions);
            var cacheContext           = new Mock <SourceCacheContext>();
            var remoteLibraryProviders = new List <IRemoteDependencyProvider>()
            {
                provider1.Object, provider2.Object
            };
            var targetGraphName = "abc";

            var message = await UnresolvedMessages.GetMessageAsync(targetGraphName, range, remoteLibraryProviders, cacheContext.Object, logger, token);

            message.Code.Should().Be(NuGetLogCode.NU1101);
            message.LibraryId.Should().Be("x");
            message.Message.Should().Be("Unable to find package x. No packages exist with this id in source(s): http://nuget.org/a/, http://nuget.org/b/");
            message.TargetGraphs.Should().BeEquivalentTo(new[] { targetGraphName });
            message.Level.Should().Be(LogLevel.Error);
        }
예제 #18
0
        public void GivenAStableRangeAndNoVersionsVerifyHasPrereleaseVersionsOnlyFalse()
        {
            var range = VersionRange.Parse("1.0.0");

            UnresolvedMessages.HasPrereleaseVersionsOnly(range, new List <NuGetVersion>()).Should().BeFalse();
        }
예제 #19
0
 public void GivenANullRangeVerifyIsPrereleaseAllowedFalse(string s)
 {
     UnresolvedMessages.IsPrereleaseAllowed(null).Should().BeFalse();
 }
예제 #20
0
        public void GivenAStableRangeVerifyIsPrereleaseAllowedTrue(string s)
        {
            var range = VersionRange.Parse(s);

            UnresolvedMessages.IsPrereleaseAllowed(range).Should().BeTrue();
        }
예제 #21
0
        public async Task GivenAMultipleSourcesVerifyInfosReturned()
        {
            var versions1 = new[]
            {
                NuGetVersion.Parse("1.0.0"),
                NuGetVersion.Parse("2.0.0"),
                NuGetVersion.Parse("3.0.0-beta"),
            };

            var versions2 = new[]
            {
                NuGetVersion.Parse("1.0.0")
            };

            var provider1 = GetProvider("http://nuget.org/a/", versions1);
            var provider2 = GetProvider("http://nuget.org/b/", versions2);

            var cacheContext           = new Mock <SourceCacheContext>();
            var remoteLibraryProviders = new List <IRemoteDependencyProvider>()
            {
                provider1.Object, provider2.Object
            };

            List <KeyValuePair <PackageSource, SortedSet <NuGetVersion> > > infos = await UnresolvedMessages.GetSourceInfosForIdAsync(id : "a", remoteLibraryProviders : remoteLibraryProviders, sourceCacheContext : cacheContext.Object, logger : NullLogger.Instance, token : CancellationToken.None);

            infos.Count.Should().Be(2);
            infos[0].Value.Should().BeEquivalentTo(versions1);
            infos[1].Value.Should().BeEquivalentTo(versions2);
            infos[0].Key.Source.Should().Be("http://nuget.org/a/");
            infos[1].Key.Source.Should().Be("http://nuget.org/b/");
        }