From 4a2a94ddfb41b433b5d84cd40b29d3539520a444 Mon Sep 17 00:00:00 2001 From: "ai.astrakhantsev" Date: Thu, 3 Nov 2022 13:58:40 +0500 Subject: [PATCH] #7205798 test --- .../EfCache/EfCacheExtensions.cs | 14 +++-- AsbCloudWebApi.Tests/CacheTests/CacheTest.cs | 61 +++++++++++++++++++ 2 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 AsbCloudWebApi.Tests/CacheTests/CacheTest.cs diff --git a/AsbCloudInfrastructure/EfCache/EfCacheExtensions.cs b/AsbCloudInfrastructure/EfCache/EfCacheExtensions.cs index c2eec646..0a93c70c 100644 --- a/AsbCloudInfrastructure/EfCache/EfCacheExtensions.cs +++ b/AsbCloudInfrastructure/EfCache/EfCacheExtensions.cs @@ -158,8 +158,11 @@ namespace AsbCloudInfrastructure.EfCache { try { - cache = new CacheItem(); - caches.Add(tag, cache); + if (!caches.ContainsKey(tag)) + { + cache = new CacheItem(); + caches.Add(tag, cache); + } } finally { @@ -231,8 +234,11 @@ namespace AsbCloudInfrastructure.EfCache { try { - cache = new CacheItem(); - caches.Add(tag, cache); + if (!caches.ContainsKey(tag)) + { + cache = new CacheItem(); + caches.Add(tag, cache); + } } finally { diff --git a/AsbCloudWebApi.Tests/CacheTests/CacheTest.cs b/AsbCloudWebApi.Tests/CacheTests/CacheTest.cs new file mode 100644 index 00000000..f67a0a46 --- /dev/null +++ b/AsbCloudWebApi.Tests/CacheTests/CacheTest.cs @@ -0,0 +1,61 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Services; +using AsbCloudDb.Model; +using AsbCloudInfrastructure.EfCache; +using DocumentFormat.OpenXml.Spreadsheet; +using Mapster; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace AsbCloudWebApi.Tests.CacheTests +{ + public class CacheTest + { + private readonly string userCacheTag = "Users"; + private static readonly TimeSpan cacheObsolence = TimeSpan.FromMinutes(15); + public IEnumerable UsersCache = new List { + new User { Id = 1, Name = "test1", Email = "test1@mail.com" }, + new User { Id = 2, Name = "test2", Email = "test2@mail.com" }, + new User { Id = 3, Name = "test3", Email = "test3@mail.com" }, + new User { Id = 4, Name = "test4", Email = "test4@mail.com" }, + new User { Id = 5, Name = "test5", Email = "test5@mail.com" }, + new User { Id = 6, Name = "test6", Email = "test6@mail.com" }, + new User { Id = 7, Name = "test7", Email = "test7@mail.com" } + }; + + [Fact] + public void Send_n_requests_cache_user() + { + const int iterations = 1230; + var cache = UsersCache.AsQueryable(); + var cacheCount = UsersCache.Count(); + var fail = false; + + var tasks = new int[iterations].Select(_=> new Task(() => + { + var data = cache.FromCache(userCacheTag, cacheObsolence, Convert).ToArray(); + if (data.Count() != cacheCount) + fail = true; + })) + .ToArray(); + + foreach(var task in tasks) + task.Start(); + + Task.WaitAll(tasks); + Assert.False(fail); + } + + private UserExtendedDto Convert(User entity) + { + var dto = entity.Adapt(); + return dto; + } + } +}