/// <summary> /// Call once to initialize the context. /// </summary> /// <typeparam name="TSite">The CMS site model type.</typeparam> /// <param name="cacheConfig">The cache config instance.</param> /// <param name="umbracoConfig">The umbraco config instance.</param> /// <param name="mapBuild">The map build instance.</param> /// <param name="cacheBuild">The cache build instance.</param> public static void Init <TSite>(ICacheConfig cacheConfig, IUmbracoConfig umbracoConfig, IMapBuild mapBuild, ICacheBuild cacheBuild) where TSite : class, ISite { MapRegistry = new MapRegistry(); Mapper = new Mapper(MapRegistry); CacheRegistry = new CacheRegistry(cacheConfig); QueryFactory = new UmbracoQueryFactory(); CmsFetcher = new UmbracoFetcher(umbracoConfig); Registry = new Registry(MapRegistry, Mapper, CacheRegistry, QueryFactory, CmsFetcher); SiteCaches = new SiteCaches(CacheRegistry); _siteFunc = () => { var cache = SiteCaches.Default; var host = HttpContext.Current?.Request.Url.Host ?? string.Empty; var sites = cache.Fetch <TSite>()?.ToList(); return(sites?.FirstOrDefault(site => site.Hosts?.Contains(host) ?? false) ?? sites?.FirstOrDefault()); }; _cacheFunc = () => { var site = _siteFunc(); return(SiteCaches.Get(site) as Cache); }; mapBuild.Setup(Registry); cacheBuild.Setup(CacheRegistry); }
public System.Drawing.Size GetSize(string pathToFile) { // Путь известен, возвращаем if (Registries.Any(x => x.filePath == pathToFile)) { var _registry = Registries.Single(x => x.filePath == pathToFile); return(new System.Drawing.Size((int)_registry.width, (int)_registry.height)); } // Путь неизвестен, открываем, считаем, пишем, возвращаем else { var _size = IO.Image.GetImageSize(pathToFile); _size = Utility.Image.VirtualResize(_size.Width, _size.Height, this.MaxSizeToSerize); CacheRegistry newRegistry = new CacheRegistry() { filePath = pathToFile, width = _size.Width, height = _size.Height }; newRegistry.Save(this); Registries.Add(newRegistry); return(_size); } }
public void TestLoadCacheDirAndRegisterPath() { // Create cache dir string cacheDirPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); var cacheDirInfo = Directory.CreateDirectory(cacheDirPath); // Create several sub-directories var ns1DirInfo = cacheDirInfo.CreateSubdirectory("ns1"); string ns1file1Path = Path.Combine(ns1DirInfo.FullName, "file1"); File.WriteAllText(ns1file1Path, "content1"); var registryFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); var cacheRegistry = new CacheRegistry(registryFile, "myns"); // Load... cacheRegistry.LoadCacheDir(cacheDirPath); var keyStr = ServiceUtil.GetDictKeyString("ns1", "file1"); var actualVal = cacheRegistry[keyStr]; Assert.AreEqual(ns1file1Path, actualVal); // Register a path inside cache dir var fileInsideCache = Path.Combine(ns1DirInfo.FullName, "file2"); cacheRegistry.AddPathToRegistry(fileInsideCache, false); var actualVal1 = cacheRegistry[ServiceUtil.GetDictKeyString("ns1", "file2")]; Assert.AreEqual(fileInsideCache, actualVal1); // Register one outside the cache dir var fileOusideCache = IOUtil.GetRandomTempPath(); cacheRegistry.AddPathToRegistry(fileOusideCache, false); var actualVal2 = cacheRegistry[ServiceUtil.GetDictKeyString("myns", IOUtil.GetFileOrDirectoryName(fileOusideCache, false))]; Assert.AreEqual(fileOusideCache, actualVal2); }
public void Fetch_OnSave_test() { var root = Substitute.For <ISite>(); var cacheRegistry = new CacheRegistry(new TestCacheConfig()); var cacheStore = new CacheStore(); var cache = new Cache(cacheStore, cacheRegistry, root); async Task <IEnumerable <TestItem> > Task(ICache c) => await System.Threading.Tasks.Task.Run(() => new[] { new TestItem { ItemId = 1 }, new TestItem { ItemId = 3 }, new TestItem { ItemId = 2 } }).ConfigureAwait(false); cacheRegistry.Add(Task) .Span(300) .OnSave(x => x.OrderBy(y => y.ItemId)); var result = cache.Fetch <TestItem>().ToList(); Assert.That(result, Is.Not.Null); Assert.That(result.First().ItemId, Is.EqualTo(1)); Assert.That(result.Last().ItemId, Is.EqualTo(3)); }
public void SetUp() { var registryFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); var nsName = Path.GetRandomFileName(); _cacheRegistry = new CacheRegistry(registryFile, nsName); }
public void Reload_no_key() { var task = Substitute.For <Func <ICache, Task <IEnumerable <TestItem> > > >(); var cache = Substitute.For <ICache>(); var cacheRegistry = new CacheRegistry(new TestCacheConfig()); cacheRegistry.Add(task); cacheRegistry.Reload(cache); task.Received(1); }
public async Task ReloadAsync_no_key() { var task = Substitute.For <Func <ICache, Task <IEnumerable <TestItem> > > >(); var cache = Substitute.For <ICache>(); var cacheRegistry = new CacheRegistry(new TestCacheConfig()); cacheRegistry.Add(task); await cacheRegistry.ReloadAsync(cache).ConfigureAwait(false); task.Received(1); }
public async Task FetchAsync_lookup_test() { var root = Substitute.For <ISite>(); var cacheRegistry = new CacheRegistry(new TestCacheConfig()); var cacheStore = new CacheStore(); var lookup = new CacheLookup <CacheItem>().Add(x => x.LookupKey); var lookupOther = new CacheLookup <CacheItem>().Add(x => x.LookupKeyOther); var cache = new Cache(cacheStore, cacheRegistry, root); async Task <IEnumerable <CacheItem> > Task(ICache c) => await System.Threading.Tasks.Task.Run(() => new[] { new CacheItem { LookupKey = 1, LookupKeyOther = "2" }, new CacheItem { LookupKey = 1, LookupKeyOther = "2" }, new CacheItem { LookupKey = 2, LookupKeyOther = "1" } }).ConfigureAwait(false); cacheRegistry.Add(Task).Lookup(lookup).Lookup(lookupOther).Span(300); var result = await cache.FetchAsync(lookup).ConfigureAwait(false); var resultOther = await cache.FetchAsync(lookupOther).ConfigureAwait(false); var item = result["2"].First(); var itemOther = resultOther["1"].First(); Assert.That(result, Is.Not.Null); Assert.That(result.Count, Is.EqualTo(2)); Assert.That(result["1"].Count(), Is.EqualTo(2)); Assert.That(result["2"].Count(), Is.EqualTo(1)); Assert.That(resultOther, Is.Not.Null); Assert.That(resultOther.Count, Is.EqualTo(2)); Assert.That(resultOther["1"].Count(), Is.EqualTo(1)); Assert.That(resultOther["2"].Count(), Is.EqualTo(2)); Assert.That(item.Id, Is.EqualTo(itemOther.Id)); }
private ICache Setup(Action <IMapTask <TestEntity> > fit) { var mapRegistry = new MapRegistry(); var mapper = new Mapper(mapRegistry); var root = Substitute.For <ISite>(); var cacheRegistry = new CacheRegistry(new TestCacheConfig()); var cacheStore = new CacheStore(); var cache = new Cache(cacheStore, cacheRegistry, root); var queryFactory = Substitute.For <IQueryFactory>(); var cmsFetcher = Substitute.For <ICmsFetcher>(); var registry = new Registry(mapRegistry, mapper, cacheRegistry, queryFactory, cmsFetcher); mapRegistry.Copy <CmsKey>() .Map(x => x.Key, "key"); mapRegistry.Copy <Model>() .Map(x => x.Name, "alias"); registry.Register <TestInfo>(); registry.Register <TestItem>() .MatchMany(x => x.Infos); fit(registry.Register <TestEntity>()); var guid1 = Guid.NewGuid().ToString("N"); var guid2 = Guid.NewGuid().ToString("N"); var guid3 = Guid.NewGuid().ToString("N"); var guid4 = Guid.NewGuid().ToString("N"); var guid5 = Guid.NewGuid().ToString("N"); var guid6 = Guid.NewGuid().ToString("N"); var entity = new Dictionary <string, string> { { "key", guid1 }, { "alias", "test" }, { "id", "1000" }, { "list", "a,b,c" }, { "item", guid3 }, { "items", guid2 + "," + guid4 } }; var content = new UmbracoContent(entity); var item1 = new Dictionary <string, string> { { "key", guid2 }, { "alias", "testItem1" }, { "itemId", "1" }, { "price", "10.00" }, { "onSale", "true" }, { "infos", guid5 + "," + guid6 } }; var content1 = new UmbracoContent(item1); var item2 = new Dictionary <string, string> { { "key", guid3 }, { "alias", "testItem2" }, { "itemId", "2" }, { "price", "20.00" }, { "onSale", "true" } }; var content2 = new UmbracoContent(item2); var item3 = new Dictionary <string, string> { { "key", guid4 }, { "alias", "testItem3" }, { "itemId", "3" }, { "price", "30.00" }, { "onSale", "true" } }; var content3 = new UmbracoContent(item3); var info1 = new Dictionary <string, string> { { "key", guid5 }, { "alias", "testInfo1" }, { "infoId", "1" }, { "info", "info1" } }; var contentInfo1 = new UmbracoContent(info1); var info2 = new Dictionary <string, string> { { "key", guid6 }, { "alias", "testInfo2" }, { "infoId", "2" }, { "info", "info2" } }; var contentInfo2 = new UmbracoContent(info2); var mapItem = mapRegistry.For <TestItem>() as MapTask <TestItem>; var mapEntity = mapRegistry.For <TestEntity>() as MapTask <TestEntity>; var mapInfo = mapRegistry.For <TestInfo>() as MapTask <TestInfo>; var queryItem = Substitute.For <ICmsQuery <TestItem> >(); var queryEntity = Substitute.For <ICmsQuery <TestEntity> >(); var queryInfo = Substitute.For <ICmsQuery <TestInfo> >(); queryFactory.Create(root, mapItem).Returns(queryItem); queryFactory.Create(root, mapEntity).Returns(queryEntity); queryFactory.Create(root, mapInfo).Returns(queryInfo); var entityContents = new IContent[] { content }; var itemContents = new IContent[] { content1, content2, content3 }; var infoContents = new IContent[] { contentInfo2, contentInfo1 }; cmsFetcher.Fetch(queryItem).Returns(itemContents); cmsFetcher.Fetch(queryEntity).Returns(entityContents); cmsFetcher.Fetch(queryInfo).Returns(infoContents); return(cache); }