StoredPackage ReadPackageFile(string filePath) { try { var metadata = new ZipPackage(filePath); using (var hashStream = metadata.GetStream()) { var hash = HashCalculator.Hash(hashStream); var packageMetadata = new PackageMetadata { Id = metadata.Id, Version = metadata.Version.ToString(), Hash = hash }; return(new StoredPackage(packageMetadata, filePath)); } } catch (FileNotFoundException) { return(null); } catch (IOException) { return(null); } catch (FileFormatException) { return(null); } }
private void PushPackage(string packagePath, string source, string apiKey = null) { var gallery = new GalleryServer(source); // Use the specified api key or fall back to default behavior apiKey = apiKey ?? GetApiKey(source); // Push the package to the server var package = new ZipPackage(packagePath); Console.WriteLine(NuGetResources.PushCommandPushingPackage, package.GetFullName(), CommandLineUtility.GetSourceDisplayName(source)); using (Stream stream = package.GetStream()) { gallery.CreatePackage(apiKey, stream); } // Publish the package on the server if (!CreateOnly) { var cmd = new PublishCommand(); cmd.Console = Console; cmd.Source = source; cmd.Arguments = new List <string> { package.Id, package.Version.ToString(), apiKey }; cmd.Execute(); } else { Console.WriteLine(NuGetResources.PushCommandPackageCreated, source); } }
private void CreatePackageFile(Stream stream, string packagesDirPath) { var package = new ZipPackage(stream); var packageFileName = string.Format("{0}.{1}.nupkg", package.Id, package.Version); AllPackages.Add(package); var filePath = packagesDirPath + "/" + packageFileName; using (var fileStream = File.Create(filePath)) { fileStream.Seek(0, SeekOrigin.Begin); using (var s = package.GetStream()) s.CopyTo(fileStream); } }
private void PushPackageCore(string source, string apiKey, PackageServer packageServer, string packageToPush, TimeSpan timeout) { // Push the package to the server var package = new ZipPackage(packageToPush); string sourceName = CommandLineUtility.GetSourceDisplayName(source); Console.WriteLine(NuGetResources.PushCommandPushingPackage, package.GetFullName(), sourceName); using (Stream stream = package.GetStream()) { packageServer.PushPackage(apiKey, stream, Convert.ToInt32(timeout.TotalMilliseconds)); } if (CreateOnly) { Console.WriteWarning(NuGetResources.Warning_PublishPackageDeprecated); } Console.WriteLine(NuGetResources.PushCommandPackagePushed); }
public void Publish(string packagePath, string apiKey) { var logPath = _pathService.GetRelative(packagePath); _context.WriteTrace(LogEntryType.Information, $"Pushing \"{logPath}\" to NuGet repository"); var packageServer = new PackageServer(_sourceUrl, _userAgent); try { var package = new ZipPackage(packagePath); using (var stream = package.GetStream()) { packageServer.PushPackage(apiKey, package, stream.Length, _publishTimeout, true); _context.WriteTrace(LogEntryType.Information, $"\"{logPath}\" was pushed successfully"); } } catch (Exception ex) { Trace.TraceError("*Exception: {0}, StackTrace", ex.Message, ex.StackTrace); throw; } }
private void PushPackage(string packagePath, string source, string apiKey) { var packageServer = new PackageServer(source, "NuGet Command Line"); // Push the package to the server var package = new ZipPackage(packagePath); bool complete = false; //HACK no pretty source name, as they have made the call to CommandLineUtility.GetSourceDisplayName(source) internal Console.WriteLine("Pushing {0} to {1}", package.GetFullName(), source); try { using (Stream stream = package.GetStream()) { packageServer.PushPackage(apiKey, stream, 60000); } } catch { if (!complete) { Console.WriteLine(); } throw; } // Publish the package on the server var cmd = new PublishCommand(); cmd.Console = Console; cmd.Source = source; cmd.Arguments.AddRange(new List <string> { package.Id, package.Version.ToString(), apiKey }); cmd.Execute(); }
private void PushPackage(string packagePath, string source, string apiKey) { var packageServer = new PackageServer(source, "NuGet Command Line"); // Push the package to the server var package = new ZipPackage(packagePath); //HACK no pretty source name, as they have made the call to CommandLineUtility.GetSourceDisplayName(source) internal Console.WriteLine("Pushing {0} to {1}", package.GetFullName(), source); try { using (package.GetStream()) { var fileSize = new FileInfo(packagePath).Length; packageServer.PushPackage(apiKey, package, fileSize, 60000, false); } } catch { Console.WriteLine(); throw; } }
public void RestoreRetry_ProjectJsonRetryOnFailingV2Source() { // Arrange var nugetexe = Util.GetNuGetExePath(); using (var workingDirectory = TestDirectory.Create()) using (var packageDirectory = TestDirectory.Create()) { var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); var projectJson = @"{ ""dependencies"": { ""testPackage1"": ""1.1.0"" }, ""frameworks"": { ""net45"": { } } }"; var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <config> <add key=""globalPackagesFolder"" value=""globalPackages"" /> </config> </configuration>"; var projectFile = Util.CreateUAPProject(workingDirectory, projectJson, "a", config); // Server setup using (var server = new MockServer()) { var hitsByUrl = new ConcurrentDictionary <string, int>(); server.Get.Add("/", r => { var path = server.GetRequestUrlPathAndQuery(r); // track hits on the url var urlHits = hitsByUrl.AddOrUpdate(path, 1, (s, i) => i + 1); // Fail on the first 2 requests for every url if (urlHits < 3) { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 503; })); } if (path == "/nuget/$metadata") { return(new Action <HttpListenerResponse>(response => { MockServer.SetResponseContent(response, Util.GetMockServerResource()); })); } else if (path == "/package/testPackage1/1.1.0") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); } else if (path == "/nuget/FindPackagesById()?id='testPackage1'") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/atom+xml;type=feed;charset=utf-8"; string feed = server.ToODataFeed(new[] { package }, "FindPackagesById"); MockServer.SetResponseContent(response, feed); })); } else if (path == "/nuget") { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 200; })); } throw new Exception("This test needs to be updated to support: " + path); }); server.Start(); // Act var args = string.Format( "restore {0} -SolutionDirectory . -Source {1}nuget -NoCache", projectFile, server.Uri); var timer = new Stopwatch(); timer.Start(); var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); timer.Stop(); server.Stop(); // Assert Assert.True(Util.IsSuccess(r1), r1.Item2 + " " + r1.Item3); Assert.True( File.Exists( Path.Combine(workingDirectory, "globalPackages/testpackage1/1.1.0/testpackage1.1.1.0.nupkg"))); Assert.True( File.Exists( Path.Combine(workingDirectory, "globalPackages/testpackage1/1.1.0/testPackage1.1.1.0.nupkg.sha512"))); Assert.True(File.Exists(Path.Combine(workingDirectory, "project.lock.json"))); // Everything should be hit 3 times foreach (var url in hitsByUrl.Keys) { Assert.True(hitsByUrl[url] == 3, url); } } } }
public void RestoreRetry_PackagesConfigRetryOnFailingV2Source() { // Arrange var nugetexe = Util.GetNuGetExePath(); using (var workingDirectory = TestDirectory.Create()) using (var packageDirectory = TestDirectory.Create()) { var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); Util.CreateFile( workingDirectory, "packages.config", @"<packages> <package id=""testPackage1"" version=""1.1.0"" /> </packages>"); // Server setup using (var server = new MockServer()) { var hitsByUrl = new ConcurrentDictionary <string, int>(); server.Get.Add("/", r => { var path = server.GetRequestUrlPathAndQuery(r); // track hits on the url var urlHits = hitsByUrl.AddOrUpdate(path, 1, (s, i) => i + 1); if (path == "/nuget/$metadata") { return(new Action <HttpListenerResponse>(response => { MockServer.SetResponseContent(response, Util.GetMockServerResource()); })); } else if (path == "/package/testPackage1/1.1.0") { // Fail on the first two requests for this download if (urlHits < 3) { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 503; })); } return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); } else if (path == "/nuget/Packages(Id='testPackage1',Version='1.1.0')") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/atom+xml;type=entry;charset=utf-8"; var odata = server.ToOData(package); MockServer.SetResponseContent(response, odata); })); } else if (path == "/nuget") { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 200; })); } throw new Exception("This test needs to be updated to support: " + path); }); server.Start(); // Act var args = string.Format( "restore packages.config -SolutionDirectory . -Source {0}nuget -NoCache", server.Uri); var timer = new Stopwatch(); timer.Start(); var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); timer.Stop(); server.Stop(); // Assert Assert.True(Util.IsSuccess(r1), r1.Item2 + " " + r1.Item3); Assert.True( File.Exists( Path.Combine(workingDirectory, "packages/testpackage1.1.1.0/testpackage1.1.1.0.nupkg"))); } } }
public void InstallCommand_WithVersionSpecified() { var targetDir = ConfigurationManager.AppSettings["TargetDir"]; var nugetexe = Path.Combine(targetDir, "nuget.exe"); var tempPath = Path.GetTempPath(); var workingDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var packageDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var mockServerEndPoint = "http://localhost:1234/"; try { // Arrange Util.CreateDirectory(packageDirectory); Util.CreateDirectory(workingDirectory); var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); MachineCache.Default.RemovePackage(package); var server = new MockServer(mockServerEndPoint); bool getPackageByVersionIsCalled = false; bool packageDownloadIsCalled = false; server.Get.Add("/nuget/Packages(Id='testPackage1',Version='1.1.0')", r => new Action <HttpListenerResponse>(response => { getPackageByVersionIsCalled = true; response.ContentType = "application/atom+xml;type=entry;charset=utf-8"; var p1 = server.ToOData(package); MockServer.SetResponseContent(response, p1); })); server.Get.Add("/package/testPackage1", r => new Action <HttpListenerResponse>(response => { packageDownloadIsCalled = true; response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); server.Get.Add("/nuget", r => "OK"); server.Start(); // Act var args = "install testPackage1 -Version 1.1.0 -Source " + mockServerEndPoint + "nuget"; var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); server.Stop(); // Assert Assert.Equal(0, r1.Item1); Assert.True(getPackageByVersionIsCalled); Assert.True(packageDownloadIsCalled); } finally { // Cleanup Util.DeleteDirectory(packageDirectory); Util.DeleteDirectory(workingDirectory); } }
public void InstallCommand_DownloadPackageWhenHashChanges() { var targetDir = ConfigurationManager.AppSettings["TargetDir"]; var nugetexe = Path.Combine(targetDir, "nuget.exe"); var tempPath = Path.GetTempPath(); var packageDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var workingDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var mockServerEndPoint = "http://localhost:1234/"; try { // Arrange Util.CreateDirectory(packageDirectory); Util.CreateDirectory(workingDirectory); var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); MachineCache.Default.RemovePackage(package); // add the package to machine cache MachineCache.Default.AddPackage(package); // create a new package. Now this package has different hash value from the package in // the machine cache. packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); package = new ZipPackage(packageFileName); var server = new MockServer(mockServerEndPoint); string findPackagesByIdRequest = string.Empty; bool packageDownloadIsCalled = false; server.Get.Add("/nuget/FindPackagesById()", r => new Action <HttpListenerResponse>(response => { findPackagesByIdRequest = r.Url.ToString(); response.ContentType = "application/atom+xml;type=feed;charset=utf-8"; string feed = server.ToODataFeed(new[] { package }, "FindPackagesById"); MockServer.SetResponseContent(response, feed); })); server.Get.Add("/nuget/Packages(Id='testPackage1',Version='1.1.0')", r => new Action <HttpListenerResponse>(response => { response.ContentType = "application/atom+xml;type=entry;charset=utf-8"; var p1 = server.ToOData(package); MockServer.SetResponseContent(response, p1); })); server.Get.Add("/package/testPackage1", r => new Action <HttpListenerResponse>(response => { packageDownloadIsCalled = true; response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); server.Get.Add("/nuget", r => "OK"); server.Start(); // Act var args = "install testPackage1 -Source " + mockServerEndPoint + "nuget"; var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); server.Stop(); // Assert Assert.Equal(0, r1.Item1); Assert.Contains("$filter=IsLatestVersion", findPackagesByIdRequest); // verifies that package is downloaded from server since the cached version has // a different hash from the package on the server. Assert.True(packageDownloadIsCalled); } finally { // Cleanup Util.DeleteDirectory(packageDirectory); Util.DeleteDirectory(workingDirectory); } }
public void RestoreCommand_FromHttpSource() { var targetDir = ConfigurationManager.AppSettings["TargetDir"]; var nugetexe = Path.Combine(targetDir, "nuget.exe"); var tempPath = Path.GetTempPath(); var workingDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var packageDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var mockServerEndPoint = "http://*****:*****@" <packages> <package id=""testPackage1"" version=""1.1.0"" /> </packages>"); var server = new MockServer(mockServerEndPoint); bool getPackageByVersionIsCalled = false; bool packageDownloadIsCalled = false; server.Get.Add("/nuget/Packages(Id='testPackage1',Version='1.1.0')", r => new Action<HttpListenerResponse>(response => { getPackageByVersionIsCalled = true; response.ContentType = "application/atom+xml;type=entry;charset=utf-8"; var odata = server.ToOData(package); MockServer.SetResponseContent(response, odata); })); server.Get.Add("/package/testPackage1", r => new Action<HttpListenerResponse>(response => { packageDownloadIsCalled = true; response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); server.Get.Add("/nuget", r => "OK"); server.Start(); // Act var args = "restore packages.config -PackagesDirectory . -Source " + mockServerEndPoint + "nuget"; var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); server.Stop(); // Assert Assert.Equal(0, r1.Item1); Assert.True(getPackageByVersionIsCalled); Assert.True(packageDownloadIsCalled); } finally { // Cleanup Util.DeleteDirectory(packageDirectory); Util.DeleteDirectory(workingDirectory); } }
private void PushPackage(string packagePath, string source, string apiKey) { var gallery = new GalleryServer(source); // Push the package to the server var package = new ZipPackage(packagePath); bool complete = false; gallery.ProgressAvailable += (sender, e) => { Console.Write("\r" + "Pushing: {0}", e.PercentComplete); if (e.PercentComplete == 100) { Console.WriteLine(); complete = true; } }; Console.WriteLine("Pushing {0} to {1}", package.GetFullName(), SourceProvider.GetDisplayName(source)); try { using (Stream stream = package.GetStream()) { gallery.CreatePackage(apiKey, stream); } } catch { if (!complete) { Console.WriteLine(); } throw; } // Publish the package on the server var cmd = new PublishCommand(SourceProvider); cmd.Console = Console; cmd.Source = source; cmd.Arguments = new List<string> { package.Id, package.Version.ToString(), apiKey }; cmd.Execute(); }
public void InstallCommand_DownloadPackageWhenHashChanges() { var targetDir = ConfigurationManager.AppSettings["TargetDir"]; var nugetexe = Path.Combine(targetDir, "nuget.exe"); var tempPath = Path.GetTempPath(); var packageDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var workingDirectory = Path.Combine(tempPath, Guid.NewGuid().ToString()); var mockServerEndPoint = "http://localhost:1234/"; try { // Arrange Util.CreateDirectory(packageDirectory); Util.CreateDirectory(workingDirectory); var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); MachineCache.Default.RemovePackage(package); // add the package to machine cache MachineCache.Default.AddPackage(package); // create a new package. Now this package has different hash value from the package in // the machine cache. packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); package = new ZipPackage(packageFileName); var server = new MockServer(mockServerEndPoint); string findPackagesByIdRequest = string.Empty; bool packageDownloadIsCalled = false; server.Get.Add("/nuget/FindPackagesById()", r => new Action<HttpListenerResponse>(response => { findPackagesByIdRequest = r.Url.ToString(); response.ContentType = "application/atom+xml;type=feed;charset=utf-8"; string feed = server.ToODataFeed(new[] { package }, "FindPackagesById"); MockServer.SetResponseContent(response, feed); })); server.Get.Add("/nuget/Packages(Id='testPackage1',Version='1.1.0')", r => new Action<HttpListenerResponse>(response => { response.ContentType = "application/atom+xml;type=entry;charset=utf-8"; var p1 = server.ToOData(package); MockServer.SetResponseContent(response, p1); })); server.Get.Add("/package/testPackage1", r => new Action<HttpListenerResponse>(response => { packageDownloadIsCalled = true; response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); server.Get.Add("/nuget", r => "OK"); server.Start(); // Act var args = "install testPackage1 -Source " + mockServerEndPoint + "nuget"; var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); server.Stop(); // Assert Assert.Equal(0, r1.Item1); Assert.Contains("$filter=IsLatestVersion", findPackagesByIdRequest); // verifies that package is downloaded from server since the cached version has // a different hash from the package on the server. Assert.True(packageDownloadIsCalled); } finally { // Cleanup Util.DeleteDirectory(packageDirectory); Util.DeleteDirectory(workingDirectory); } }
private void PushPackage(string packagePath, string source, string apiKey = null) { var gallery = new GalleryServer(source); // Use the specified api key or fall back to default behavior apiKey = apiKey ?? GetApiKey(source); // Push the package to the server var package = new ZipPackage(packagePath); Console.WriteLine(NuGetResources.PushCommandPushingPackage, package.GetFullName(), CommandLineUtility.GetSourceDisplayName(source)); using (Stream stream = package.GetStream()) { gallery.CreatePackage(apiKey, stream); } // Publish the package on the server if (!CreateOnly) { var cmd = new PublishCommand(); cmd.Console = Console; cmd.Source = source; cmd.Arguments = new List<string> { package.Id, package.Version.ToString(), apiKey }; cmd.Execute(); } else { Console.WriteLine(NuGetResources.PushCommandPackageCreated, source); } }
private void PushPackage(string packagePath, string source, string apiKey) { var packageServer = new PackageServer(source, CommandLineConstants.UserAgent); // Push the package to the server var package = new ZipPackage(packagePath); string sourceName = CommandLineUtility.GetSourceDisplayName(source); Console.WriteLine(NuGetResources.PushCommandPushingPackage, package.GetFullName(), sourceName); using (Stream stream = package.GetStream()) { packageServer.PushPackage(apiKey, stream); } if (CreateOnly) { Console.WriteWarning(NuGetResources.Warning_PublishPackageDeprecated); } Console.WriteLine(NuGetResources.PushCommandPackagePushed); }
public void RestoreRetry_ProjectJsonRetryOnFailingV3Source() { // Arrange var nugetexe = Util.GetNuGetExePath(); using (var workingDirectory = TestDirectory.Create()) using (var packageDirectory = TestDirectory.Create()) { var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); var projectJsonContent = @"{ ""dependencies"": { ""testPackage1"": ""1.1.0"" }, ""frameworks"": { ""net45"": { } } }"; var nugetConfigContent = @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <config> <add key=""globalPackagesFolder"" value=""globalPackages"" /> </config> </configuration>"; var projectFile = Util.CreateUAPProject(workingDirectory, projectJsonContent, "a", nugetConfigContent); // Server setup var indexJson = Util.CreateIndexJson(); using (var server = new MockServer()) { Util.AddFlatContainerResource(indexJson, server); Util.AddRegistrationResource(indexJson, server); var hitsByUrl = new ConcurrentDictionary <string, int>(); server.Get.Add("/", r => { var path = server.GetRequestUrlAbsolutePath(r); // track hits on the url var urlHits = hitsByUrl.AddOrUpdate(path, 1, (s, i) => i + 1); // Fail on the first 2 requests for every url if (urlHits < 3) { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 503; })); } if (path == "/index.json") { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 200; response.ContentType = "text/javascript"; MockServer.SetResponseContent(response, indexJson.ToString()); })); } else if (path == "/flat/testpackage1/1.1.0/testpackage1.1.1.0.nupkg") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); } else if (path == "/flat/testpackage1/index.json") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "text/javascript"; MockServer.SetResponseContent(response, @"{ ""versions"": [ ""0.1.0"", ""0.3.0"", ""0.4.0"", ""0.5.0"", ""1.0.0"", ""1.1.0"", ""1.2.0"" ] }"); })); } throw new Exception("This test needs to be updated to support: " + path); }); server.Start(); // The minimum time is the number of urls x 3 waits x 200ms var minTime = TimeSpan.FromMilliseconds(hitsByUrl.Count * 3 * 200); // Act var args = string.Format( "restore {0} -SolutionDirectory . -Source {1}index.json -NoCache", projectFile, server.Uri); var timer = new Stopwatch(); timer.Start(); var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); timer.Stop(); server.Stop(); // Assert Assert.True(Util.IsSuccess(r1), r1.Item2 + " " + r1.Item3); Assert.True( File.Exists( Path.Combine(workingDirectory, "globalPackages/testpackage1/1.1.0/testpackage1.1.1.0.nupkg"))); Assert.True( File.Exists( Path.Combine(workingDirectory, "globalPackages/testpackage1/1.1.0/testPackage1.1.1.0.nupkg.sha512"))); Assert.True(File.Exists(Path.Combine(workingDirectory, "project.lock.json"))); // Everything should be hit 3 times foreach (var url in hitsByUrl.Keys) { Assert.True(hitsByUrl[url] == 3, url); } Assert.True(timer.Elapsed > minTime); } } }
private void PushPackage(string packagePath, string source, string apiKey) { var packageServer = new PackageServer(source, "NuGet Command Line"); // Push the package to the server var package = new ZipPackage(packagePath); //HACK no pretty source name, as they have made the call to CommandLineUtility.GetSourceDisplayName(source) internal Console.WriteLine("Pushing {0} to {1}", package.GetFullName(), source); try { using (package.GetStream()) { packageServer.PushPackage(apiKey, package, 60000); } } catch { Console.WriteLine(); throw; } }
private void PushPackage(string packagePath, string source, string apiKey) { var packageServer = new PackageServer(source, "NuGet Command Line"); // Push the package to the server var package = new ZipPackage(packagePath); bool complete = false; //HACK no pretty source name, as they have made the call to CommandLineUtility.GetSourceDisplayName(source) internal Console.WriteLine("Pushing {0} to {1}", package.GetFullName(), source); try { using (Stream stream = package.GetStream()) { packageServer.PushPackage(apiKey, stream, 60000); } } catch { if (!complete) { Console.WriteLine(); } throw; } // Publish the package on the server var cmd = new PublishCommand(); cmd.Console = Console; cmd.Source = source; cmd.Arguments.AddRange(new List<string> { package.Id, package.Version.ToString(), apiKey }); cmd.Execute(); }
public void RestoreRetry_PackagesConfigRetryOnFailingV3Source() { // Arrange var nugetexe = Util.GetNuGetExePath(); using (var workingDirectory = TestDirectory.Create()) using (var packageDirectory = TestDirectory.Create()) { var packageFileName = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory); var package = new ZipPackage(packageFileName); Util.CreateFile( workingDirectory, "packages.config", @"<packages> <package id=""testPackage1"" version=""1.1.0"" /> </packages>"); Util.CreateFile( workingDirectory, "nuget.config", @"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <config> <add key=""globalPackagesFolder"" value=""globalPackages"" /> </config> </configuration>"); // Server setup var indexJson = Util.CreateIndexJson(); using (var server = new MockServer()) { Util.AddFlatContainerResource(indexJson, server); Util.AddRegistrationResource(indexJson, server); var hitsByUrl = new ConcurrentDictionary <string, int>(); server.Get.Add("/", r => { var path = server.GetRequestUrlAbsolutePath(r); // track hits on the url var urlHits = hitsByUrl.AddOrUpdate(path, 1, (s, i) => i + 1); // Fail on the first 2 requests for every url if (urlHits < 3) { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 503; })); } if (path == "/index.json") { return(new Action <HttpListenerResponse>(response => { response.StatusCode = 200; response.ContentType = "text/javascript"; MockServer.SetResponseContent(response, indexJson.ToString()); })); } else if (path == "/flat/testpackage1/1.1.0/testpackage1.1.1.0.nupkg") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "application/zip"; using (var stream = package.GetStream()) { var content = stream.ReadAllBytes(); MockServer.SetResponseContent(response, content); } })); } else if (path == "/reg/testpackage1/index.json") { return(new Action <HttpListenerResponse>(response => { response.ContentType = "text/javascript"; string json = null; json = @"{ ""@id"": ""{0}/reg/testPackage1/index.json"", ""@type"": [ ""catalog:CatalogRoot"", ""PackageRegistration"", ""catalog:Permalink"" ], ""commitId"": ""6d2d2375-b263-49ee-9a46-fd6b2d77e592"", ""commitTimeStamp"": ""2015-06-22T22:30:00.1487642Z"", ""count"": 1, ""items"": [ { ""@id"": ""{0}reg/testPackage1/index.json#page/0.0.0/9.0.0"", ""@type"": ""catalog:CatalogPage"", ""commitId"": ""6d2d2375-b263-49ee-9a46-fd6b2d77e592"", ""commitTimeStamp"": ""2015-06-22T22:30:00.1487642Z"", ""count"": 1, ""items"": [ { ""@id"": ""{0}reg/testPackage1/1.1.0.json"", ""@type"": ""Package"", ""commitId"": ""1fa214b1-6a03-4b4e-a16e-4925f994057f"", ""commitTimeStamp"": ""2015-04-01T20:27:37.8431747Z"", ""catalogEntry"": { ""@id"": ""{0}catalog0/data/2015.02.01.06.24.15/testPackage1.1.1.0.json"", ""@type"": ""PackageDetails"", ""authors"": ""test master"", ""description"": ""test one"", ""iconUrl"": """", ""id"": ""testPackage1"", ""language"": ""en-US"", ""licenseUrl"": """", ""listed"": true, ""minClientVersion"": """", ""projectUrl"": """", ""published"": ""2012-01-01T22:12:57.713Z"", ""requireLicenseAcceptance"": false, ""summary"": ""stuffs"", ""tags"": [ """" ], ""title"": """", ""version"": ""1.1.0"" }, ""packageContent"": ""{0}packages/testPackage1.1.1.0.nupkg"", ""registration"": ""{0}reg/testPackage1/index.json"" }], ""parent"": ""{0}reg/testPackage1/index.json"", ""lower"": ""0.0.0"", ""upper"": ""9.0.0"" } ]}".Replace("{0}", server.Uri); var jObject = JObject.Parse(json); MockServer.SetResponseContent(response, jObject.ToString()); })); } throw new Exception("This test needs to be updated to support: " + path); }); server.Start(); // The minimum time is the number of urls x 3 waits x 200ms var minTime = TimeSpan.FromMilliseconds(hitsByUrl.Count * 3 * 200); // Act var args = string.Format( "restore packages.config -SolutionDirectory . -Source {0}index.json -NoCache", server.Uri); var timer = new Stopwatch(); timer.Start(); var r1 = CommandRunner.Run( nugetexe, workingDirectory, args, waitForExit: true); timer.Stop(); server.Stop(); // Assert Assert.True(Util.IsSuccess(r1), r1.Item2 + " " + r1.Item3); Assert.True( File.Exists( Path.Combine(workingDirectory, "packages/testpackage1.1.1.0/testpackage1.1.1.0.nupkg"))); // Everything should be hit 3 times foreach (var url in hitsByUrl.Keys) { Assert.True(hitsByUrl[url] == 3, url); } Assert.True(timer.Elapsed > minTime); } } }
public void Install(string directory) { using (var f = ZipPackage.GetStream()) f.ExtractNupkg(directory); }