public void GenerateCryptoKey_NoDataInCache_ReturnFromRemote_UpdateCache()
        {
            var dataKey    = GetSecureDataKey();
            var newDataKey = GetSecureDataKey();
            var key        = Guid.NewGuid().ToString();

            var provider = new Mock <ICryptoKeyProvider>();

            provider.Setup(store => store.GenerateCryptoKey(_application, _tenant, key))
            .Returns(dataKey);

            var cachedProvider = new CachedCryptoKeyProvider(provider.Object);

            var value = cachedProvider.GenerateCryptoKey(_application, _tenant, key);

            Assert.True(IsEqual(dataKey, value));

            provider.Setup(store => store.GenerateCryptoKey(_application, _tenant, key))
            .Returns(newDataKey);

            value = cachedProvider.GenerateCryptoKey(_application, _tenant, key);

            Assert.True(IsEqual(dataKey, value));
            Assert.False(IsEqual(newDataKey, value));
        }
        public async Task GetCryptoKeyAsync_NoDataInCahce_RetrunFromRemote()
        {
            var dataKey  = GetSecureDataKey();
            var provider = new Mock <ICryptoKeyProvider>();
            var key      = Guid.NewGuid().ToString();

            var cachedProvider = new CachedCryptoKeyProvider(provider.Object);

            provider.Setup(store => store.GetCryptoKeyAsync(_application, _tenant, key))
            .ReturnsAsync(dataKey);

            var value = await cachedProvider.GetCryptoKeyAsync(_application, _tenant, key);

            Assert.True(IsEqual(dataKey, value));
        }
        public void GetCryptoKey_NoDataInCahce_RetrunFromRemote_DoNotUpdateCacheIfNull()
        {
            var key     = Guid.NewGuid().ToString();
            var dataKey = GetSecureDataKey();

            var provider = new Mock <ICryptoKeyProvider>();

            provider.Setup(store => store.GetCryptoKey(_application, _tenant, key))
            .Returns(() => null);

            var cachedProvider = new CachedCryptoKeyProvider(provider.Object);

            var value = cachedProvider.GetCryptoKey(_application, _tenant, key);

            Assert.Null(value);

            provider.Setup(store => store.GetCryptoKey(_application, _tenant, key))
            .Returns(dataKey);

            value = cachedProvider.GetCryptoKey(_application, _tenant, key);
            Assert.True(IsEqual(dataKey, value));
        }