Пример #1
0
 public TestRestoreRequest(
     PackageSpec project,
     IEnumerable <SourceRepository> sources,
     string packagesDirectory,
     IEnumerable <string> fallbackPackageFolders,
     SourceCacheContext cacheContext,
     ClientPolicyContext clientPolicyContext,
     ILogger log,
     LockFileBuilderCache lockFileBuilderCache) : base(
         project,
         RestoreCommandProviders.Create(
             packagesDirectory,
             fallbackPackageFolderPaths: fallbackPackageFolders,
             sources: sources,
             cacheContext: cacheContext,
             packageFileCache: new LocalPackageFileCache(),
             log: log),
         cacheContext,
         clientPolicyContext,
         packageSourceMapping: PackageSourceMapping.GetPackageSourceMapping(NullSettings.Instance),
         log,
         lockFileBuilderCache)
 {
     // We need the dependency graph spec to go through the proper no-op code paths
     DependencyGraphSpec = new DependencyGraphSpec();
     DependencyGraphSpec.AddProject(project);
     DependencyGraphSpec.AddRestore(project.RestoreMetadata.ProjectUniqueName);
     AllowNoOp = true;
 }
Пример #2
0
        public async Task LockFileBuilderCache_DifferentRuntimeGraph_WillNotCache()
        {
            // Arrange
            using (var tmpPath = new SimpleTestPathContext())
            {
                var packageA100 = new SimpleTestPackageContext
                {
                    Id      = "PackageA",
                    Version = "1.0.0",
                    Files   = new List <KeyValuePair <string, byte[]> >
                    {
                        new("lib/net45/a.dll", new byte[0]),
                        new("lib/netstandard2.0/a.dll", new byte[0]),
                        new("runtimes/runtime1/native/foo.dll", new byte[0]),
                        new("runtimes/runtime3/native/foo.dll", new byte[0]),
                    },
                };

                var logger = new TestLogger();
                var lockFileBuilderCache = new LockFileBuilderCache();
                var project1Directory    = new DirectoryInfo(Path.Combine(tmpPath.SolutionRoot, "Library1"));
                var project2Directory    = new DirectoryInfo(Path.Combine(tmpPath.SolutionRoot, "Library2"));
                var globalPackages       = new DirectoryInfo(Path.Combine(tmpPath.WorkingDirectory, "globalPackages"));
                var packageSource        = new DirectoryInfo(Path.Combine(tmpPath.WorkingDirectory, "packageSource"));

                project1Directory.Create();
                project2Directory.Create();
                globalPackages.Create();
                packageSource.Create();

                var project1RuntimeGraph = new RuntimeGraph(new RuntimeDescription[]
                {
                    new("runtime1"), new("runtime2", new[] { "runtime1" }), new("runtime3"),
                });
Пример #3
0
        public async Task LockFileBuilderCache_DifferentPackagePath_WillNotCache(bool differentPath, bool cachingIsExpected)
        {
            // Arrange
            using (var tmpPath = new SimpleTestPathContext())
            {
                var packageA = new SimpleTestPackageContext
                {
                    Id      = "PackageA",
                    Version = "1.0.0",
                };

                var logger = new TestLogger();
                var lockFileBuilderCache = new LockFileBuilderCache();
                var project1Directory    = new DirectoryInfo(Path.Combine(tmpPath.SolutionRoot, "Library1"));
                var project2Directory    = new DirectoryInfo(Path.Combine(tmpPath.SolutionRoot, "Library2"));
                var globalPackages1      = new DirectoryInfo(Path.Combine(tmpPath.WorkingDirectory, "globalPackages1"));
                var globalPackages2      = new DirectoryInfo(Path.Combine(tmpPath.WorkingDirectory, "globalPackages2"));
                var packageSource        = new DirectoryInfo(Path.Combine(tmpPath.WorkingDirectory, "packageSource"));

                globalPackages1.Create();
                globalPackages2.Create();
                packageSource.Create();

                var project1Spec = PackageReferenceSpecBuilder.Create("Library1", project1Directory.FullName)
                                   .WithTargetFrameworks(new[]
                {
                    new TargetFrameworkInformation
                    {
                        FrameworkName = NuGetFramework.Parse("net471"),
                        Dependencies  = new List <LibraryDependency>(
                            new[]
                        {
                            new LibraryDependency
                            {
                                LibraryRange = new LibraryRange("PackageA", VersionRange.Parse("1.0.0"),
                                                                LibraryDependencyTarget.All)
                            },
                        })
                    }
                })
                                   .Build();

                var project2Spec = PackageReferenceSpecBuilder.Create("Library2", project2Directory.FullName)
                                   .WithTargetFrameworks(new[]
                {
                    new TargetFrameworkInformation
                    {
                        FrameworkName = NuGetFramework.Parse("net471"),
                        Dependencies  = new List <LibraryDependency>(
                            new[]
                        {
                            new LibraryDependency
                            {
                                LibraryRange = new LibraryRange("PackageA", VersionRange.Parse("1.0.0"),
                                                                LibraryDependencyTarget.All)
                            },
                        })
                    }
                })
                                   .Build();

                var sources = new[] { new PackageSource(packageSource.FullName) }
                .Select(source => Repository.Factory.GetCoreV3(source))
                .ToList();

                var request1 = new TestRestoreRequest(
                    project1Spec,
                    sources,
                    globalPackages1.FullName,
                    new List <string>(),
                    new TestSourceCacheContext(),
                    ClientPolicyContext.GetClientPolicy(NullSettings.Instance, logger),
                    logger,
                    lockFileBuilderCache
                    )
                {
                    LockFilePath = Path.Combine(project1Directory.FullName, "project.lock.json")
                };

                var request2 = new TestRestoreRequest(
                    project2Spec,
                    sources,
                    differentPath ? globalPackages2.FullName : globalPackages1.FullName,
                    new List <string>(),
                    new TestSourceCacheContext(),
                    ClientPolicyContext.GetClientPolicy(NullSettings.Instance, logger),
                    logger,
                    lockFileBuilderCache
                    )
                {
                    LockFilePath = Path.Combine(project2Directory.FullName, "project.lock.json")
                };

                await SimpleTestPackageUtility.CreatePackagesAsync(
                    packageSource.FullName,
                    packageA);

                // Act
                var command1 = new RestoreCommand(request1);
                var result1  = await command1.ExecuteAsync();

                var lockFile1 = result1.LockFile;

                var command2 = new RestoreCommand(request2);
                var result2  = await command2.ExecuteAsync();

                var lockFile2 = result2.LockFile;

                // Assert
                Assert.True(result1.Success);
                Assert.Equal(1, lockFile1.Libraries.Count);
                Assert.Equal(1, lockFile1.Targets.Single().Libraries.Count);

                Assert.True(result2.Success);
                Assert.Equal(1, lockFile2.Libraries.Count);
                Assert.Equal(1, lockFile2.Targets.Single().Libraries.Count);

                // Check whether packageA comes from the cache
                var lockFile1TargetLibraryA = lockFile1.Targets.Single().Libraries.Single(x => x.Name == "PackageA");
                var lockFile2TargetLibraryA = lockFile2.Targets.Single().Libraries.Single(x => x.Name == "PackageA");

                Assert.Equal(cachingIsExpected, ReferenceEquals(lockFile1TargetLibraryA, lockFile2TargetLibraryA));
            }
        }