public async Task Invalidates_cache_per_method() { // setup var testMessageHandler = new TestMessageHandler(); var handler = new InMemoryCacheHandler(testMessageHandler); var client = new HttpClient(handler); // execute with two methods, and clean up one cache var uri = new Uri("http://unittest"); await client.GetAsync(uri); await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, uri)); testMessageHandler.NumberOfCalls.Should().Be(2); // clean cache handler.InvalidateCache(uri, HttpMethod.Head); // execute both actions, and only one should be retrieved from cache await client.GetAsync(uri); await client.SendAsync(new HttpRequestMessage(HttpMethod.Head, uri)); testMessageHandler.NumberOfCalls.Should().Be(3); }
public async Task Tests_cache_invalidation() { const string url = "http://thecatapi.com/api/images/get?format=html"; var handler = new InMemoryCacheHandler(new HttpClientHandler(), CacheExpirationProvider.CreateSimple(TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(5))); using (var client = new HttpClient(handler)) { for (int i = 0; i < 5; i++) { var sw = Stopwatch.StartNew(); Debug.Write($"Getting data from {url}, iteration #{i + 1}..."); var result = await client.GetAsync(url); var content = await result.Content.ReadAsStringAsync(); Debug.WriteLine($" completed in {sw.ElapsedMilliseconds}ms. Content was {content}."); if (i % 2 == 0) { Debug.WriteLine($"Iteration {i}. Invalidating cache."); handler.InvalidateCache(new Uri(url)); } } } StatsResult stats = handler.StatsProvider.GetStatistics(); stats.Total.CacheHit.Should().Be(2); stats.Total.CacheMiss.Should().Be(3); }
public async Task Invalidates_cache_correctly() { // setup var testMessageHandler = new TestMessageHandler(); var handler = new InMemoryCacheHandler(testMessageHandler); var client = new HttpClient(handler); // execute twice, with cache invalidation in between var uri = new Uri("http://unittest"); await client.GetAsync(uri); handler.InvalidateCache(uri); await client.GetAsync(uri); // validate testMessageHandler.NumberOfCalls.Should().Be(2); }