Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
		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;
			}
		}
Beispiel #6
0
        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();
        }
Beispiel #7
0
        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")));
                    }
                }
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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);
            }
        }
Beispiel #12
0
        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);
            }
        }
Beispiel #13
0
        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();
        }
Beispiel #14
0
        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);
            }
        }
Beispiel #15
0
        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);
            }
        }
Beispiel #16
0
        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);
                    }
                }
        }
Beispiel #18
0
        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;
            }
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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);
                    }
                }
        }
Beispiel #22
0
 public void Install(string directory)
 {
     using (var f = ZipPackage.GetStream())
         f.ExtractNupkg(directory);
 }