Ejemplo n.º 1
0
        public void CacheAddOrUpdateAppliesUpdateToItemsWhenMultiThreaded()
        {
            const int expectedCount = 10000;

            using (var cache = new TimeToLiveCache <long, List <TimeToLiveTestItem> >())
            {
                var options = new ParallelOptions
                {
                    MaxDegreeOfParallelism = 64
                };

                Parallel.For(0, 10000, options, i =>
                {
                    var cacheItem = new TimeToLiveTestItem {
                        Id = 1
                    };
                    Func <long, List <TimeToLiveTestItem>, List <TimeToLiveTestItem> > updater =
                        (k, items) =>
                    {
                        items.Add(cacheItem);
                        return(items);
                    };

                    cache.AddOrUpdate(1, new List <TimeToLiveTestItem> {
                        cacheItem
                    }, updater);
                });

                var result = cache[1];

                Assert.AreEqual(expectedCount, result.Count);
            }
        }
Ejemplo n.º 2
0
        public void CacheAddOrUpdateThrowsIfTimeoutIsNegative()
        {
            using (var cache = new TimeToLiveCache <long, object>())
            {
                var item = new TimeToLiveTestItem {
                    Id = 1
                };

                Assert.Throws <ArgumentOutOfRangeException>(() => cache.AddOrUpdate(item.Id, item, -10));
            }
        }
Ejemplo n.º 3
0
        public void CacheAddsItem()
        {
            using (var cache = new TimeToLiveCache <long, object>(5000))
            {
                var item = new TimeToLiveTestItem {
                    Id = 1
                };
                cache.AddOrUpdate(item.Id, item);

                Assert.IsTrue(cache.Contains(item.Id));
            }
        }
Ejemplo n.º 4
0
        public void CacheEvictsItemIfTieoutReached()
        {
            using (var cache = new TimeToLiveCache <long, object>())
            {
                var item = new TimeToLiveTestItem {
                    Id = 1
                };
                cache.AddOrUpdate(item.Id, item, 100);

                Thread.Sleep(500);

                Assert.IsFalse(cache.Contains(item.Id));
            }
        }
Ejemplo n.º 5
0
        public void CacheRestartsTimerForItem()
        {
            using (var cache = new TimeToLiveCache <long, object>())
            {
                var item = new TimeToLiveTestItem {
                    Id = 1
                };

                cache.AddOrUpdate(item.Id, item, 500);
                cache.AddOrUpdate(item.Id, item, 2000, true);

                Thread.Sleep(500);

                Assert.IsTrue(cache.Contains(item.Id));
            }
        }
Ejemplo n.º 6
0
        public void CacheDoesNotEvictItemBeforeTimeoutReached()
        {
            const int defaultTimeout = 500;
            const int customTimeout  = 30000;

            using (var cache = new TimeToLiveCache <long, object>(defaultTimeout))
            {
                var item = new TimeToLiveTestItem {
                    Id = 1
                };
                cache.AddOrUpdate(item.Id, item, customTimeout);

                Thread.Sleep(defaultTimeout);

                Assert.IsTrue(cache.Contains(item.Id));
            }
        }
Ejemplo n.º 7
0
        public void CacheUpdatesItem()
        {
            const string expectedName = "bar";

            using (var cache = new TimeToLiveCache <long, object>())
            {
                var item = new TimeToLiveTestItem {
                    Id = 1, Name = "foo"
                };
                cache.AddOrUpdate(item.Id, item);

                item = new TimeToLiveTestItem {
                    Id = 1, Name = "bar"
                };
                cache.AddOrUpdate(item.Id, item);

                var result = cache[item.Id] as TimeToLiveTestItem;

                Assert.AreEqual(expectedName, result.Name);
            }
        }