public void Set_EventsAreTriggeredSuccessfully(bool flag1, bool flag2) { var config = new LocalCacheEventsWrapperConfig <int, int>(); var successfulResults = new List <(int, int, TimeSpan, TimeSpan)>(); var failedResults = new List <(int, int, TimeSpan, TimeSpan, Exception)>(); if (flag1) { config.OnSetCompletedSuccessfully = (key, value, timeToLive, duration) => { successfulResults.Add((key, value, timeToLive, duration)); }; } if (flag2) { config.OnSetException = (key, value, timeToLive, duration, exception) => { failedResults.Add((key, value, timeToLive, duration, exception)); return(key == 5); }; } var innerCache = new MockLocalCache <int, int>(); var cache = new LocalCacheEventsWrapper <int, int>(config, innerCache); cache.Set(1, 2, TimeSpan.FromSeconds(1)); if (flag1) { successfulResults.Should().ContainSingle(); successfulResults.Last().Item1.Should().Be(1); successfulResults.Last().Item2.Should().Be(2); successfulResults.Last().Item3.Should().Be(TimeSpan.FromSeconds(1)); successfulResults.Last().Item4.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { successfulResults.Should().BeEmpty(); } innerCache.ThrowExceptionOnNextAction(); Action action = () => cache.Set(3, 4, TimeSpan.FromSeconds(1)); action.Should().Throw <Exception>(); if (flag2) { failedResults.Should().ContainSingle(); failedResults.Last().Item1.Should().Be(3); failedResults.Last().Item2.Should().Be(4); failedResults.Last().Item3.Should().Be(TimeSpan.FromSeconds(1)); failedResults.Last().Item4.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { failedResults.Should().BeEmpty(); } innerCache.ThrowExceptionOnNextAction(); action = () => cache.Set(5, 6, TimeSpan.FromSeconds(1)); if (flag2) { action(); failedResults.Should().HaveCount(2); failedResults.Last().Item1.Should().Be(5); failedResults.Last().Item2.Should().Be(6); failedResults.Last().Item3.Should().Be(TimeSpan.FromSeconds(1)); failedResults.Last().Item4.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { action.Should().Throw <Exception>(); failedResults.Should().BeEmpty(); } }
public void GetMany_EventsAreTriggeredSuccessfully(bool flag1, bool flag2) { var config = new LocalCacheEventsWrapperConfig <int, int>(); var successfulResults = new List <(IReadOnlyCollection <int>, IReadOnlyCollection <KeyValuePair <int, int> >, TimeSpan)>(); var failedResults = new List <(IReadOnlyCollection <int>, TimeSpan, Exception)>(); if (flag1) { config.OnGetManyCompletedSuccessfully = (keys, values, duration) => { successfulResults.Add((keys, values, duration)); }; } if (flag2) { config.OnGetManyException = (keys, duration, exception) => { failedResults.Add((keys, duration, exception)); return(keys.Contains(3)); }; } var innerCache = new MockLocalCache <int, int>(); var cache = new LocalCacheEventsWrapper <int, int>(config, innerCache); var keys = new[] { 1, 2 }; cache.Set(1, 2, TimeSpan.FromSeconds(1)); cache.GetMany(keys); if (flag1) { successfulResults.Should().ContainSingle(); successfulResults.Last().Item1.Should().BeEquivalentTo(keys); successfulResults.Last().Item2.ToArray().Should().BeEquivalentTo(new KeyValuePair <int, int>(1, 2)); successfulResults.Last().Item3.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { successfulResults.Should().BeEmpty(); } innerCache.ThrowExceptionOnNextAction(); Action action = () => cache.GetMany(keys); action.Should().Throw <Exception>(); if (flag2) { failedResults.Should().ContainSingle(); failedResults.Last().Item1.Should().BeEquivalentTo(keys); failedResults.Last().Item2.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { failedResults.Should().BeEmpty(); } keys[1] = 3; innerCache.ThrowExceptionOnNextAction(); action = () => cache.GetMany(keys); if (flag2) { action(); failedResults.Should().HaveCount(2); failedResults.Last().Item1.Should().BeEquivalentTo(keys); failedResults.Last().Item2.Should().BePositive().And.BeCloseTo(TimeSpan.Zero, TimeSpan.FromMilliseconds(100)); } else { action.Should().Throw <Exception>(); failedResults.Should().BeEmpty(); } }