public async Task HandleResponseAsync_ReturnsNullProxyCredentialsIfNoProxy()
        {
            var plugin = CreateMockPlugin();

            using (var provider = new GetCredentialsRequestHandler(
                       plugin,
                       proxy: null,
                       credentialService: Mock.Of <ICredentialService>()))
            {
                var request = CreateRequest(
                    MessageType.Request,
                    new GetCredentialsRequest(_packageSource.Source, HttpStatusCode.ProxyAuthenticationRequired));
                var responseHandler = new Mock <IResponseHandler>(MockBehavior.Strict);

                responseHandler.Setup(x => x.SendResponseAsync(
                                          It.Is <Message>(r => r == request),
                                          It.Is <GetCredentialsResponse>(r => r.ResponseCode == MessageResponseCode.NotFound &&
                                                                         r.Username == null && r.Password == null),
                                          It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(0));

                await provider.HandleResponseAsync(
                    Mock.Of <IConnection>(),
                    request,
                    responseHandler.Object,
                    CancellationToken.None);

                responseHandler.Verify();
            }
        }
Beispiel #2
0
            internal static async Task <PluginFindPackageByIdResourceTest> CreateAsync(
                MessageResponseCode responseCode = MessageResponseCode.Error)
            {
                var packageIdentity = new PackageIdentity(id: "a", version: NuGetVersion.Parse("1.0.0"));
                var testDirectory   = TestDirectory.Create();
                var packageSource   = new PackageSource("http://unit.test");
                var package         = await SimpleTestPackageUtility.CreateFullPackageAsync(
                    testDirectory.Path,
                    packageIdentity.Id,
                    packageIdentity.Version.ToNormalizedString());

                var packageBytes = File.ReadAllBytes(package.FullName);
                var plugin       = new Mock <IPlugin>();
                var dispatcher   = new Mock <IMessageDispatcher>();
                var connection   = new Mock <IConnection>();

                dispatcher.SetupGet(x => x.RequestHandlers)
                .Returns(new RequestHandlers());

                connection.SetupGet(x => x.MessageDispatcher)
                .Returns(dispatcher.Object);

                var versions = responseCode == MessageResponseCode.Success ? new[] { "1.0.0", "2.0.0", "3.0.0" } : null;
                var response = new GetPackageVersionsResponse(responseCode, versions);

                connection.Setup(x => x.SendRequestAndReceiveResponseAsync <GetPackageVersionsRequest, GetPackageVersionsResponse>(
                                     It.Is <MessageMethod>(m => m == MessageMethod.GetPackageVersions),
                                     It.Is <GetPackageVersionsRequest>(
                                         c => string.Equals(c.PackageId, packageIdentity.Id, StringComparison.OrdinalIgnoreCase) &&
                                         c.PackageSourceRepository == packageSource.Source),
                                     It.IsAny <CancellationToken>()))
                .ReturnsAsync(response);

                plugin.SetupGet(x => x.Connection)
                .Returns(connection.Object);

                var utilities           = new Mock <IPluginMulticlientUtilities>();
                var credentialService   = new Mock <ICredentialService>();
                var credentialsProvider = new GetCredentialsRequestHandler(
                    plugin.Object,
                    proxy: null,
                    credentialService: credentialService.Object);

                var resource = new PluginFindPackageByIdResource(
                    plugin.Object,
                    utilities.Object,
                    packageSource);

                return(new PluginFindPackageByIdResourceTest(
                           resource,
                           package,
                           packageIdentity,
                           connection,
                           new SourceCacheContext(),
                           testDirectory));
            }
        public async Task HandleResponseAsync_ReturnsProxyCredentialsFromCredentialServiceIfFound()
        {
            var proxyUri          = new Uri("https://proxy.unit.test");
            var networkCredential = new NetworkCredential(userName: "******", password: "******");
            var credentialService = new Mock <ICredentialService>();
            var credentials       = new Mock <ICredentials>();
            var proxy             = new Mock <IWebProxy>();

            proxy.Setup(x => x.GetProxy(It.IsAny <Uri>()))
            .Returns(proxyUri);

            credentials.Setup(x => x.GetCredential(
                                  It.Is <Uri>(u => u == proxyUri),
                                  It.Is <string>(a => a == "Basic")))
            .Returns(networkCredential);

            credentialService.Setup(x => x.GetCredentialsAsync(
                                        It.Is <Uri>(u => u == _packageSource.SourceUri),
                                        It.Is <IWebProxy>(p => p == proxy.Object),
                                        It.Is <CredentialRequestType>(t => t == CredentialRequestType.Proxy),
                                        It.IsNotNull <string>(),
                                        It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(credentials.Object));

            var plugin = CreateMockPlugin();

            using (var provider = new GetCredentialsRequestHandler(plugin, proxy.Object, credentialService.Object))
            {
                var request = CreateRequest(
                    MessageType.Request,
                    new GetCredentialsRequest(_packageSource.Source, HttpStatusCode.ProxyAuthenticationRequired));
                var responseHandler = new Mock <IResponseHandler>(MockBehavior.Strict);

                responseHandler.Setup(x => x.SendResponseAsync(
                                          It.Is <Message>(r => r == request),
                                          It.Is <GetCredentialsResponse>(r => r.ResponseCode == MessageResponseCode.Success &&
                                                                         r.Username == "a" && r.Password == "b"),
                                          It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(0));

                await provider.HandleResponseAsync(
                    Mock.Of <IConnection>(),
                    request,
                    responseHandler.Object,
                    CancellationToken.None);

                responseHandler.Verify();
            }
        }
        public void Dispose_DisposesDisposables()
        {
            var plugin = new Mock <IPlugin>(MockBehavior.Strict);

            plugin.Setup(x => x.Dispose());

            var provider = new GetCredentialsRequestHandler(
                plugin.Object,
                Mock.Of <IWebProxy>(),
                Mock.Of <ICredentialService>());

            provider.Dispose();

            plugin.Verify(x => x.Dispose(), Times.Once);
        }
        public async Task HandleResponseAsync_ReturnsNullProxyCredentialsIfNoCredentials()
        {
            var credentialService = new Mock <ICredentialService>();
            var credentials       = new Mock <ICredentials>();
            var proxy             = Mock.Of <IWebProxy>();

            credentials.Setup(x => x.GetCredential(
                                  It.Is <Uri>(u => u == _packageSource.SourceUri),
                                  It.Is <string>(a => a == null)))
            .Returns <NetworkCredential>(null);

            credentialService.Setup(x => x.GetCredentialsAsync(
                                        It.Is <Uri>(uri => uri == _packageSource.SourceUri),
                                        It.Is <IWebProxy>(p => p == proxy),
                                        It.Is <CredentialRequestType>(t => t == CredentialRequestType.Proxy),
                                        It.IsNotNull <string>(),
                                        It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(credentials.Object));

            var plugin = CreateMockPlugin();

            using (var provider = new GetCredentialsRequestHandler(plugin, proxy, credentialService.Object))
            {
                var request = CreateRequest(
                    MessageType.Request,
                    new GetCredentialsRequest(_packageSource.Source, HttpStatusCode.ProxyAuthenticationRequired));
                var responseHandler = new Mock <IResponseHandler>(MockBehavior.Strict);

                responseHandler.Setup(x => x.SendResponseAsync(
                                          It.Is <Message>(r => r == request),
                                          It.Is <GetCredentialsResponse>(r => r.ResponseCode == MessageResponseCode.NotFound &&
                                                                         r.Username == null && r.Password == null),
                                          It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(0));

                await provider.HandleResponseAsync(
                    Mock.Of <IConnection>(),
                    request,
                    responseHandler.Object,
                    CancellationToken.None);

                responseHandler.Verify();
            }
        }
        public async Task HandleResponseAsync_ReturnsNotFoundIfPackageSourceNotFound()
        {
            var credentialService = new Mock <ICredentialService>(MockBehavior.Strict);

            credentialService.Setup(x => x.GetCredentialsAsync(
                                        It.IsNotNull <Uri>(),
                                        It.IsNotNull <IWebProxy>(),
                                        It.Is <CredentialRequestType>(c => c == CredentialRequestType.Unauthorized),
                                        It.IsNotNull <string>(),
                                        It.IsAny <CancellationToken>()))
            .ReturnsAsync((ICredentials)null);

            var plugin = CreateMockPlugin();

            using (var provider = new GetCredentialsRequestHandler(
                       plugin,
                       Mock.Of <IWebProxy>(),
                       credentialService.Object))
            {
                var request = CreateRequest(
                    MessageType.Request,
                    new GetCredentialsRequest("https://unit.test", HttpStatusCode.Unauthorized));
                var responseHandler = new Mock <IResponseHandler>(MockBehavior.Strict);

                responseHandler.Setup(x => x.SendResponseAsync(
                                          It.Is <Message>(r => r == request),
                                          It.Is <GetCredentialsResponse>(r => r.ResponseCode == MessageResponseCode.NotFound &&
                                                                         r.Username == null && r.Password == null),
                                          It.IsAny <CancellationToken>()))
                .Returns(Task.FromResult(0));

                await provider.HandleResponseAsync(
                    Mock.Of <IConnection>(),
                    request,
                    responseHandler.Object,
                    CancellationToken.None);

                responseHandler.Verify();
            }
        }