namespace Ocelot.UnitTests.Cache { using System; using System.Threading; using Ocelot.Cache; using Shouldly; using Xunit; public class InMemoryCacheTests { private readonly InMemoryCache _cache; public InMemoryCacheTests() { _cache = new InMemoryCache(); } [Fact] public void should_cache() { var fake = new Fake(1); _cache.Add("1", fake, TimeSpan.FromSeconds(100), "region"); var result = _cache.Get("1", "region"); result.ShouldBe(fake); fake.Value.ShouldBe(1); } [Fact] public void should_clear_region() { var fake = new Fake(1); _cache.Add("1", fake, TimeSpan.FromSeconds(100), "region"); _cache.ClearRegion("region"); var result = _cache.Get("1", "region"); result.ShouldBeNull(); } [Fact] public void should_clear_key_if_ttl_expired() { var fake = new Fake(1); _cache.Add("1", fake, TimeSpan.FromMilliseconds(50), "region"); Thread.Sleep(200); var result = _cache.Get("1", "region"); result.ShouldBeNull(); } [Theory] [InlineData(0)] [InlineData(-1)] public void should_not_add_to_cache_if_timespan_empty(int ttl) { var fake = new Fake(1); _cache.Add("1", fake, TimeSpan.FromSeconds(ttl), "region"); var result = _cache.Get("1", "region"); result.ShouldBeNull(); } class Fake { public Fake(int value) { Value = value; } public int Value { get; } } } }