Esempio n. 1
0
        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");
                });
            }
        }
Esempio n. 2
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));
            }
        }