public async Task CopyPackagesToOriginalCaseAsync_WhenPackageMustComeFromProvider_ConvertsPackagesAsync() { // Arrange using (var workingDirectory = TestDirectory.Create()) { var packagesDirectory = Path.Combine(workingDirectory, "packages"); var sourceDirectory = Path.Combine(workingDirectory, "source"); // Add the package to the source. var identity = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta")); var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( sourceDirectory, identity.Id, identity.Version.ToString()); var logger = new TestLogger(); var graph = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger); var request = GetRestoreRequest(packagesDirectory, logger); var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false); var target = new OriginalCaseGlobalPackageFolder(request); // Act await target.CopyPackagesToOriginalCaseAsync( new[] { graph }, CancellationToken.None); // Assert Assert.True(File.Exists(resolver.GetPackageFilePath(identity.Id, identity.Version))); Assert.Equal(1, logger.Messages.Count(x => x.Contains(identity.ToString()))); } }
public async Task PushCommand_AbsolutePathSourceAsync() { using (var workingDir = TestDirectory.Create()) { // Arrange (create a test package) var packagePushDest = new DirectoryInfo(Path.Combine(workingDir, "packagePushDest")); packagePushDest.Create(); var packageSources = new List <PackageSource> { new PackageSource(packagePushDest.FullName) }; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); // Act await PushRunner.Run( Settings.LoadDefaultSettings(null, null, null), new TestPackageSourceProvider(packageSources), packageInfo.FullName, packagePushDest.FullName, null, // api key null, // symbols source null, // symbols api key 0, // timeout false, // disable buffering false, // no symbols, false, // enable server endpoint new TestLogger()); // Assert var destFile = Path.Combine(packagePushDest.FullName, packageInfo.Name); Assert.Equal(true, File.Exists(destFile)); } }
internal static async Task <HttpFileSystemBasedFindPackageByIdResourceTest> CreateAsync(TestEnvironmentVariableReader testEnvironmentVariableReader = null) { var packageIdentity = new PackageIdentity(id: "DeepEqual", version: NuGetVersion.Parse("1.4.0")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource("http://unit.test/v3-flatcontainer"); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { $"{packageSource.Source}/deepequal/index.json", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(JsonData.DeepEqualFlatContainerIndex) }) }, { $"{packageSource.Source}/deepequal/1.4.0/deepequal.1.4.0.nupkg", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) }, { $"{packageSource.Source}/a/index.json", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound)) }, { $"{packageSource.Source}/socketexception/index.json", request => { SocketExceptionCallsMade += 1; throw new Exception("Oh this isn't going well", new IOException("This is what TCP hang-ups look like", new SocketException(123))); } }, }; var baseUris = new List <Uri>() { packageSource.SourceUri }; var httpSource = new TestHttpSource(packageSource, responses); var resource = new HttpFileSystemBasedFindPackageByIdResource( baseUris, httpSource, testEnvironmentVariableReader != null ? testEnvironmentVariableReader : EnvironmentVariableWrapper.Instance); return(new HttpFileSystemBasedFindPackageByIdResourceTest( resource, package, packageIdentity, new SourceCacheContext(), httpSource, testDirectory)); }
public async Task Push_WhenPushingToAnHttpSourceAndSymbolSource_WarnsForBoth() { // Arrange using var workingDir = TestDirectory.Create(); var source = "http://www.nuget.org/api/v2/"; var symbolSource = "http://other.smbsrc.net/"; HttpRequestMessage sourceRequest = null; HttpRequestMessage symbolRequest = null; var apiKey = "serverapikey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var symbolPackageInfo = await SimpleTestPackageUtility.CreateSymbolPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { source, request => { sourceRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, { "http://other.smbsrc.net/api/v2/package/", request => { symbolRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, }; var resource = await StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses).GetResourceAsync <PackageUpdateResource>(); UserAgent.SetUserAgentString(new UserAgentStringBuilder("test client")); var logger = new TestLogger(); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : symbolSource, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => apiKey, getSymbolApiKey : _ => apiKey, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : logger); // Assert Assert.NotNull(sourceRequest); Assert.NotNull(symbolRequest); Assert.Equal(2, logger.WarningMessages.Count); Assert.Contains("You are running the 'push' operation with an 'HTTP' source, 'http://www.nuget.org/api/v2/'. Non-HTTPS access will be removed in a future version. Consider migrating to an 'HTTPS' source.", logger.WarningMessages.First()); Assert.Contains("You are running the 'push' operation with an 'HTTP' source, 'http://other.smbsrc.net/api/v2/package/'. Non-HTTPS access will be removed in a future version. Consider migrating to an 'HTTPS' source.", logger.WarningMessages.Last()); }
public async Task DependencyTypeConstraint_RootProjectIsUsedOverPackageAsync() { // Arrange var sources = new List <PackageSource>(); var project1Json = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""frameworks"": { ""net45"": { } } }"; using (var workingDir = TestDirectory.Create()) { var packagesDir = new DirectoryInfo(Path.Combine(workingDir, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource")); var project1 = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1")); packagesDir.Create(); packageSource.Create(); project1.Create(); sources.Add(new PackageSource(packageSource.FullName)); File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json); var specPath1 = Path.Combine(project1.FullName, "project.json"); var spec1 = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1).EnsureProjectJsonRestoreMetadata(); var project1PackagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( packageSource.FullName, "project1", "1.0.0"); await GlobalFolderUtility.AddPackageToGlobalFolderAsync(project1PackagePath, packagesDir); var logger = new TestLogger(); var request = new TestRestoreRequest(spec1, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(project1.FullName, "project.lock.json") }; // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); var lockFile = result.LockFile; await result.CommitAsync(logger, CancellationToken.None); // Assert Assert.True(result.Success); Assert.Equal(0, lockFile.Libraries.Count); } }
public async Task GetDependencyInfoAsync_GetOriginalIdentity_IdNotInResponseAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var serviceAddress = ProtocolUtility.CreateServiceAddress(); var package = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "WindowsAzure.Storage", "6.2.2-preview"); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { serviceAddress, _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(string.Empty) }) }, { serviceAddress + "FindPackagesById()?id='WINDOWSAZURE.STORAGE'&semVerLevel=2.0.0", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(ProtocolUtility.GetResource("NuGet.Protocol.Tests.compiler.resources.WindowsAzureStorageFindPackagesById.xml", GetType())) }) }, { "https://www.nuget.org/api/v2/package/WindowsAzure.Storage/6.2.2-preview", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) } }; var repo = StaticHttpHandler.CreateSource(serviceAddress, Repository.Provider.GetCoreV3(), responses); var logger = new TestLogger(); using (var cacheContext = new SourceCacheContext()) { var resource = await repo.GetResourceAsync <FindPackageByIdResource>(); // Act var info = await resource.GetDependencyInfoAsync( "WINDOWSAZURE.STORAGE", new NuGetVersion("6.2.2-PREVIEW"), cacheContext, logger, CancellationToken.None); // Assert Assert.IsType <RemoteV2FindPackageByIdResource>(resource); Assert.Equal("WindowsAzure.Storage", info.PackageIdentity.Id); Assert.Equal("6.2.2-preview", info.PackageIdentity.Version.ToNormalizedString()); } } }
public async Task GetDependencyInfoAsync_GetsOriginalIdentityAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "http://unit.test/v3-with-flat-container/index.json"; var package = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "DeepEqual", "1.4.0.1-rc"); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { source, _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(JsonData.IndexWithFlatContainer) }) }, { "https://api.nuget.org/v3-flatcontainer/deepequal/index.json", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(JsonData.DeepEqualFlatContainerIndex) }) }, { "https://api.nuget.org/v3-flatcontainer/deepequal/1.4.0.1-rc/deepequal.1.4.0.1-rc.nupkg", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) } }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var logger = new TestLogger(); using (var cacheContext = new SourceCacheContext()) { var resource = await repo.GetResourceAsync <FindPackageByIdResource>(); // Act var info = await resource.GetDependencyInfoAsync( "DEEPEQUAL", new NuGetVersion("1.4.0.1-RC"), cacheContext, logger, CancellationToken.None); // Assert Assert.IsType <HttpFileSystemBasedFindPackageByIdResource>(resource); Assert.Equal("DeepEqual", info.PackageIdentity.Id); Assert.Equal("1.4.0.1-rc", info.PackageIdentity.Version.ToNormalizedString()); } } }
internal static async Task <PluginFindPackageByIdResourceTest> CreateAsync( MessageResponseCode responseCode = MessageResponseCode.Error) { var packageIdentity = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource("http://unit.test"); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var plugin = new Mock <IPlugin>(); var dispatcher = new Mock <IMessageDispatcher>(); var connection = new Mock <IConnection>(); dispatcher.SetupGet(x => x.RequestHandlers) .Returns(new RequestHandlers()); connection.SetupGet(x => x.MessageDispatcher) .Returns(dispatcher.Object); var versions = responseCode == MessageResponseCode.Success ? new[] { "1.0.0", "2.0.0", "3.0.0" } : null; var response = new GetPackageVersionsResponse(responseCode, versions); connection.Setup(x => x.SendRequestAndReceiveResponseAsync <GetPackageVersionsRequest, GetPackageVersionsResponse>( It.Is <MessageMethod>(m => m == MessageMethod.GetPackageVersions), It.Is <GetPackageVersionsRequest>( c => string.Equals(c.PackageId, packageIdentity.Id, StringComparison.OrdinalIgnoreCase) && c.PackageSourceRepository == packageSource.Source), It.IsAny <CancellationToken>())) .ReturnsAsync(response); plugin.SetupGet(x => x.Connection) .Returns(connection.Object); var utilities = new Mock <IPluginMulticlientUtilities>(); var credentialService = new Mock <ICredentialService>(); var credentialsProvider = new GetCredentialsRequestHandler( plugin.Object, proxy: null, credentialService: credentialService.Object); var resource = new PluginFindPackageByIdResource( plugin.Object, utilities.Object, packageSource); return(new PluginFindPackageByIdResourceTest( resource, package, packageIdentity, connection, new SourceCacheContext(), testDirectory)); }
public async Task GetInstalledVersion_WithFloating_WithAssetsFile_ReturnsVersionsFromAssetsSpecs() { using (var testDirectory = TestDirectory.Create()) { // Setup var projectName = "project1"; var projectFullPath = Path.Combine(testDirectory.Path, projectName + ".csproj"); // Project var projectCache = new ProjectSystemCache(); IVsProjectAdapter projectAdapter = (new Mock <IVsProjectAdapter>()).Object; var project = CreateNetCorePackageReferenceProject(projectName, projectFullPath, projectCache); var projectNames = GetTestProjectNames(projectFullPath, projectName); var packageSpec = GetPackageSpec(projectName, projectFullPath, "[*, )"); // Restore info var projectRestoreInfo = ProjectJsonTestHelpers.GetDGSpecFromPackageSpecs(packageSpec); projectCache.AddProjectRestoreInfo(projectNames, projectRestoreInfo, new List <IAssetsLogMessage>()); projectCache.AddProject(projectNames, projectAdapter, project).Should().BeTrue(); // Package directories var sources = new List <PackageSource>(); var packagesDir = new DirectoryInfo(Path.Combine(testDirectory, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(testDirectory, "packageSource")); packagesDir.Create(); packageSource.Create(); sources.Add(new PackageSource(packageSource.FullName)); var logger = new TestLogger(); var request = new TestRestoreRequest(packageSpec, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(testDirectory, "project.assets.json") }; await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, "packageA", "4.0.0"); // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); await result.CommitAsync(logger, CancellationToken.None); var packages = await project.GetInstalledPackagesAsync(CancellationToken.None); // Asert Assert.True(result.Success); packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("4.0.0")))); var cache_packages = await project.GetInstalledPackagesAsync(CancellationToken.None); cache_packages.Should().Contain(a => a.PackageIdentity.Equals(new PackageIdentity("packageA", new NuGetVersion("4.0.0")))); } }
public async Task PackageUpdateResource_AllowsApiKeyWhenPushingAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "https://www.nuget.org/api/v2"; HttpRequestMessage actualRequest = null; var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { "https://www.nuget.org/api/v2/", request => { actualRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } } }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var resource = await repo.GetResourceAsync <PackageUpdateResource>(); var apiKey = "SomeApiKey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : null, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => apiKey, getSymbolApiKey : _ => null, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : NullLogger.Instance); // Assert Assert.NotNull(actualRequest); Assert.Equal(HttpMethod.Put, actualRequest.Method); IEnumerable <string> values; actualRequest.Headers.TryGetValues(ProtocolConstants.ApiKeyHeader, out values); Assert.Equal(1, values.Count()); Assert.Equal(apiKey, values.First()); Assert.False( actualRequest.GetOrCreateConfiguration().PromptOn403, "When the API key is provided, the user should not be prompted on HTTP 403."); } }
public async Task <DownloadResourceResult> InitializePackageAsync() { var context = new SimpleTestPackageContext(PackageIdentity); context.PackageTypes.Clear(); context.PackageTypes.AddRange(PackageTypes); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( TestDirectory, context); return(new DownloadResourceResult(package.OpenRead(), TestDirectory.Path)); }
internal static async Task <HttpFileSystemBasedFindPackageByIdResourceTest> CreateAsync() { var packageIdentity = new PackageIdentity(id: "DeepEqual", version: NuGetVersion.Parse("1.4.0")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource("http://unit.test/v3-flatcontainer"); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { $"{packageSource.Source}/deepequal/index.json", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(JsonData.DeepEqualFlatContainerIndex) }) }, { $"{packageSource.Source}/deepequal/1.4.0/deepequal.1.4.0.nupkg", _ => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) }, { $"{packageSource.Source}/a/index.json", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.NotFound)) } }; var baseUris = new List <Uri>() { packageSource.SourceUri }; var httpSource = new TestHttpSource(packageSource, responses); var resource = new HttpFileSystemBasedFindPackageByIdResource( baseUris, httpSource); return(new HttpFileSystemBasedFindPackageByIdResourceTest( resource, package, packageIdentity, new SourceCacheContext(), httpSource, testDirectory)); }
internal static async Task <LocalV3FindPackageByIdResourceTest> CreateAsync(bool createFiles = false) { var packageIdentity = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0")); var testDirectory = TestDirectory.Create(); var packageDirectory = Directory.CreateDirectory( Path.Combine( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString())); var packageSource = new PackageSource(testDirectory.Path); FileInfo package = null; // Only a few tests have outcomes that rely on the presence of these files, // so only create them if necessary. if (createFiles) { package = await SimpleTestPackageUtility.CreateFullPackageAsync( packageDirectory.FullName, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); File.WriteAllText( Path.Combine(packageDirectory.FullName, $"{packageIdentity.Id}.nuspec"), $@"<?xml version=""1.0"" encoding=""utf-8""?> <package> <metadata> <id>{packageIdentity.Id}</id> <version>{packageIdentity.Version.ToNormalizedString()}</version> <title /> <frameworkAssemblies> <frameworkAssembly assemblyName=""System.Runtime"" /> </frameworkAssemblies> </metadata> </package>"); File.WriteAllText( Path.Combine( packageDirectory.FullName, $"{packageIdentity.Id}.{packageIdentity.Version.ToNormalizedString()}.nupkg.sha512"), string.Empty); } var resource = new LocalV3FindPackageByIdResource(packageSource); return(new LocalV3FindPackageByIdResourceTest( resource, package, packageIdentity, testDirectory)); }
public static async Task <TestContext> CreateAsync(TestDirectory testDirectory) { var identity = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta")); var packageDirectory = Path.Combine(testDirectory, "packages"); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( packageDirectory, identity.Id, identity.Version.ToString()); var expectedContent = File.ReadAllBytes(package.FullName); return(new TestContext(testDirectory, identity, expectedContent)); }
public async Task CopyPackagesToOriginalCaseAsync_EmitsTelemetryWithParentIdAsync() { // Set up telemetry service var telemetryEvents = new ConcurrentQueue <TelemetryEvent>(); var telSvc = new Mock <INuGetTelemetryService>(); telSvc.Setup(x => x.EmitTelemetryEvent(It.IsAny <TelemetryEvent>())) .Callback <TelemetryEvent>(x => telemetryEvents.Enqueue(x)); TelemetryActivity.NuGetTelemetryService = telSvc.Object; var parentIdGuid = Guid.NewGuid(); // Arrange using (var workingDirectory = TestDirectory.Create()) { var packagesDirectory = Path.Combine(workingDirectory, "packages"); var sourceDirectory = Path.Combine(workingDirectory, "source"); var identity = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta")); var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( sourceDirectory, identity.Id, identity.Version.ToString()); var logger = new TestLogger(); var graphA = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger); var graphB = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger); var request = GetRestoreRequest(packagesDirectory, logger); var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false); var target = new OriginalCaseGlobalPackageFolder(request, parentIdGuid); // Act await target.CopyPackagesToOriginalCaseAsync( new[] { graphA, graphB }, CancellationToken.None); } // Assert var eventSingleCollection = telemetryEvents.Where(x => x.Name == "PackageExtractionInformation"); Assert.Single(eventSingleCollection); var evt = eventSingleCollection.Single(); Assert.NotNull(evt["ParentId"]); Assert.Equal(evt["ParentId"], parentIdGuid.ToString()); }
public async Task PackageUpdateResource_NoServiceEndpointOnCustomServer_ShouldAddEndpointAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "https://nuget.customsrc.net/"; HttpRequestMessage sourceRequest = null; var apiKey = "serverapikey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { "https://nuget.customsrc.net/api/v2/package/", request => { sourceRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } } }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var resource = await repo.GetResourceAsync <PackageUpdateResource>(); UserAgent.SetUserAgentString(new UserAgentStringBuilder("test client")); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : null, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => apiKey, getSymbolApiKey : _ => null, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : NullLogger.Instance); // Assert Assert.NotNull(sourceRequest); Assert.Equal(HttpMethod.Put, sourceRequest.Method); Assert.Equal(source + "api/v2/package/", sourceRequest.RequestUri.AbsoluteUri); } }
internal static async Task <LocalV2FindPackageByIdResourceTest> CreateAsync() { var packageIdentity = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0")); var testDirectory = TestDirectory.Create(); var packagesDirectory = Directory.CreateDirectory(Path.Combine(testDirectory.Path, "packages")); var packageSource = new PackageSource(testDirectory.Path); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( packagesDirectory.FullName, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var resource = new LocalV2FindPackageByIdResource(packageSource); return(new LocalV2FindPackageByIdResourceTest( resource, package, packageIdentity, testDirectory)); }
public async Task Push_WithAnHttpSource_NupkgOnly_Warns() { // Arrange using var workingDir = TestDirectory.Create(); var source = "http://www.nuget.org/api/v2/"; HttpRequestMessage sourceRequest = null; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { source, request => { sourceRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, }; var resource = await StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses).GetResourceAsync <PackageUpdateResource>(); var logger = new TestLogger(); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : string.Empty, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => "serverapikey", getSymbolApiKey : _ => null, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : logger); // Assert Assert.NotNull(sourceRequest); Assert.Equal(1, logger.WarningMessages.Count); Assert.Contains("You are running the 'push' operation with an 'HTTP' source", logger.WarningMessages.First()); }
public async Task CopyPackagesToOriginalCaseAsync_DoesNothingIfPackageIsAlreadyInstalledAsync() { // Arrange using (var workingDirectory = TestDirectory.Create()) { var packagesDirectory = Path.Combine(workingDirectory, "packages"); var sourceDirectory = Path.Combine(workingDirectory, "source"); var identity = new PackageIdentity("PackageA", NuGetVersion.Parse("1.0.0-Beta")); var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( sourceDirectory, identity.Id, identity.Version.ToString()); var logger = new TestLogger(); var graph = GetRestoreTargetGraph(sourceDirectory, identity, packagePath, logger); var request = GetRestoreRequest(packagesDirectory, logger); var resolver = new VersionFolderPathResolver(packagesDirectory, isLowercase: false); var hashPath = resolver.GetNupkgMetadataPath(identity.Id, identity.Version); Directory.CreateDirectory(Path.GetDirectoryName(hashPath)); // The hash file is what determines if the package is installed or not. File.WriteAllText(hashPath, string.Empty); var target = new OriginalCaseGlobalPackageFolder(request); // Act await target.CopyPackagesToOriginalCaseAsync( new[] { graph }, CancellationToken.None); // Assert Assert.True(File.Exists(resolver.GetNupkgMetadataPath(identity.Id, identity.Version))); Assert.Equal(0, logger.Messages.Count(x => x.Contains(identity.ToString()))); } }
public async Task DependencyTypeConstraint_TargetPackageAsync() { // Arrange var sources = new List <PackageSource>(); var project1Json = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""dependencies"": { ""packageA"": { ""version"": ""1.0.0"", ""target"": ""package"" } }, ""frameworks"": { ""net45"": { } } }"; var packageAProjectJson = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""frameworks"": { ""net45"": { } } }"; using (var workingDir = TestDirectory.Create()) { var packagesDir = new DirectoryInfo(Path.Combine(workingDir, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource")); var project1 = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1")); var packageAProject = new DirectoryInfo(Path.Combine(workingDir, "projects", "packageA")); var packageAExternalProject = new DirectoryInfo(Path.Combine(workingDir, "external", "packageA")); packagesDir.Create(); packageSource.Create(); project1.Create(); packageAProject.Create(); packageAExternalProject.Create(); sources.Add(new PackageSource(packageSource.FullName)); File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json); File.WriteAllText(Path.Combine(packageAProject.FullName, "project.json"), packageAProjectJson); var project1ProjPath = Path.Combine(project1.FullName, "project1.xproj"); File.WriteAllText(project1ProjPath, string.Empty); File.WriteAllText(Path.Combine(packageAProject.FullName, "packageA.xproj"), string.Empty); var specPath1 = Path.Combine(project1.FullName, "project.json"); var specPath2 = Path.Combine(packageAProject.FullName, "project.json"); var spec1 = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1).EnsureProjectJsonRestoreMetadata(); var spec2 = JsonPackageSpecReader.GetPackageSpec(packageAProjectJson, "packageA", specPath2).EnsureProjectJsonRestoreMetadata(); var packageAPath = await SimpleTestPackageUtility.CreateFullPackageAsync( packageSource.FullName, "packageA", "1.0.0"); await GlobalFolderUtility.AddPackageToGlobalFolderAsync(packageAPath, packagesDir); var logger = new TestLogger(); var request = new TestRestoreRequest(spec1, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(project1.FullName, "project.lock.json") }; // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); var lockFile = result.LockFile; await result.CommitAsync(logger, CancellationToken.None); var packageALib = lockFile.GetLibrary("packageA", NuGetVersion.Parse("1.0.0")); var packageATarget = lockFile.GetTarget( FrameworkConstants.CommonFrameworks.Net45, runtimeIdentifier: null) .Libraries .Single(lib => lib.Name == "packageA"); // Assert Assert.True(result.Success); Assert.Equal(LibraryType.Package, packageALib.Type); Assert.Equal(LibraryType.Package, packageATarget.Type); } }
public async Task DependencyTypeConstraint_PackagesDependOnProjectAsync() { // Arrange var sources = new List <PackageSource>(); var project1Json = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""dependencies"": { ""packageA"": ""1.0.0"" }, ""frameworks"": { ""net45"": { } } }"; var packageBProjectJson = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""frameworks"": { ""net45"": { } } }"; using (var workingDir = TestDirectory.Create()) { var packagesDir = new DirectoryInfo(Path.Combine(workingDir, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource")); var project1 = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1")); var packageBProject = new DirectoryInfo(Path.Combine(workingDir, "projects", "packageB")); packagesDir.Create(); packageSource.Create(); project1.Create(); packageBProject.Create(); sources.Add(new PackageSource(packageSource.FullName)); File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json); File.WriteAllText(Path.Combine(packageBProject.FullName, "project.json"), packageBProjectJson); var specPath1 = Path.Combine(project1.FullName, "project.json"); var specPath2 = Path.Combine(packageBProject.FullName, "project.json"); var spec1 = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1); var spec2 = JsonPackageSpecReader.GetPackageSpec(packageBProjectJson, "packageB", specPath2); var packageAPath = await SimpleTestPackageUtility.CreateFullPackageAsync( packageSource.FullName, "packageA", "1.0.0", new Packaging.Core.PackageDependency[] { new Packaging.Core.PackageDependency("packageB", VersionRange.Parse("1.0.0")) }); await GlobalFolderUtility.AddPackageToGlobalFolderAsync(packageAPath, packagesDir); var logger = new TestLogger(); var restoreContext = new RestoreArgs() { Sources = new List <string>() { packageSource.FullName }, GlobalPackagesFolder = packagesDir.FullName, Log = logger, CacheContext = new SourceCacheContext() }; // Modify specs for netcore spec2 = spec2.WithTestRestoreMetadata(); spec1 = spec1.WithTestRestoreMetadata().WithTestProjectReference(spec2); var request = await ProjectJsonTestHelpers.GetRequestAsync(restoreContext, spec1, spec2); request.LockFilePath = Path.Combine(project1.FullName, "project.lock.json"); // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); var lockFile = result.LockFile; await result.CommitAsync(logger, CancellationToken.None); // Assert Assert.True(result.Success); var packageBLib = lockFile.GetLibrary("packageB", NuGetVersion.Parse("1.0.0")); Assert.NotNull(packageBLib); Assert.Equal(LibraryType.Project, packageBLib.Type); } }
public async Task BuildAssetsUtils_GeneratePathPropertyForTools(bool hasTools) { using (var pathContext = new SimpleTestPathContext()) { // Arrange var identity = new PackageIdentity("packagea", NuGetVersion.Parse("1.0.0")); var packageDirectory = Directory.CreateDirectory(Path.Combine(pathContext.UserPackagesFolder, identity.Id, identity.Version.ToNormalizedString())); File.WriteAllText(Path.Combine(packageDirectory.FullName, $"{identity.Id}.{identity.Version.ToNormalizedString()}.nupkg.sha512"), string.Empty); var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( packageDirectory.FullName, identity.Id, identity.Version.ToString()); var logger = new TestLogger(); const string referenceSpec = @" { ""frameworks"": { ""netcoreapp1.0"": { ""dependencies"": { } } } }"; var projectName = "a"; var rootProjectsPath = pathContext.WorkingDirectory; var projectDirectory = Path.Combine(rootProjectsPath, projectName); var spec = JsonPackageSpecReader.GetPackageSpec(referenceSpec, projectName, Path.Combine(projectDirectory, projectName)).WithTestRestoreMetadata(); spec.Dependencies.Add(new LibraryDependency { IncludeType = LibraryIncludeFlags.All, LibraryRange = new LibraryRange(identity.Id, new VersionRange(identity.Version), LibraryDependencyTarget.Package) }); var targetGraphs = new List <RestoreTargetGraph> { OriginalCaseGlobalPackageFolderTests.GetRestoreTargetGraph(pathContext.PackageSource, identity, packagePath, logger) }; targetGraphs[0].Graphs.FirstOrDefault().Item.Data.Dependencies = spec.Dependencies; var lockFile = new LockFile { Libraries = { new LockFileLibrary { Name = identity.Id, Version = identity.Version, Path = $"{identity.Id.ToLowerInvariant()}/{identity.Version.ToNormalizedString()}", Type = LibraryType.Package, HasTools = hasTools, } }, Targets = { new LockFileTarget { RuntimeIdentifier = targetGraphs[0].RuntimeIdentifier, TargetFramework = targetGraphs[0].Framework, Libraries = { new LockFileTargetLibrary { Name = identity.Id, Version = identity.Version } } } } }; var repositories = new List <NuGetv3LocalRepository> { new NuGetv3LocalRepository(pathContext.UserPackagesFolder) }; var restoreRequest = new TestRestoreRequest(spec, new[] { new PackageSource(pathContext.PackageSource) }, pathContext.PackagesV2, logger) { ProjectStyle = spec.RestoreMetadata.ProjectStyle }; var assetsFilePath = Path.Combine(projectDirectory, "obj", "project.assets.json"); // Act var outputFiles = BuildAssetsUtils.GetMSBuildOutputFiles(spec, lockFile, targetGraphs, repositories, restoreRequest, assetsFilePath, true, logger); var expectedPropertyName = $"Pkg{identity.Id.Replace(".", "_")}"; var actualPropertyElement = outputFiles.FirstOrDefault().Content.Root.Descendants().Where(i => i.Name.LocalName.Equals(expectedPropertyName)).FirstOrDefault(); if (hasTools) { // Assert Assert.NotNull(actualPropertyElement); Assert.Equal($" '$({actualPropertyElement.Name.LocalName})' == '' ", actualPropertyElement.Attribute("Condition")?.Value); Assert.Equal(packageDirectory.FullName, actualPropertyElement?.Value, ignoreCase: true); Assert.Equal(" '$(ExcludeRestorePackageImports)' != 'true' ", actualPropertyElement.Parent.Attribute("Condition")?.Value); } else { Assert.Null(actualPropertyElement); } } }
public async Task BuildAssetsUtils_GeneratePathProperty() { using (var pathContext = new SimpleTestPathContext()) using (var randomProjectDirectory = TestDirectory.Create()) { // Arrange var identity = new PackageIdentity("packagea", NuGetVersion.Parse("1.0.0")); var packageDirectory = Directory.CreateDirectory(Path.Combine(pathContext.UserPackagesFolder, identity.Id, identity.Version.ToNormalizedString())); File.WriteAllText(Path.Combine(packageDirectory.FullName, $"{identity.Id}.{identity.Version.ToNormalizedString()}.nupkg.sha512"), string.Empty); var packagePath = await SimpleTestPackageUtility.CreateFullPackageAsync( packageDirectory.FullName, identity.Id, identity.Version.ToString()); var logger = new TestLogger(); var spec = ToolRestoreUtility.GetSpec( Path.Combine(pathContext.SolutionRoot, "tool", "fake.csproj"), "a", VersionRange.Parse("1.0.0"), NuGetFramework.Parse("netcoreapp1.0"), pathContext.UserPackagesFolder, new List <string>() { pathContext.FallbackFolder }, new List <PackageSource>() { new PackageSource(pathContext.PackageSource) }, projectWideWarningProperties: null); spec.RestoreMetadata.ProjectStyle = ProjectStyle.PackageReference; spec.Dependencies.Add(new LibraryDependency { GeneratePathProperty = true, IncludeType = LibraryIncludeFlags.All, LibraryRange = new LibraryRange(identity.Id.ToUpperInvariant(), new VersionRange(identity.Version), LibraryDependencyTarget.Package) }); var targetGraphs = new List <RestoreTargetGraph> { OriginalCaseGlobalPackageFolderTests.GetRestoreTargetGraph(pathContext.PackageSource, identity, packagePath, logger) }; targetGraphs[0].Graphs.FirstOrDefault().Item.Data.Dependencies = spec.Dependencies; var lockFile = new LockFile { Libraries = { new LockFileLibrary { Name = identity.Id, Version = identity.Version, Path = $"{identity.Id.ToLowerInvariant()}/{identity.Version.ToNormalizedString()}", Type = LibraryType.Package } }, Targets = { new LockFileTarget { RuntimeIdentifier = targetGraphs[0].RuntimeIdentifier, TargetFramework = targetGraphs[0].Framework, Libraries = { new LockFileTargetLibrary { Name = identity.Id, Version = identity.Version } } } } }; var repositories = new List <NuGetv3LocalRepository> { new NuGetv3LocalRepository(pathContext.UserPackagesFolder) }; var restoreRequest = new TestRestoreRequest(spec, new[] { new PackageSource(pathContext.PackageSource) }, pathContext.PackagesV2, logger) { ProjectStyle = spec.RestoreMetadata.ProjectStyle }; var assetsFilePath = Path.Combine(randomProjectDirectory, "obj", "project.assets.json"); // Act var outputFiles = BuildAssetsUtils.GetMSBuildOutputFiles(spec, lockFile, targetGraphs, repositories, restoreRequest, assetsFilePath, true, logger); // Assert var expectedPropertyGroup = outputFiles.FirstOrDefault().Content.Root.Elements().LastOrDefault(); Assert.NotNull(expectedPropertyGroup); Assert.Equal(" '$(ExcludeRestorePackageImports)' != 'true' ", expectedPropertyGroup.Attribute("Condition")?.Value); var expectedProperty = expectedPropertyGroup.Elements().FirstOrDefault(); Assert.Equal($"Pkg{identity.Id.Replace(".", "_")}", expectedProperty.Name.LocalName); Assert.Equal($" '$({expectedProperty.Name.LocalName})' == '' ", expectedProperty.Attribute("Condition")?.Value); Assert.Equal(packageDirectory.FullName, expectedProperty?.Value, ignoreCase: true); } }
public async Task PackageUpdateResource_GetErrorFromCreateKeyPushingAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "https://www.myget.org/api/v2"; var symbolSource = "https://nuget.smbsrc.net/"; HttpRequestMessage sourceRequest = null; HttpRequestMessage symbolRequest = null; var apiKey = "serverapikey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var symbolPackageInfo = await SimpleTestPackageUtility.CreateSymbolPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { "https://www.myget.org/api/v2/", request => { sourceRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, { "https://nuget.smbsrc.net/api/v2/package/", request => { symbolRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, { "https://www.nuget.org/api/v2/package/create-verification-key/test/1.0.0", request => { return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.InternalServerError))); } } }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var resource = await repo.GetResourceAsync <PackageUpdateResource>(); UserAgent.SetUserAgentString(new UserAgentStringBuilder("test client")); // Act var ex = await Assert.ThrowsAsync <HttpRequestException>( async() => await resource.Push( packagePaths: new[] { packageInfo.FullName }, symbolSource: symbolSource, timeoutInSecond: 5, disableBuffering: false, getApiKey: _ => apiKey, getSymbolApiKey: _ => apiKey, noServiceEndpoint: false, skipDuplicate: false, symbolPackageUpdateResource: null, log: NullLogger.Instance)); // Assert Assert.True(ex.Message.Contains("Response status code does not indicate success: 500 (Internal Server Error)")); } }
public async Task PackageUpdateResource_PackageNotExistOnNuGetOrgPushingAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "https://nuget.smbsrc.net/"; HttpRequestMessage symbolRequest = null; var apiKey = "serverapikey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var symbolPackageInfo = await SimpleTestPackageUtility.CreateSymbolPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { "https://nuget.smbsrc.net/api/v2/package/", request => { symbolRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, { "https://www.nuget.org/api/v2/package/create-verification-key/test/1.0.0", request => { var content = new StringContent(string.Format(JsonData.TempApiKeyJsonData, "tempkey"), Encoding.UTF8, "application/json"); var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = content }; return(Task.FromResult(response)); } } }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var resource = await repo.GetResourceAsync <PackageUpdateResource>(); UserAgent.SetUserAgentString(new UserAgentStringBuilder("test client")); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : null, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => apiKey, getSymbolApiKey : _ => null, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : NullLogger.Instance); // Assert IEnumerable <string> apiValues; IEnumerable <string> symbolClientVersionValues; symbolRequest.Headers.TryGetValues(ApiKeyHeader, out apiValues); symbolRequest.Headers.TryGetValues(NuGetClientVersionHeader, out symbolClientVersionValues); Assert.Equal("tempkey", apiValues.First()); Assert.NotNull(symbolClientVersionValues.First()); } }
internal static async Task <RemoteV2FindPackageByIdResourceTest> CreateAsync() { var serviceAddress = ProtocolUtility.CreateServiceAddress(); var packageIdentity = new PackageIdentity( id: "xunit", version: NuGetVersion.Parse("2.2.0-beta1-build3239")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource(serviceAddress); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { serviceAddress, request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(string.Empty) }) }, { serviceAddress + $"FindPackagesById()?id='{packageIdentity.Id}'&semVerLevel=2.0.0", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent( ProtocolUtility.GetResource( "NuGet.Protocol.Tests.compiler.resources.XunitFindPackagesById.xml", typeof(RemoteV2FindPackageByIdResourceTest))) }) }, { serviceAddress + $"FindPackagesById()?id='{packageIdentity.Id.ToUpper()}'&semVerLevel=2.0.0", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent( ProtocolUtility.GetResource( "NuGet.Protocol.Tests.compiler.resources.XunitFindPackagesById.xml", typeof(RemoteV2FindPackageByIdResourceTest))) }) }, { "https://www.nuget.org/api/v2/package/xunit/2.2.0-beta1-build3239", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) }, { serviceAddress + $"FindPackagesById()?id='a'&semVerLevel=2.0.0", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.NoContent)) } }; var httpSource = new TestHttpSource(packageSource, responses); var resource = new RemoteV2FindPackageByIdResource( packageSource, httpSource); return(new RemoteV2FindPackageByIdResourceTest( resource, packageSource, package, packageIdentity, new SourceCacheContext(), httpSource, testDirectory)); }
public async Task PackageUpdateResource_NuGetOrgSourceOnlyPushingAsync() { // Arrange using (var workingDir = TestDirectory.Create()) { var source = "https://www.nuget.org/api/v2"; var symbolSource = "https://other.smbsrc.net/"; HttpRequestMessage sourceRequest = null; HttpRequestMessage symbolRequest = null; var apiKey = "serverapikey"; var packageInfo = await SimpleTestPackageUtility.CreateFullPackageAsync(workingDir, "test", "1.0.0"); var symbolPackageInfo = await SimpleTestPackageUtility.CreateSymbolPackageAsync(workingDir, "test", "1.0.0"); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { "https://www.nuget.org/api/v2/", request => { sourceRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, { "https://other.smbsrc.net/api/v2/package/", request => { symbolRequest = request; return(Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK))); } }, }; var repo = StaticHttpHandler.CreateSource(source, Repository.Provider.GetCoreV3(), responses); var resource = await repo.GetResourceAsync <PackageUpdateResource>(); UserAgent.SetUserAgentString(new UserAgentStringBuilder("test client")); var logger = new TestLogger(); // Act await resource.Push( packagePaths : new[] { packageInfo.FullName }, symbolSource : symbolSource, timeoutInSecond : 5, disableBuffering : false, getApiKey : _ => apiKey, getSymbolApiKey : _ => apiKey, noServiceEndpoint : false, skipDuplicate : false, symbolPackageUpdateResource : null, log : logger); // Assert IEnumerable <string> apiValues; IEnumerable <string> symbolClientVersionValues; IEnumerable <string> sourceClientVersionValues; symbolRequest.Headers.TryGetValues(ApiKeyHeader, out apiValues); symbolRequest.Headers.TryGetValues(NuGetClientVersionHeader, out symbolClientVersionValues); sourceRequest.Headers.TryGetValues(NuGetClientVersionHeader, out sourceClientVersionValues); Assert.Equal("serverapikey", apiValues.First()); Assert.NotNull(symbolClientVersionValues.First()); Assert.NotNull(sourceClientVersionValues.First()); Assert.Equal(0, logger.WarningMessages.Count); } }
internal static async Task <RemoteV3FindPackageByIdResourceTest> CreateAsync() { var serviceAddress = ProtocolUtility.CreateServiceAddress(); var packageIdentity = new PackageIdentity( id: "xunit", version: NuGetVersion.Parse("2.2.0-beta1-build3239")); var testDirectory = TestDirectory.Create(); var packageSource = new PackageSource(serviceAddress); var dependencyInfoResourceProvider = new Mock <INuGetResourceProvider>(); var dependencyInfoResource = new Mock <DependencyInfoResource>(); var remoteSourceDependencyInfo = new RemoteSourceDependencyInfo( packageIdentity, listed: true, dependencyGroups: Enumerable.Empty <PackageDependencyGroup>(), contentUri: serviceAddress + "api/v2/package/xunit/2.2.0-beta1-build3239"); dependencyInfoResource.Setup(x => x.ResolvePackages( It.Is <string>(id => id == packageIdentity.Id), It.IsAny <SourceCacheContext>(), It.IsNotNull <ILogger>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new[] { remoteSourceDependencyInfo }); dependencyInfoResourceProvider.SetupGet(x => x.Before) .Returns(Enumerable.Empty <string>()); dependencyInfoResourceProvider.SetupGet(x => x.After) .Returns(Enumerable.Empty <string>()); dependencyInfoResourceProvider.SetupGet(x => x.ResourceType) .Returns(typeof(DependencyInfoResource)); dependencyInfoResourceProvider.SetupGet(x => x.Name) .Returns("DependencyInfoResourceProvider"); dependencyInfoResourceProvider.Setup( x => x.TryCreate(It.IsNotIn <SourceRepository>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new Tuple <bool, INuGetResource>(true, dependencyInfoResource.Object)); var sourceRepository = new SourceRepository( packageSource, new[] { dependencyInfoResourceProvider.Object }); var package = await SimpleTestPackageUtility.CreateFullPackageAsync( testDirectory.Path, packageIdentity.Id, packageIdentity.Version.ToNormalizedString()); var packageBytes = File.ReadAllBytes(package.FullName); var responses = new Dictionary <string, Func <HttpRequestMessage, Task <HttpResponseMessage> > > { { serviceAddress, request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new TestContent(string.Empty) }) }, { serviceAddress + "api/v2/package/xunit/2.2.0-beta1-build3239", request => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(packageBytes) }) } }; var httpSource = new TestHttpSource(packageSource, responses); var resource = new RemoteV3FindPackageByIdResource( sourceRepository, httpSource); return(new RemoteV3FindPackageByIdResourceTest( resource, sourceRepository, package, packageIdentity, new SourceCacheContext(), httpSource, testDirectory)); }
public async Task RestoreSemVer_RestorePackageWithMetadata_DifferentMetadataDoesNotMatterAsync() { // Arrange var sources = new List <PackageSource>(); var project1Json = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""frameworks"": { ""netstandard1.5"": { ""dependencies"": { ""packageA"": ""1.0.0+1"" } } } }"; using (var workingDir = TestDirectory.Create()) { var packagesDir = new DirectoryInfo(Path.Combine(workingDir, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource")); var project1 = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1")); packagesDir.Create(); packageSource.Create(); project1.Create(); sources.Add(new PackageSource(packageSource.FullName)); File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json); var specPath1 = Path.Combine(project1.FullName, "project.json"); var spec1 = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1); var logger = new TestLogger(); var request = new TestRestoreRequest(spec1, sources, packagesDir.FullName, logger) { LockFilePath = Path.Combine(project1.FullName, "project.lock.json") }; var packageAContext = new SimpleTestPackageContext("packageA") { Version = "1.0.0+B" }; packageAContext.AddFile("lib/netstandard1.5/a.dll"); await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, packageAContext); // Act var command = new RestoreCommand(request); var result = await command.ExecuteAsync(); var lockFile = result.LockFile; await result.CommitAsync(logger, CancellationToken.None); var targetLib = lockFile.GetTarget(NuGetFramework.Parse("netstandard1.5"), null) .Libraries .Single(library => library.Name == "packageA"); var compile = targetLib.CompileTimeAssemblies.Single(); // Assert Assert.True(result.Success); Assert.Equal("lib/netstandard1.5/a.dll", compile.Path); Assert.Equal("1.0.0", targetLib.Version.ToNormalizedString()); } }
public async Task RestoreRunner_BasicRestore_VerifyFailureWritesFilesAsync() { // Arrange var sources = new List <PackageSource>(); var project1Json = @" { ""version"": ""1.0.0"", ""description"": """", ""authors"": [ ""author"" ], ""tags"": [ """" ], ""projectUrl"": """", ""licenseUrl"": """", ""frameworks"": { ""net45"": { ""dependencies"": { ""x"": ""1.0.0"" } } } }"; using (var workingDir = TestDirectory.Create()) { var packagesDir = new DirectoryInfo(Path.Combine(workingDir, "globalPackages")); var packageSource = new DirectoryInfo(Path.Combine(workingDir, "packageSource")); var project1 = new DirectoryInfo(Path.Combine(workingDir, "projects", "project1")); packagesDir.Create(); packageSource.Create(); project1.Create(); sources.Add(new PackageSource(packageSource.FullName)); File.WriteAllText(Path.Combine(project1.FullName, "project.json"), project1Json); var specPath1 = Path.Combine(project1.FullName, "project.json"); var spec1 = JsonPackageSpecReader.GetPackageSpec(project1Json, "project1", specPath1); spec1 = spec1.EnsureRestoreMetadata(); spec1.RestoreMetadata.Sources = new List <PackageSource> { new PackageSource(packageSource.FullName) }; spec1.RestoreMetadata.PackagesPath = packagesDir.FullName; var dgFile = new DependencyGraphSpec(); dgFile.AddProject(spec1); dgFile.AddRestore("project1"); var logger = new TestLogger(); var lockPath = Path.Combine(project1.FullName, "project.assets.json"); var sourceRepos = sources.Select(source => Repository.Factory.GetCoreV3(source.Source)).ToList(); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.AddFile("build/net45/x.targets"); var packageY = new SimpleTestPackageContext("y"); packageX.Dependencies.Add(packageY); var yPath = await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, packageY); await SimpleTestPackageUtility.CreateFullPackageAsync(packageSource.FullName, packageX); // y does not exist yPath.Delete(); var providerCache = new RestoreCommandProvidersCache(); using (var cacheContext = new SourceCacheContext()) { var restoreContext = new RestoreArgs() { CacheContext = cacheContext, DisableParallel = true, GlobalPackagesFolder = packagesDir.FullName, Sources = new List <string>() { packageSource.FullName }, Log = logger, CachingSourceProvider = new CachingSourceProvider(new TestPackageSourceProvider(sources)), PreLoadedRequestProviders = new List <IPreLoadedRestoreRequestProvider>() { new DependencyGraphSpecRequestProvider(providerCache, dgFile) } }; var targetsPath = Path.Combine(project1.FullName, "project1.csproj.nuget.g.targets"); var propsPath = Path.Combine(project1.FullName, "project1.nuget.props"); // Act var summaries = await RestoreRunner.RunAsync(restoreContext); var summary = summaries.Single(); var targets = TargetsUtility.GetMSBuildPackageImports(targetsPath); // Assert Assert.False(summary.Success); Assert.True(File.Exists(lockPath), lockPath); Assert.True(File.Exists(targetsPath)); Assert.False(File.Exists(propsPath)); Assert.Equal(1, targets.Count); } } }