Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
 public void SetUp()
 {
     var registryFile = Path.Combine(Path.GetTempPath(),
     Path.GetRandomFileName());
       var nsName = Path.GetRandomFileName();
       _cacheRegistry = new CacheRegistry(registryFile, nsName);
 }
Exemplo n.º 6
0
        public void SetUp()
        {
            var registryFile = Path.Combine(Path.GetTempPath(),
                                            Path.GetRandomFileName());
            var nsName = Path.GetRandomFileName();

            _cacheRegistry = new CacheRegistry(registryFile, nsName);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }