public async void GetOrCreateValueAsync_FromInMemoryProvider()
        {
            // Arrange
            var cacheKey              = "Unit-Test-Cache";
            var inMemoryValue         = "FromInMemory";
            var distributedValue      = "FromDistributed";
            var providerFunctionValue = "FromProviderFunction";

            _inMemoryCacheProviderMock.Setup(imcp => imcp.GetAsync <string>(cacheKey, It.IsAny <CancellationToken>())).Returns(Task.FromResult(inMemoryValue));
            _distributedCacheProviderMock.Setup(dcp => dcp.GetAsync <string>(cacheKey, It.IsAny <CancellationToken>())).Returns(Task.FromResult(distributedValue));
            string cacheProviderFunc() => providerFunctionValue;

            // Act
            var obtainedCacheValue = await _cacheService.GetOrCreateValueAsync(cacheKey, cacheProviderFunc);

            // Assert
            _inMemoryCacheProviderMock.Verify(imcp => imcp.GetAsync <string>(cacheKey, It.IsAny <CancellationToken>()), Times.Once());
            _distributedCacheProviderMock.Verify(dcp => dcp.GetAsync <string>(cacheKey, It.IsAny <CancellationToken>()), Times.Once());
            _inMemoryCacheProviderMock.Verify(imcp => imcp.SetAsync(cacheKey, It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never());
            _distributedCacheProviderMock.Verify(dcp => dcp.SetAsync(cacheKey, It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never());
            Assert.Equal(inMemoryValue, obtainedCacheValue);
        }
 /// <summary>
 /// Create a new secret to a connection ID
 /// </summary>
 /// <param name="connectionId">The ID of the connection</param>
 /// <param name="secretValue">The value of the secret</param>
 /// <returns>An async task</returns>
 public async Task CreateConnectionSecret(Guid connectionId, string secretValue)
 {
     // Instead of an actual keyvault use local in-memory and redis cache to store secrets
     await _cachingService.GetOrCreateValueAsync(GetConnectionSecretName(connectionId), () => secretValue);
 }