Esempio n. 1
0
        public void Duration_UnitTest()
        {
            string            key1     = "key1";
            string            expected = "test";
            string            myPolicy = "myPolicy";
            var               clock    = new SystemClock();
            RuntimeLocalCache cache    = CreateCache(new SystemClock());

            cache.Policies.Add(new Bb.Caching.CachePolicy()
            {
                Name = myPolicy, IsDefault = true, Duration = 10, Mode = Bb.Caching.PolicyMode.Default
            });

            Func <object> fnc = () =>
            {
                return(expected);
            };


            cache.GetOrResolve(key1, fnc, myPolicy);

            Assert.AreEqual(expected, cache.Get(key1));

            clock.UtcNow.Add(TimeSpan.FromMinutes(1));
        }
Esempio n. 2
0
        public void Concurrency_Fetcher_UnitTest2()
        {
            string            key1     = "key1";
            string            key2     = "key2";
            int               count    = 0;
            int               max      = 0;
            object            _lock    = new object();
            string            expected = "test";
            RuntimeLocalCache cache    = CreateCache(new SystemClock());

            Func <object> fnc = () =>
            {
                lock (_lock)
                    count++;

                max = Math.Max(max, count);
                Thread.Sleep(5);
                max = Math.Max(max, count);

                lock (_lock)
                    count--;

                return(expected);
            };

            Task.WaitAll(

                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key2, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key2, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key2, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key2, fnc, null))

                );

            Assert.AreEqual(expected, cache.Get(key1));
            Assert.AreEqual(expected, cache.Get(key2));
            Assert.AreEqual(max, 2);
        }
Esempio n. 3
0
        public void Concurrency_Fetcher_UnitTest()
        {
            string            key1     = "key1";
            int               count    = 0;
            object            _lock    = new object();
            string            expected = "test";
            RuntimeLocalCache cache    = CreateCache(new SystemClock());

            Func <object> fnc = () =>
            {
                Thread.Sleep(5);

                lock (_lock)
                    count++;

                return(expected);
            };

            Task.WaitAll(

                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null)),
                Task.Run(() => cache.GetOrResolve(key1, fnc, null))

                );

            var actual = cache.Get(key1);

            Assert.AreEqual(expected, actual);
            Assert.AreEqual(count, 1);
        }