public async Task <X509Certificate> GetCertificate(string issuer) { DateTime now = _clock.GetDateTimeUtc(); if (_certificateDictionary == null || _certificateDictionaryCacheExpiryTime <= now) { List <X509Certificate> x509Certificates = await _rootCertificateProvider.GetRootCaCertificates(); _certificateDictionary = x509Certificates.Where(_ => _.Issuer.Trim() == _.Subject.Trim()).ToDictionary(_ => _.Issuer.Trim().ToLower()); _certificateDictionaryCacheExpiryTime = now.Add(_certificateDictionaryTtl); } _certificateDictionary.TryGetValue(issuer.Trim().ToLower(), out var cert); return(cert); }
public async Task GetCertificatesGoesToOriginForStateOnFirstCallAndReturnsValue() { A.CallTo(() => _clock.GetDateTimeUtc()).Returns(new DateTime(2018, 01, 01)); string issuer = "CN=ABC, O=ABC, S=LONDON, C=uk"; X509Certificate x509Certificate = A.Fake <X509Certificate>(); A.CallTo(() => x509Certificate.Issuer).Returns(issuer); A.CallTo(() => x509Certificate.Subject).Returns(issuer); A.CallTo(() => _rootCertificateProvider.GetRootCaCertificates()) .Returns(Task.FromResult(new List <X509Certificate> { x509Certificate })); X509Certificate certificate = await _rootCertificateLookUp.GetCertificate(issuer); Assert.That(certificate, Is.Not.Null); A.CallTo(() => _rootCertificateProvider.GetRootCaCertificates()).MustHaveHappenedOnceExactly(); }