public async Task TryGetLastKnownGoodCredentialsFromCache_ReturnsCredentialsForCacheHit(bool isProxy)
        {
            var networkCredential = new NetworkCredential();
            var provider          = new Mock <ICredentialProvider>(MockBehavior.Strict);

            provider.Setup(x => x.GetAsync(
                               It.IsAny <Uri>(),
                               It.IsAny <IWebProxy>(),
                               It.IsAny <CredentialRequestType>(),
                               It.IsAny <string>(),
                               It.IsAny <bool>(),
                               It.IsAny <bool>(),
                               It.IsAny <CancellationToken>()))
            .Returns(() => Task.FromResult(new CredentialResponse(networkCredential)));
            provider.Setup(x => x.Id).Returns("a");
            IEnumerable <ICredentialProvider> providers = new[] { provider.Object };

            var service     = new CredentialService(new AsyncLazy <IEnumerable <ICredentialProvider> >(() => Task.FromResult(providers)), nonInteractive: false, handlesDefaultCredentials: true);
            var uri         = new Uri("https://unit.test");
            var type        = isProxy ? CredentialRequestType.Proxy : CredentialRequestType.Unauthorized;
            var credentials = await service.GetCredentialsAsync(
                uri,
                proxy : null,
                type : type,
                message : null,
                cancellationToken : CancellationToken.None);

            ICredentials cachedCredentials;
            var          wasCacheHit = service.TryGetLastKnownGoodCredentialsFromCache(uri, isProxy, out cachedCredentials);

            Assert.True(wasCacheHit);
            Assert.Same(networkCredential, credentials);
            Assert.Same(credentials, cachedCredentials);
        }
        public async Task TryGetLastKnownGoodCredentialsFromCache_DoesNotReturnUnsuccessfulCredentials(
            CredentialStatus credentialStatus,
            bool isProxy)
        {
            var provider = new Mock <ICredentialProvider>(MockBehavior.Strict);

            provider.Setup(x => x.GetAsync(
                               It.IsAny <Uri>(),
                               It.IsAny <IWebProxy>(),
                               It.IsAny <CredentialRequestType>(),
                               It.IsAny <string>(),
                               It.IsAny <bool>(),
                               It.IsAny <bool>(),
                               It.IsAny <CancellationToken>()))
            .Returns(() => Task.FromResult(new CredentialResponse(credentialStatus)));
            provider.Setup(x => x.Id).Returns("a");

            var service     = new CredentialService(new[] { provider.Object }, nonInteractive: false);
            var uri         = new Uri("https://unit.test");
            var type        = isProxy ? CredentialRequestType.Proxy : CredentialRequestType.Unauthorized;
            var credentials = await service.GetCredentialsAsync(
                uri,
                proxy : null,
                type : type,
                message : null,
                cancellationToken : CancellationToken.None);

            ICredentials cachedCredentials;
            var          wasCacheHit = service.TryGetLastKnownGoodCredentialsFromCache(uri, isProxy, out cachedCredentials);

            Assert.False(wasCacheHit);
        }
        public void TryGetLastKnownGoodCredentialsFromCache_ReturnsFalseForCacheMiss(bool isProxy)
        {
            var          service = new CredentialService(new AsyncLazy <IEnumerable <ICredentialProvider> >(() => Task.FromResult(Enumerable.Empty <ICredentialProvider>())), nonInteractive: true, handlesDefaultCredentials: true);
            ICredentials credentials;

            var wasCacheHit = service.TryGetLastKnownGoodCredentialsFromCache(
                new Uri("https://unit.test"),
                isProxy,
                out credentials);

            Assert.False(wasCacheHit);
        }
        public void TryGetLastKnownGoodCredentialsFromCache_ReturnsFalseForCacheMiss(bool isProxy)
        {
            var          service = new CredentialService(Enumerable.Empty <ICredentialProvider>(), nonInteractive: true);
            ICredentials credentials;

            var wasCacheHit = service.TryGetLastKnownGoodCredentialsFromCache(
                new Uri("https://unit.test"),
                isProxy,
                out credentials);

            Assert.False(wasCacheHit);
        }
        public void TryGetLastKnownGoodCredentialsFromCache_ThrowsForNullUri(bool isProxy)
        {
            var          service = new CredentialService(new AsyncLazy <IEnumerable <ICredentialProvider> >(() => Task.FromResult(Enumerable.Empty <ICredentialProvider>())), nonInteractive: true, handlesDefaultCredentials: true);
            ICredentials credentials;

            var exception = Assert.Throws <ArgumentNullException>(
                () => service.TryGetLastKnownGoodCredentialsFromCache(
                    uri: null,
                    isProxy: isProxy,
                    credentials: out credentials));

            Assert.Equal("uri", exception.ParamName);
        }