public async Task GetSigningCredentialsAsync_SkipsExpiredCredentials()
        {
            // Arrange
            var reference = DateTimeOffset.UtcNow;
            var expired   = new SigningCredentialsDescriptor(
                CreateRsaCredentials("First"),
                "RSA",
                expires: reference - TimeSpan.FromHours(1),
                notBefore: reference - TimeSpan.FromHours(2),
                metadata: new Dictionary <string, string>());

            var expected = new SigningCredentialsDescriptor(
                CreateRsaCredentials("Second"),
                "RSA",
                expires: reference + TimeSpan.FromHours(2),
                notBefore: reference,
                metadata: new Dictionary <string, string>());


            var descriptors = new List <SigningCredentialsDescriptor>()
            {
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials("Fourth"),
                    "RSA",
                    expires: reference + TimeSpan.FromHours(3),
                    notBefore: reference + TimeSpan.FromHours(1),
                    metadata: new Dictionary <string, string>()),
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials("Third"),
                    "RSA",
                    expires: reference + TimeSpan.FromHours(2),
                    notBefore: reference + TimeSpan.FromHours(1),
                    metadata: new Dictionary <string, string>()),
                expected,
                expired
            };

            var mockSource = new Mock <ISigningCredentialsSource>();

            mockSource.Setup(s => s.GetCredentials())
            .ReturnsAsync(descriptors);

            var sources = new List <ISigningCredentialsSource>()
            {
                mockSource.Object
            };

            var policyProvider = new DefaultSigningCredentialsPolicyProvider(sources, new TimeStampManager(), new HostingEnvironment());

            // Act
            var signingCredential = await policyProvider.GetSigningCredentialsAsync();

            // Assert
            Assert.Equal(expected, signingCredential);
        }
        public async Task GetAllCredentialsAsync_RetrievesTheCredentialsIfAllOfThemAreExpired()
        {
            // Arrange
            var descriptors1 = new List <SigningCredentialsDescriptor>()
            {
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials("First"),
                    "RSA",
                    DateTimeOffset.Now - TimeSpan.FromHours(2),
                    DateTimeOffset.Now - TimeSpan.FromHours(1),
                    new Dictionary <string, string>())
            };

            var descriptors2 = new List <SigningCredentialsDescriptor>()
            {
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials("First"),
                    "RSA",
                    DateTimeOffset.Now - TimeSpan.FromHours(2),
                    DateTimeOffset.Now - TimeSpan.FromHours(1),
                    new Dictionary <string, string>()),
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials("Second"),
                    "RSA",
                    DateTimeOffset.Now,
                    DateTimeOffset.Now + TimeSpan.FromHours(1),
                    new Dictionary <string, string>())
            };

            var expected = descriptors2.ToList();

            var mockSource = new Mock <ISigningCredentialsSource>();

            mockSource.SetupSequence(s => s.GetCredentials())
            .ReturnsAsync(descriptors1)
            .ReturnsAsync(descriptors2);

            var sources = new List <ISigningCredentialsSource>()
            {
                mockSource.Object
            };

            var policyProvider = new DefaultSigningCredentialsPolicyProvider(sources, new TimeStampManager(), new HostingEnvironment());

            // Act
            var credentials = await policyProvider.GetAllCredentialsAsync();

            credentials = await policyProvider.GetAllCredentialsAsync();

            // Assert
            Assert.Equal(expected, credentials);
        }
        public async Task GetAllCredentialsAsync_GetsCredentialsFromAllSources()
        {
            // Arrange
            var descriptors = new List <SigningCredentialsDescriptor>()
            {
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials(),
                    "RSA",
                    DateTimeOffset.Now + TimeSpan.FromHours(1),
                    DateTimeOffset.Now + TimeSpan.FromHours(2),
                    new Dictionary <string, string>()),
                new SigningCredentialsDescriptor(
                    CreateRsaCredentials(),
                    "RSA",
                    DateTimeOffset.Now,
                    DateTimeOffset.Now + TimeSpan.FromHours(1),
                    new Dictionary <string, string>()),
            };

            var expected = descriptors.ToList();

            expected.Reverse();

            var mockSource = new Mock <ISigningCredentialsSource>();

            mockSource.Setup(scs => scs.GetCredentials())
            .ReturnsAsync(descriptors);

            var sources = new List <ISigningCredentialsSource>()
            {
                mockSource.Object
            };

            var policyProvider = new DefaultSigningCredentialsPolicyProvider(sources, new TimeStampManager(), new HostingEnvironment());

            // Act
            var credentials = await policyProvider.GetAllCredentialsAsync();

            // Assert
            Assert.Equal(expected, credentials);
        }