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; }
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"), });
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)); } }