Ejemplo n.º 1
0
        public async Task SportEventCacheItemConcurrencyTest()
        {
            Assert.AreEqual(0, _memoryCache.Count());
            var i     = 1000;
            var tasks = new List <Task>();

            while (i > 0)
            {
                var culture = TestData.Cultures4[StaticRandom.I(4)];
                i--;
                Debug.Write($"Loading {i} culture: {culture.TwoLetterISOLanguageName}\n");
                var ci = (MatchCI)_sportEventCache.GetEventCacheItem(TestData.EventId);
                tasks.Add(ci.GetNamesAsync(new[] { culture }));
                tasks.Add(ci.GetFixtureAsync(new[] { culture }));
                tasks.Add(ci.GetTournamentIdAsync());
                tasks.Add(ci.GetCompetitorsIdsAsync(new[] { culture }));
                await Task.WhenAll(tasks);

                if (i % 10 == 3)
                {
                    Debug.Write($"Deleting {i} culture: {culture.TwoLetterISOLanguageName}\n");
                    _sportEventCache.CacheDeleteItem(TestData.EventId, CacheItemType.All);
                }
                else
                {
                    var c1 = _dataRouterManager.GetCallCount(SportEventSummary);
                    TestData.ValidateTestEventId(ci, new[] { culture }, true);
                    var c2 = _dataRouterManager.GetCallCount(SportEventSummary);
                    Assert.AreEqual(c1, c2);
                }
            }
            Assert.AreEqual(2, _memoryCache.Count());
        }
        public async Task SportEventCacheSemiWithVariableDelayAndPause200ConcurrencyTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            _dataRouterManager.AddDelay(TimeSpan.FromMilliseconds(1000), true, 30);
            _sportEventCache.LockManager = new LockManager(new ConcurrentDictionary <string, DateTime>(), TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(200));
            var tasks = new List <Task <MatchCI> >();

            while (i > 0)
            {
                var matchId = URN.Parse($"sr:match:1{StaticRandom.I100}");
                i--;

                tasks.Add(GetMatchCacheItemAsync(matchId, culture, stopWatch, i));
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            foreach (var task in tasks)
            {
                Assert.IsNotNull(task.Result);
                Assert.IsNotNull(task.Result.Id);
            }
            Assert.IsTrue(_memoryCache.Count() > 50);
            Assert.IsTrue(_memoryCache.Count() < 100);
        }
        public async Task SportEventCacheCustomerScenarioAllRequestSlowAndPause200ConcurrencyNewThreadsTest()
        {
            //ThreadPool.SetMaxThreads(10, 10);
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            _dataRouterManager.AddDelay(TimeSpan.FromMilliseconds(300), false, 90);
            _sportEventCache.LockManager = new LockManager(new ConcurrentDictionary <string, DateTime>(), TimeSpan.FromSeconds(30), TimeSpan.FromMilliseconds(200));
            var tasks = new List <Task <MatchCI> >();

            while (i > 0)
            {
                var matchId = URN.Parse($"sr:match:1{StaticRandom.I100}");
                i--;

                var task = GetMatchCacheItemAsync(matchId, culture, stopWatch, i);
                tasks.Add(task);
                var t = new Thread(async() => { await task.ConfigureAwait(false); });
                t.Name = $"thread {i}-{matchId}";
                t.Start();
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            foreach (var task in tasks)
            {
                Assert.IsNotNull(task.Result);
                Assert.IsNotNull(task.Result.Id);
            }
            Assert.IsTrue(_memoryCache.Count() > 50);
            Assert.IsTrue(_memoryCache.Count() < 100);
        }
        public async Task SportEventCacheSemiConcurrencyTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];
            var tasks   = new List <Task <MatchCI> >();

            while (i > 0)
            {
                var matchId = URN.Parse($"sr:match:1{StaticRandom.I100}");
                i--;

                tasks.Add(GetMatchCacheItemAsync(matchId, culture, stopWatch, i));
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            foreach (var task in tasks)
            {
                Assert.IsNotNull(task.Result);
                Assert.IsNotNull(task.Result.Id);
            }
            Assert.IsTrue(_memoryCache.Count() > 50);
            Assert.IsTrue(_memoryCache.Count() < 100);
        }
        public async Task SportEventCacheSingleItemSequentialTest()
        {
            // slow implementation of async calls
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            while (i > 0)
            {
                i--;

                var ci = await GetMatchCacheItemAsync(TestData.EventId, culture, stopWatch, i).ConfigureAwait(false);

                Assert.IsNotNull(ci);
                Assert.AreEqual(TestData.EventId, ci.Id);

                if (i % 10 != 3)
                {
                    var c1 = _dataRouterManager.GetCallCount(SportEventSummary);
                    TestData.ValidateTestEventId(ci, new[] { culture }, true);
                    var c2 = _dataRouterManager.GetCallCount(SportEventSummary);
                    Assert.AreEqual(c1, c2);
                }
            }
            Assert.AreEqual(2, _memoryCache.Count());
        }
        public async Task SportEventCacheItemConcurrencyTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i     = 1000;
            var tasks = new List <Task>();

            while (i > 0)
            {
                var startTime = stopWatch.Elapsed;
                i--;
                tasks.Clear();
                var culture = TestData.Cultures4[StaticRandom.I(4)];
                Debug.WriteLine($"Loading {i} culture: {culture.TwoLetterISOLanguageName}");
                var ci = (MatchCI)_sportEventCache.GetEventCacheItem(TestData.EventId);
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} culture: {culture.TwoLetterISOLanguageName}");
                tasks.Add(ci.GetNamesAsync(new[] { culture }));
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} name");
                tasks.Add(ci.GetFixtureAsync(new[] { culture }));
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} fixture");
                tasks.Add(ci.GetTournamentIdAsync(TestData.Cultures));
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} tournament");
                tasks.Add(ci.GetBookingStatusAsync());
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} booking status");
                tasks.Add(ci.GetCompetitorsIdsAsync(new[] { culture }));
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} competitors");
                tasks.Add(ci.GetVenueAsync(new[] { culture }));
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} venue");
                tasks.Add(ci.GetLiveOddsAsync());
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} live odds");
                tasks.Add(ci.GetSportEventTypeAsync());
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} sport event type");
                tasks.Add(ci.GetStageTypeAsync());
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} stage type");
                tasks.Add(ci.FetchSportEventStatusAsync());
                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} status");
                Debug.WriteLine($"{GetElapsed(stopWatch)} Prepare tasks {i} culture: {culture.TwoLetterISOLanguageName}");
                await Task.WhenAll(tasks).ConfigureAwait(false);

                if (i % 10 == 3)
                {
                    Debug.WriteLine($"{GetElapsed(stopWatch)} Deleting {i} culture: {culture.TwoLetterISOLanguageName}");
                    _sportEventCache.CacheDeleteItem(TestData.EventId, CacheItemType.All);
                }
                else
                {
                    var c1 = _dataRouterManager.GetCallCount(SportEventSummary);
                    TestData.ValidateTestEventId(ci, new[] { culture }, true);
                    var c2 = _dataRouterManager.GetCallCount(SportEventSummary);
                    Assert.AreEqual(c1, c2);
                }
                var took = stopWatch.Elapsed - startTime;
                Debug.WriteLine($"{GetElapsed(stopWatch)} Iteration {i} completed. Took {took.Milliseconds} ms.");
            }
            Assert.AreEqual(2, _memoryCache.Count());
        }
        public void MultipleCompetitorsWithLanguagesAreCachedAndApiCalledOnceForEach()
        {
            const string callType = "GetCompetitorAsync";
            const int    cidCount = 100;

            Assert.IsNotNull(_memoryCache);
            Assert.IsTrue(!_memoryCache.Any());

            for (var i = 0; i < 1000; i++)
            {
                Debug.Print(i.ToString());
                var cid        = i < cidCount ? i + 1 : StaticRandom.I(cidCount);
                var competitor = _profileCache.GetCompetitorProfileAsync(CreateCompetitorUrn(cid), TestData.Cultures).Result;
                Assert.IsNotNull(competitor);
            }

            Assert.AreEqual(cidCount, _memoryCache.Count(s => s.Key.Contains(":competitor:")));
            Assert.AreEqual(TestData.Cultures.Count * cidCount, _dataRouterManager.GetCallCount(callType), $"{callType} should be called exactly {TestData.Cultures.Count * cidCount} times.");
        }
        public async Task SportEventCacheUniqueItemSequentialTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            while (i > 0)
            {
                var matchId = URN.Parse($"sr:match:{i}");
                i--;

                var ci = await GetMatchCacheItemAsync(matchId, culture, stopWatch, i).ConfigureAwait(false);

                Assert.IsNotNull(ci);
                Assert.AreEqual(matchId, ci.Id);
            }
            Assert.IsTrue(_memoryCache.Count() > 500);
        }
        //[TestMethod, Timeout(300000)]
        public async Task SportEventCacheSemiWithDelaySequentialTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            _dataRouterManager.AddDelay(TimeSpan.FromMilliseconds(1000), true, 30);
            while (i > 0)
            {
                var matchId = URN.Parse($"sr:match:1{StaticRandom.I100}");
                i--;

                var ci = await GetMatchCacheItemAsync(matchId, culture, stopWatch, i).ConfigureAwait(false);

                Assert.IsNotNull(ci);
                Assert.AreEqual(matchId, ci.Id);
            }
            Assert.IsTrue(_memoryCache.Count() > 50);
            Assert.IsTrue(_memoryCache.Count() < 100);
        }
        public async Task SportEventCacheSingleItemConcurrencyTest()
        {
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i       = 1000;
            var tasks   = new List <Task <MatchCI> >();
            var culture = TestData.Cultures4[StaticRandom.I(4)];

            while (i > 0)
            {
                i--;
                tasks.Add(GetMatchCacheItemAsync(TestData.EventId, culture, stopWatch, i));
            }

            await Task.WhenAll(tasks).ConfigureAwait(false);

            foreach (var task in tasks)
            {
                if (task.Result == null)
                {
                    continue;
                }
                Assert.IsNotNull(task.Result);
                Assert.IsNotNull(task.Result.Id);

                if (task.Result.Id.Id % 10 != 3)
                {
                    var c1 = _dataRouterManager.GetCallCount(SportEventSummary);
                    TestData.ValidateTestEventId(task.Result, new[] { culture }, true);
                    var c2 = _dataRouterManager.GetCallCount(SportEventSummary);
                    Assert.AreEqual(c1, c2);
                }
            }

            Assert.AreEqual(2, _memoryCache.Count());
        }
        public void MultipleCompetitorsWithLanguagesAreCachedAndApiCalledOnceForEachDelayedAsyncPerf()
        {
            const string callType = "GetCompetitorAsync";
            const int    cidCount = 1000;

            Assert.IsNotNull(_memoryCache);
            Assert.IsTrue(!_memoryCache.Any());
            Assert.AreEqual(0, _dataRouterManager.GetCallCount(callType), $"{callType} should be called 0 times.");
            _dataRouterManager.AddDelay(TimeSpan.FromSeconds(10), true, 10);

            var tasks = new List <Task>();

            for (var i = 0; i < 10000; i++)
            {
                var cid  = i < cidCount ? i + 1 : StaticRandom.I(cidCount);
                var task = _profileCache.GetCompetitorProfileAsync(CreateCompetitorUrn(cid), TestData.Cultures);
                tasks.Add(task);
            }

            Task.WhenAll(tasks).Wait();

            Assert.AreEqual(cidCount, _memoryCache.Count(s => s.Key.Contains(":competitor:")));
            Assert.AreEqual(TestData.Cultures.Count * cidCount, _dataRouterManager.GetCallCount(callType), $"{callType} should be called exactly {TestData.Cultures.Count * cidCount} times.");
        }
Ejemplo n.º 12
0
        public async Task SportEventCacheItemSequentialTest()
        {
            // slow implementation of async calls
            var stopWatch = Stopwatch.StartNew();

            Assert.AreEqual(0, _memoryCache.Count());
            var i = 1000;

            while (i > 0)
            {
                i--;
                var startTime = stopWatch.Elapsed;
                var culture   = TestData.Cultures4[StaticRandom.I(4)];

                Debug.WriteLine($"{GetElapsed(stopWatch)} Loading {i} culture: {culture.TwoLetterISOLanguageName}");
                var ci = (MatchCI)_sportEventCache.GetEventCacheItem(TestData.EventId);

                var name = await ci.GetNamesAsync(new[] { culture });

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} name");
                var fixture = await ci.GetFixtureAsync(new[] { culture });

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} fixture");
                var tour = await ci.GetTournamentIdAsync(TestData.Cultures);

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} tournament");
                var booking = await ci.GetBookingStatusAsync();

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} booking status");
                var comps = await ci.GetCompetitorsIdsAsync(new[] { culture });

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} competitors");
                var venue = await ci.GetVenueAsync(new[] { culture });

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} venue");
                var liveOdds = await ci.GetLiveOddsAsync();

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} live odds");
                var eventType = await ci.GetSportEventTypeAsync();

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} sport event type");
                var stageType = await ci.GetStageTypeAsync();

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} stage type");
                var status = await ci.FetchSportEventStatusAsync();

                Debug.WriteLine($"{GetElapsed(stopWatch)} Get {i} status");

                Debug.WriteLine($"{GetElapsed(stopWatch)} Tasks {i} completed.");
                if (i % 10 == 3)
                {
                    Debug.WriteLine($"{GetElapsed(stopWatch)} Deleting {i} culture: {culture.TwoLetterISOLanguageName}");
                    _sportEventCache.CacheDeleteItem(TestData.EventId, CacheItemType.All);
                }
                else
                {
                    var c1 = _dataRouterManager.GetCallCount(SportEventSummary);
                    TestData.ValidateTestEventId(ci, new[] { culture }, true);
                    var c2 = _dataRouterManager.GetCallCount(SportEventSummary);
                    Assert.AreEqual(c1, c2);
                }

                var took = stopWatch.Elapsed - startTime;
                Debug.WriteLine($"{GetElapsed(stopWatch)} Iteration {i} completed. Took {took.Milliseconds} ms.");
            }
            Assert.AreEqual(2, _memoryCache.Count());
        }