public void ShouldReturnResultFromCacheOnGenerateDataKey()
        {
            var keyId = Guid.NewGuid().ToString();

            var dataKeyResult = new GenerateDataKeyResult()
            {
                KeyCiphertext = new byte[] { 1, 2, 3 },
                KeyPlaintext  = new byte[] { 4, 5, 6 }
            };

            _dataKeyCache.Setup(x => x.Get(It.Is <DataKeyIdentifier>(identifier =>
                                                                     identifier.KeyId == keyId && identifier.EncryptionContext == _encryptionContext)))
            .Returns(dataKeyResult);

            var result =
                _keyManagementServiceCache.GenerateDataKey(keyId, _encryptionContext, Guid.NewGuid().ToString());

            _keyManagementService.Verify(
                x => x.GenerateDataKey(
                    It.IsAny <string>(),
                    It.IsAny <Dictionary <string, string> >(),
                    It.IsAny <string>()), Times.Never);

            result.KeyPlaintext.ShouldBe(dataKeyResult.KeyPlaintext);
            result.KeyCiphertext.ShouldBe(dataKeyResult.KeyCiphertext);
        }
        public void ShouldReturnResultFromCacheOnGenerateDataKey()
        {
            var keyId    = Guid.NewGuid().ToString();
            var cacheKey = Guid.NewGuid().ToString();

            _cacheKeyGenerator.Setup(x =>
                                     x.Generate(keyId, _encryptionContext))
            .Returns(cacheKey);

            var cacheValue = new byte[] { 10, 11, 12 };

            _cache.Setup(x => x.Get(cacheKey))
            .Returns(cacheValue);
            var dataKeyResult = new GenerateDataKeyResult()
            {
                KeyCiphertext = new byte[] { 1, 2, 3 },
                KeyPlaintext  = new byte[] { 4, 5, 6 }
            };

            _cacheValueConverter.Setup(x => x.Convert(cacheValue))
            .Returns(dataKeyResult);

            var result =
                _keyManagementServiceCache.GenerateDataKey(keyId, _encryptionContext, Guid.NewGuid().ToString());

            _keyManagementService.Verify(
                x => x.GenerateDataKey(
                    It.IsAny <string>(),
                    It.IsAny <Dictionary <string, string> >(),
                    It.IsAny <string>()), Times.Never);

            result.KeyPlaintext.ShouldBe(dataKeyResult.KeyPlaintext);
            result.KeyCiphertext.ShouldBe(dataKeyResult.KeyCiphertext);
        }