public async Task FailureIsNotCachedAsync()
        {
            using MemoryCache memoryCache = new(new MemoryCacheOptions());
            IdempotencyRequestCache cache = new(memoryCache);

            SimpleRequestType  request          = new();   // A request that is presented for the first time.
            SimpleResponseType preparedResponse = new();   // Pre-prepared response for testing purposes.

            // First request.
            InvalidOperationException ex1 = await Assert.ThrowsAsync <InvalidOperationException>(() => cache.GetCachedResponseAsync(request, action: ExceptionAsync));

            // Second request.
            SimpleResponseType response = await cache.GetCachedResponseAsync(request, action : SuccessAsync);

            Assert.Same(preparedResponse, response);

            Task <SimpleResponseType> ExceptionAsync(SimpleRequestType request, CancellationToken cancellationToken)
            {
                throw new InvalidOperationException();
            }

            Task <SimpleResponseType> SuccessAsync(SimpleRequestType request, CancellationToken cancellationToken)
            {
                return(Task.FromResult(preparedResponse));
            }
        }
        public async Task BasicCacheBehaviorAsync()
        {
            using MemoryCache memoryCache = new(new MemoryCacheOptions());
            IdempotencyRequestCache cache = new(memoryCache);

            SimpleRequestType  request          = new();   // A request that is presented for the first time.
            SimpleResponseType preparedResponse = new();   // Pre-prepared response for testing purposes.

            SimpleResponseType response = await cache.GetCachedResponseAsync(request, action : (request, cancellationToken) => Task.FromResult(preparedResponse));

            // Verify that the response is really what we pre-prepared
            Assert.NotNull(response);
            Assert.IsType <SimpleResponseType>(response);
            Assert.Same(preparedResponse, response);             // Compare by reference.
        }
Example #3
0
 public SimpleResponseElement(string content, SimpleResponseType type)
 {
     Content = content;
     Type    = type;
 }