コード例 #1
0
        public void ListCommand_OnlyShowListed()
        {
            var nugetexe = Util.GetNuGetExePath();

            using (var packageDirectory = TestDirectory.Create())
                using (var randomTestFolder = TestDirectory.Create())
                {
                    // Arrange
                    var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory);
                    var packageFileName2 = Util.CreateTestPackage("testPackage2", "2.1", packageDirectory);
                    var package1         = new ZipPackage(packageFileName1);
                    var package2         = new ZipPackage(packageFileName2);
                    package1.Published = new DateTimeOffset?(new DateTime(1800, 1, 1));
                    package1.Listed    = false;

                    using (var server = new MockServer())
                    {
                        string searchRequest = string.Empty;

                        server.Get.Add("/nuget/$metadata", r =>
                                       Util.GetMockServerResource());
                        server.Get.Add("/nuget/Search()", r =>
                                       new Action <HttpListenerResponse>(response =>
                        {
                            searchRequest        = r.Url.ToString();
                            response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                            string feed          = server.ToODataFeed(new[] { package1, package2 }, "Search");
                            MockServer.SetResponseContent(response, feed);
                        }));
                        server.Get.Add("/nuget", r => "OK");

                        server.Start();

                        // Act
                        var args = "list test -Source " + server.Uri + "nuget";
                        var r1   = CommandRunner.Run(
                            nugetexe,
                            randomTestFolder,
                            args,
                            waitForExit: true);
                        server.Stop();

                        // Assert
                        Assert.True(r1.Item1 == 0, r1.Item2 + " " + r1.Item3);

                        // verify that only testPackage2 is listed since the package testPackage1
                        // is not listed.
                        var expectedOutput = "testPackage2 2.1.0" + Environment.NewLine;
                        Assert.Equal(expectedOutput, r1.Item2);

                        Assert.Contains("$filter=IsLatestVersion", searchRequest);
                        Assert.Contains("searchTerm='test", searchRequest);
                        Assert.Contains("includePrerelease=false", searchRequest);

                        // verify that nuget doesn't include "includeDelisted" in its request
                        Assert.DoesNotContain("includeDelisted", searchRequest);
                    }
                }
        }
コード例 #2
0
        public void ListCommand_AllVersionsPrerelease()
        {
            var nugetexe = Util.GetNuGetExePath();

            using (var pathContext = new SimpleTestPathContext())
            {
                // Arrange
                var packageDirectory = Path.Combine(pathContext.WorkingDirectory, "packageFolder");
                Directory.CreateDirectory(packageDirectory);
                var solutionFolder = Path.Combine(pathContext.SolutionRoot);

                var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory);
                var packageFileName2 = Util.CreateTestPackage("testPackage2", "2.1", packageDirectory);
                var package1         = new ZipPackage(packageFileName1);
                var package2         = new ZipPackage(packageFileName2);

                using (var server = new MockServer())
                {
                    string searchRequest = string.Empty;

                    server.Get.Add("/nuget/$metadata", r =>
                                   Util.GetMockServerResource());
                    server.Get.Add("/nuget/Search()", r =>
                                   new Action <HttpListenerResponse>(response =>
                    {
                        searchRequest        = r.Url.ToString();
                        response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                        string feed          = server.ToODataFeed(new[] { package1, package2 }, "Search");
                        MockServer.SetResponseContent(response, feed);
                    }));
                    server.Get.Add("/nuget", r => "OK");

                    server.Start();

                    // Act
                    var args = "list test -AllVersions -Prerelease -Source " + server.Uri + "nuget";
                    var r1   = CommandRunner.Run(
                        nugetexe,
                        solutionFolder,
                        args,
                        waitForExit: true);
                    server.Stop();

                    // Assert
                    Assert.Equal(0, r1.Item1);

                    // verify that the output is detailed
                    var expectedOutput = "testPackage1 1.1.0" + Environment.NewLine +
                                         "testPackage2 2.1.0" + Environment.NewLine;
                    r1.Item2.Should().Be(expectedOutput);

                    Assert.DoesNotContain("$filter", searchRequest);
                    Assert.Contains("searchTerm='test", searchRequest);
                    Assert.Contains("includePrerelease=true", searchRequest);
                }
            }
        }
コード例 #3
0
        public void ListCommand_Prerelease()
        {
            Util.ClearWebCache();
            var nugetexe = Util.GetNuGetExePath();

            using (var packageDirectory = TestFileSystemUtility.CreateRandomTestFolder())
                using (var randomTestFolder = TestFileSystemUtility.CreateRandomTestFolder())
                {
                    // Arrange
                    var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory);
                    var packageFileName2 = Util.CreateTestPackage("testPackage2", "2.1", packageDirectory);
                    var package1         = new ZipPackage(packageFileName1);
                    var package2         = new ZipPackage(packageFileName2);

                    using (var server = new MockServer())
                    {
                        string searchRequest = string.Empty;

                        server.Get.Add("/nuget/$metadata", r =>
                                       MockServerResource.NuGetV2APIMetadata);
                        server.Get.Add("/nuget/Search()", r =>
                                       new Action <HttpListenerResponse>(response =>
                        {
                            searchRequest        = r.Url.ToString();
                            response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                            string feed          = server.ToODataFeed(new[] { package1, package2 }, "Search");
                            MockServer.SetResponseContent(response, feed);
                        }));
                        server.Get.Add("/nuget", r => "OK");

                        server.Start();

                        // Act
                        var args = "list test -Prerelease -Source " + server.Uri + "nuget";
                        var r1   = CommandRunner.Run(
                            nugetexe,
                            randomTestFolder,
                            args,
                            waitForExit: true);
                        server.Stop();

                        // Assert
                        Assert.Equal(0, r1.Item1);

                        // verify that the output is detailed
                        var expectedOutput = "testPackage1 1.1.0" + Environment.NewLine +
                                             "testPackage2 2.1" + Environment.NewLine;
                        Assert.Equal(expectedOutput, r1.Item2);

                        Assert.Contains("$filter=IsAbsoluteLatestVersion", searchRequest);
                        Assert.Contains("searchTerm='test", searchRequest);
                        Assert.Contains("includePrerelease=true", searchRequest);
                    }
                }
        }
コード例 #4
0
        public void ListCommand_VerboseOutput()
        {
            var nugetexe = Util.GetNuGetExePath();

            using (var packageDirectory = TestDirectory.Create())
                using (var randomTestFolder = TestDirectory.Create())
                {
                    // Arrange
                    var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory);
                    var packageFileName2 = Util.CreateTestPackage("testPackage2", "2.1", packageDirectory);
                    var package1         = new ZipPackage(packageFileName1);
                    var package2         = new ZipPackage(packageFileName2);

                    using (var server = new MockServer())
                    {
                        string searchRequest = string.Empty;

                        server.Get.Add("/nuget/$metadata", r =>
                                       Util.GetMockServerResource());
                        server.Get.Add("/nuget/Search()", r =>
                                       new Action <HttpListenerResponse>(response =>
                        {
                            searchRequest        = r.Url.ToString();
                            response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                            string feed          = server.ToODataFeed(new[] { package1, package2 }, "Search");
                            MockServer.SetResponseContent(response, feed);
                        }));
                        server.Get.Add("/nuget", r => "OK");

                        server.Start();

                        // Act
                        var args = "list test -Verbosity detailed -Source " + server.Uri + "nuget";
                        var r1   = CommandRunner.Run(
                            nugetexe,
                            randomTestFolder,
                            args,
                            waitForExit: true);
                        server.Stop();

                        // Assert
                        Assert.Equal(0, r1.Item1);

                        // verify that the output is detailed
                        Assert.Contains(package1.Description, r1.Item2);
                        Assert.Contains(package2.Description, r1.Item2);

                        Assert.Contains("$filter=IsLatestVersion", searchRequest);
                        Assert.Contains("searchTerm='test", searchRequest);
                        Assert.Contains("includePrerelease=false", searchRequest);
                    }
                }
        }
コード例 #5
0
        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);
                        }
                    }
                }
        }
コード例 #6
0
        public void ListCommand_WithAuthenticatedSource_AppliesCredentialsFromSettings()
        {
            Util.ClearWebCache();
            var  expectedAuthHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("user:password"));
            var  listEndpoint       = Guid.NewGuid().ToString() + "/api/v2";
            bool serverReceiveProperAuthorizationHeader = false;

            using (var randomTestFolder = TestDirectory.Create())
            {
                // Arrange
                var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", randomTestFolder);
                var package1         = new ZipPackage(packageFileName1);

                // Server setup
                using (var serverV3 = new MockServer())
                {
                    var indexJson = Util.CreateIndexJson();
                    Util.AddFlatContainerResource(indexJson, serverV3);
                    Util.AddLegacyGalleryResource(indexJson, serverV3, listEndpoint);

                    serverV3.Get.Add("/", r =>
                    {
                        var h = r.Headers["Authorization"];
                        if (h == null)
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.StatusCode = 401;
                                response.AddHeader("WWW-Authenticate", @"Basic realm=""Test""");
                                MockServer.SetResponseContent(response, "401 Unauthenticated");
                            }));
                        }

                        if (expectedAuthHeader != h)
                        {
                            return(HttpStatusCode.Forbidden);
                        }

                        var path = serverV3.GetRequestUrlAbsolutePath(r);

                        if (path == "/index.json")
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.StatusCode = 200;
                                response.ContentType = "text/javascript";
                                MockServer.SetResponseContent(response, indexJson.ToString());
                            }));
                        }

                        if (path == $"/{listEndpoint}/$metadata")
                        {
                            return(Util.GetMockServerResource());
                        }

                        if (path == $"/{listEndpoint}/Search()")
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                                var feed = serverV3.ToODataFeed(new[] { package1 }, "Search");
                                MockServer.SetResponseContent(response, feed);
                            }));
                        }

                        serverReceiveProperAuthorizationHeader = true;
                        return("OK");
                    });

                    var config         = $@"<?xml version='1.0' encoding='utf-8'?>
                                <configuration>
                                  <packageSources>
                                    <add key='vsts' value='{serverV3.Uri}index.json' protocolVersion='3' />
                                  </packageSources>
                                  <packageSourceCredentials>
                                    <vsts>
                                      <add key='Username' value='user' />
                                      <add key='ClearTextPassword' value='password' />
                                    </vsts>
                                  </packageSourceCredentials>
                                 </configuration>";
                    var configFileName = Path.Combine(randomTestFolder, "nuget.config");
                    File.WriteAllText(configFileName, config);

                    serverV3.Start();

                    // Act
                    var result = CommandRunner.Run(
                        Util.GetNuGetExePath(),
                        Directory.GetCurrentDirectory(),
                        $"list test -source {serverV3.Uri}index.json -configfile {configFileName} -verbosity detailed -noninteractive",
                        waitForExit: true);
                    serverV3.Stop();
                    // Assert
                    Assert.True(0 == result.Item1, $"{result.Item2} {result.Item3}");
                    Assert.True(serverReceiveProperAuthorizationHeader);
                    Assert.Contains($"GET {serverV3.Uri}{listEndpoint}/Search()", result.Item2);
                    // verify that only package id & version is displayed
                    Assert.Matches(@"(?m)testPackage1\s+1\.1\.0", result.Item2);
                }
            }
        }
コード例 #7
0
        public void ListCommand_SimpleV3()
        {
            Util.ClearWebCache();

            var nugetexe = Util.GetNuGetExePath();

            using (var packageDirectory = TestDirectory.Create())
            {
                // Arrange
                var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", packageDirectory);
                var packageFileName2 = Util.CreateTestPackage("testPackage2", "2.1", packageDirectory);
                var package1         = new ZipPackage(packageFileName1);
                var package2         = new ZipPackage(packageFileName2);

                // Server setup
                var indexJson = Util.CreateIndexJson();
                using (var serverV3 = new MockServer())
                {
                    serverV3.Get.Add("/", r =>
                    {
                        var path = serverV3.GetRequestUrlAbsolutePath(r);

                        if (path == "/index.json")
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.StatusCode = 200;
                                response.ContentType = "text/javascript";
                                MockServer.SetResponseContent(response, indexJson.ToString());
                            }));
                        }

                        throw new Exception("This test needs to be updated to support: " + path);
                    });

                    using (var serverV2 = new MockServer())
                    {
                        Util.AddFlatContainerResource(indexJson, serverV3);
                        Util.AddLegacyGalleryResource(indexJson, serverV2);
                        string searchRequest = string.Empty;

                        serverV2.Get.Add("/", r =>
                        {
                            var path = serverV2.GetRequestUrlAbsolutePath(r);

                            if (path == "/")
                            {
                                return("OK");
                            }

                            if (path == "/$metadata")
                            {
                                return(Util.GetMockServerResource());
                            }

                            if (path == "/Search()")
                            {
                                return(new Action <HttpListenerResponse>(response =>
                                {
                                    searchRequest = r.Url.ToString();
                                    response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                                    string feed = serverV2.ToODataFeed(new[] { package1, package2 }, "Search");
                                    MockServer.SetResponseContent(response, feed);
                                }));
                            }

                            throw new Exception("This test needs to be updated to support: " + path);
                        });

                        serverV3.Start();
                        serverV2.Start();

                        // Act
                        var args   = "list test -Source " + serverV3.Uri + "index.json";
                        var result = CommandRunner.Run(
                            nugetexe,
                            Directory.GetCurrentDirectory(),
                            args,
                            waitForExit: true);

                        serverV2.Stop();
                        serverV3.Stop();

                        // Assert
                        Assert.True(result.Item1 == 0, result.Item2 + " " + result.Item3);

                        // verify that only package id & version is displayed
                        var expectedOutput = "testPackage1 1.1.0" + Environment.NewLine +
                                             "testPackage2 2.1.0" + Environment.NewLine;
                        Assert.Equal(expectedOutput, result.Item2);

                        Assert.Contains("$filter=IsLatestVersion", searchRequest);
                        Assert.Contains("searchTerm='test", searchRequest);
                        Assert.Contains("includePrerelease=false", searchRequest);
                    }
                }
            }
        }
コード例 #8
0
ファイル: Util.cs プロジェクト: dslzuha/nugetclient
        /// <summary>
        /// Creates a mock server that contains the specified list of packages
        /// </summary>
        public static MockServer CreateMockServer(IList <IPackage> packages)
        {
            var server = new MockServer();

            server.Get.Add("/nuget/$metadata", r =>
                           Util.GetMockServerResource());
            server.Get.Add("/nuget/FindPackagesById()", r =>
                           new Action <HttpListenerResponse>(response =>
            {
                response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                string feed          = server.ToODataFeed(packages, "FindPackagesById");
                MockServer.SetResponseContent(response, feed);
            }));

            foreach (var package in packages)
            {
                var url = string.Format(
                    CultureInfo.InvariantCulture,
                    "/nuget/Packages(Id='{0}',Version='{1}')",
                    package.Id,
                    package.Version);
                server.Get.Add(url, r =>
                               new Action <HttpListenerResponse>(response =>
                {
                    response.ContentType = "application/atom+xml;type=entry;charset=utf-8";
                    var p1 = server.ToOData(package);
                    MockServer.SetResponseContent(response, p1);
                }));

                // download url
                url = string.Format(
                    CultureInfo.InvariantCulture,
                    "/package/{0}/{1}",
                    package.Id,
                    package.Version);
                server.Get.Add(url, r =>
                               new Action <HttpListenerResponse>(response =>
                {
                    response.ContentType = "application/zip";
                    using (var stream = package.GetStream())
                    {
                        var content = stream.ReadAllBytes();
                        MockServer.SetResponseContent(response, content);
                    }
                }));
            }

            // fall through to "package not found"
            server.Get.Add("/nuget/Packages(Id='", r =>
                           new Action <HttpListenerResponse>(response =>
            {
                response.StatusCode = 404;
                MockServer.SetResponseContent(response, @"<?xml version=""1.0"" encoding=""utf-8""?>
<m:error xmlns:m=""http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"">
  <m:code />
  <m:message xml:lang=""en-US"">Resource not found for the segment 'Packages'.</m:message>
</m:error>");
            }));

            server.Get.Add("/nuget", r =>
                           new Action <HttpListenerResponse>(response =>
            {
                response.StatusCode = 404;
            }));

            return(server);
        }
コード例 #9
0
        public void ListCommand_WithAuthenticatedSource_AppliesCredentialsFromSettings()
        {
            var  expectedAuthHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("user:password"));
            var  listEndpoint       = Guid.NewGuid().ToString() + "/api/v2";
            bool serverReceiveProperAuthorizationHeader = false;

            using (var pathContext = new SimpleTestPathContext())
            {
                // Arrange
                var repo             = Path.Combine(pathContext.WorkingDirectory, "repo");
                var packageFileName1 = Util.CreateTestPackage("testPackage1", "1.1.0", repo);
                var package1         = new ZipPackage(packageFileName1);

                // Server setup
                using (var serverV3 = new MockServer())
                {
                    var indexJson = Util.CreateIndexJson();
                    Util.AddFlatContainerResource(indexJson, serverV3);
                    Util.AddLegacyGalleryResource(indexJson, serverV3, listEndpoint);

                    serverV3.Get.Add("/", r =>
                    {
                        var h = r.Headers["Authorization"];
                        if (h == null)
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.StatusCode = 401;
                                response.AddHeader("WWW-Authenticate", @"Basic realm=""Test""");
                                MockServer.SetResponseContent(response, "401 Unauthenticated");
                            }));
                        }

                        if (expectedAuthHeader != h)
                        {
                            return(HttpStatusCode.Forbidden);
                        }

                        var path = serverV3.GetRequestUrlAbsolutePath(r);

                        if (path == "/index.json")
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.StatusCode = 200;
                                response.ContentType = "text/javascript";
                                MockServer.SetResponseContent(response, indexJson.ToString());
                            }));
                        }

                        if (path == $"/{listEndpoint}/$metadata")
                        {
                            return(Util.GetMockServerResource());
                        }

                        if (path == $"/{listEndpoint}/Search()")
                        {
                            return(new Action <HttpListenerResponse>(response =>
                            {
                                response.ContentType = "application/atom+xml;type=feed;charset=utf-8";
                                var feed = serverV3.ToODataFeed(new[] { package1 }, "Search");
                                MockServer.SetResponseContent(response, feed);
                            }));
                        }

                        serverReceiveProperAuthorizationHeader = true;
                        return("OK");
                    });

                    // Add source into NuGet.Config file
                    var settings = pathContext.Settings;
                    SimpleTestSettingsContext.RemoveSource(settings.XML, "source");

                    var source = serverV3.Uri + "index.json";
                    var packageSourcesSection = SimpleTestSettingsContext.GetOrAddSection(settings.XML, "packageSources");
                    SimpleTestSettingsContext.AddEntry(packageSourcesSection, "vsts", source, additionalAtrributeName: "protocolVersion", additionalAttributeValue: "3");

                    //var packageSourceCredentialsSection = SimpleTestSettingsContext.GetOrAddSection(settings.XML, "packageSourceCredentials");
                    SimpleTestSettingsContext.AddPackageSourceCredentialsSection(settings.XML, "vsts", "user", "password", clearTextPassword: true);
                    settings.Save();

                    serverV3.Start();

                    // Act
                    var result = CommandRunner.Run(
                        Util.GetNuGetExePath(),
                        pathContext.SolutionRoot,
                        $"list test -source {serverV3.Uri}index.json -configfile {pathContext.NuGetConfig} -verbosity detailed -noninteractive",
                        waitForExit: true);

                    serverV3.Stop();

                    // Assert
                    Assert.True(0 == result.Item1, $"{result.Item2} {result.Item3}");
                    Assert.True(serverReceiveProperAuthorizationHeader);
                    Assert.Contains($"GET {serverV3.Uri}{listEndpoint}/Search()", result.Item2);
                    // verify that only package id & version is displayed
                    Assert.Matches(@"(?m)testPackage1\s+1\.1\.0", result.Item2);
                }
            }
        }