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."); }
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()); }