public void ListCommand_SimpleV3_NoListEndpoint()
        {
            var nugetexe = Util.GetNuGetExePath();

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

                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);
                    });

                    serverV3.Start();

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

                    serverV3.Stop();

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

                    // verify that only package id & version is displayed
                    var expectedOutput =
                        string.Format(
                            "WARNING: This version of nuget.exe does not support listing packages" +
                            " from package source '{0}'.",
                            serverV3.Uri + "index.json");

                    // Verify that the output contains the expected output
                    Assert.True(result.Item2.Contains(expectedOutput));
                }
            }
        }
Example #2
0
        public void ListCommand_UnavailableV3()
        {
            Util.ClearWebCache();

            var nugetexe = Util.GetNuGetExePath();

            using (var packageDirectory = TestDirectory.Create())

            {
                // Arrange
                // Server setup
                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 = 404;
                                response.ContentType = "text/javascript";
                                MockServer.SetResponseContent(response, response.StatusCode.ToString());
                            }));
                        }

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

                    serverV3.Start();

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

                    serverV3.Stop();

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

                    Assert.True(
                        result.Item3.Contains("404 (Not Found)"),
                        "Expected error message not found in " + result.Item3
                        );
                }
            }
        }
Example #3
0
        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);
                    }
                }
        }
Example #4
0
        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);
                    }
                }
        }
Example #5
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);
                }
            }
        }
Example #6
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);
                    }
                }
            }
        }
Example #7
0
        private Action <HttpListenerResponse> ServerHandlerV3(
            HttpListenerRequest request,
            MockServer server,
            JObject indexJson,
            string repositoryPath)
        {
            try
            {
                var path  = server.GetRequestUrlAbsolutePath(request);
                var parts = request.Url.AbsolutePath.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

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

                        var versionsJson = JObject.Parse(@"{ ""versions"": [] }");
                        var array = versionsJson["versions"] as JArray;

                        var id = parts[parts.Length - 2];

                        foreach (var pkg in LocalFolderUtility.GetPackagesV2(repositoryPath, id, new TestLogger()))
                        {
                            array.Add(pkg.Identity.Version.ToNormalizedString());
                        }

                        MockServer.SetResponseContent(response, versionsJson.ToString());
                    }));
                }
                else if (path.StartsWith("/flat/") && path.EndsWith(".nupkg"))
                {
                    var file = new FileInfo(Path.Combine(repositoryPath, parts.Last()));

                    if (file.Exists)
                    {
                        return(new Action <HttpListenerResponse>(response =>
                        {
                            response.ContentType = "application/zip";
                            using (var stream = file.OpenRead())
                            {
                                var content = stream.ReadAllBytes();
                                MockServer.SetResponseContent(response, content);
                            }
                        }));
                    }
                    else
                    {
                        return(new Action <HttpListenerResponse>(response =>
                        {
                            response.StatusCode = 404;
                        }));
                    }
                }
                else if (path == "/nuget")
                {
                    return(new Action <HttpListenerResponse>(response =>
                    {
                        response.StatusCode = 200;
                    }));
                }

                throw new Exception("This test needs to be updated to support: " + path);
            }
            catch (Exception)
            {
                // Debug here
                throw;
            }
        }
        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);
                }
            }
        }