public async Task WalkDependenciesAsync_WithCancellationToken_ThrowsAsync() { using (var pathContext = new SimpleTestPathContext()) { var projectName = "TestProject"; var projectDirectory = Path.Combine(pathContext.SolutionRoot, projectName); var packageSpec = PackageReferenceSpecBuilder.Create(projectName, projectDirectory) .WithTargetFrameworks(new string[] { "net46", "net47" }) .WithPackagesLockFile() .Build(); var restoreRequest = ProjectTestHelpers.CreateRestoreRequest(packageSpec, pathContext, _logger); var projectRestoreRequest = new ProjectRestoreRequest(restoreRequest, packageSpec, restoreRequest.ExistingLockFile, _collector);; var cmd = new ProjectRestoreCommand(projectRestoreRequest); // Assert exception var ex = await Assert.ThrowsAnyAsync <OperationCanceledException>(async() => { var cts = new CancellationTokenSource(); cts.Cancel(); // Act: call TryRestoreAsync() that calls WalkDependenciesAsync() await cmd.TryRestoreAsync( projectRange: It.IsAny <LibraryRange>(), frameworkRuntimePairs: new FrameworkRuntimePair[] { new FrameworkRuntimePair(NuGetFramework.Parse("net46"), null), new FrameworkRuntimePair(NuGetFramework.Parse("net47"), null), }, userPackageFolder: It.IsAny <NuGetv3LocalRepository>(), fallbackPackageFolders: It.IsAny <IReadOnlyList <NuGetv3LocalRepository> >(), remoteWalker: It.IsAny <RemoteDependencyWalker>(), context: It.IsAny <RemoteWalkContext>(), forceRuntimeGraphCreation: false, token: cts.Token, telemetryActivity: TelemetryActivity.Create(Guid.NewGuid(), "TestTelemetry"), telemetryPrefix: "testTelemetryPrefix"); }); } }
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)); } }