コード例 #1
0
 public StoreItem(IFileInfo fileInfo, BundleCacheData data)
 {
     FileInfo  = fileInfo;
     Timestamp = data.Timestamp;
     Version   = data.Version;
     IsExpired = false;
 }
コード例 #2
0
 public StoreItemMetadata(string itemFileName, BundleCacheData data, IBundleCacheOptions cacheOptions)
 {
     ItemFileName       = itemFileName;
     Timestamp          = data.Timestamp;
     Version            = data.Version;
     AbsoluteExpiration = cacheOptions.AbsoluteExpiration;
     SlidingExpiration  = cacheOptions.SlidingExpiration;
 }
コード例 #3
0
ファイル: BundleCacheTest.cs プロジェクト: akhumzi/bundling
        public virtual async Task Remove()
        {
            Setup();
            try
            {
                var data = new BundleCacheData
                {
                    Version   = "1",
                    Timestamp = DateTimeOffset.UtcNow,
                    Content   = Encoding.UTF8.GetBytes("html { }")
                };

                var key                  = new BundleCacheKey(0, "/test.css", QueryString.Empty);
                var factoryRun           = false;
                IBundleCacheItem addItem = await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(data));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : true);

                Assert.True(factoryRun);

                if (addItem.FileReleaser != NullDisposable.Instance)
                {
                    // file is not released so the next call must block (remove should acquire a writer lock)

                    Task removeItemTask = Cache.RemoveAsync(key, CancellationToken.None);

                    await AsyncHelper.NeverCompletesAsync(removeItemTask);

                    // releasing file

                    addItem.FileReleaser.Dispose();
                    try { await removeItemTask; }
                    catch (ApplicationException) { }
                }

                // re-checking

                await Cache.RemoveAsync(key, CancellationToken.None);

                factoryRun = false;
                await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(data));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : false);

                Assert.True(factoryRun);
            }
            finally
            {
                Teardown();
            }
        }
コード例 #4
0
ファイル: BundleCacheTest.cs プロジェクト: akhumzi/bundling
        public virtual async Task Options_AbsoluteExpiration()
        {
            Setup(expirationScanFrequency: TimeSpan.FromSeconds(0.1));
            try
            {
                var data = new BundleCacheData
                {
                    Version   = "1",
                    Timestamp = DateTimeOffset.UtcNow,
                    Content   = Encoding.UTF8.GetBytes("html { }")
                };

                var key = new BundleCacheKey(0, "/test.css", QueryString.Empty);

                var factoryRun = false;
                await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(data));
                }, CancellationToken.None, new BundleCacheOptions { AbsoluteExpiration = Clock.UtcNow.AddSeconds(1) }, lockFile : false);

                Assert.True(factoryRun);

                factoryRun = false;
                await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(new BundleCacheData()));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : false);

                Assert.False(factoryRun);

                await Task.Delay(TimeSpan.FromSeconds(3));

                factoryRun = false;
                await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(data));
                }, CancellationToken.None, new BundleCacheOptions { AbsoluteExpiration = Clock.UtcNow.AddSeconds(1) }, lockFile : false);

                Assert.True(factoryRun);
            }
            finally
            {
                Teardown();
            }
        }
コード例 #5
0
 public Item(IFileInfo fileInfo, BundleCacheData metadata)
 {
     FileInfo = fileInfo;
     Version  = metadata.Version;
 }
コード例 #6
0
ファイル: BundleCacheTest.cs プロジェクト: akhumzi/bundling
        public virtual async Task GetOrAdd()
        {
            Setup();
            try
            {
                var data = new BundleCacheData
                {
                    Version   = "1",
                    Timestamp = DateTimeOffset.UtcNow,
                    Content   = Encoding.UTF8.GetBytes("html { }")
                };

                var key                  = new BundleCacheKey(0, "/test.css", QueryString.Empty);
                var factoryRun           = false;
                IBundleCacheItem addItem = await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(data));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : true);

                Assert.True(factoryRun);

                if (addItem.FileReleaser != NullDisposable.Instance)
                {
                    // file is not released so the next call must block (using a parametrized key will force acquiring a writer lock)

                    var key2 = new BundleCacheKey(key.ManagerId, key.Path, new QueryString("?q"));
                    Task <IBundleCacheItem> getItemTask = Cache.GetOrAddAsync(key2, ct => throw new ApplicationException(), CancellationToken.None, BundleCacheOptions.Default, lockFile: false);

                    await AsyncHelper.NeverCompletesAsync(getItemTask);

                    // releasing file

                    addItem.FileReleaser.Dispose();
                    try { await getItemTask; }
                    catch (ApplicationException) { }
                }

                // re-checking

                factoryRun = false;
                IBundleCacheItem getItem = await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(new BundleCacheData()));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : false);

                Assert.False(factoryRun);

                Assert.Equal(data.Version, getItem.Version);
                Assert.Equal(data.Timestamp, getItem.Timestamp);
                Assert.True(!ProvidesPhysicalFiles ^ getItem.FileInfo is PhysicalFileInfo);
                Assert.Equal(data.Content, await FileHelper.GetContentAsync(getItem.FileInfo));

                // file lock was not requested so next call must not block

                factoryRun = false;
                getItem    = await Cache.GetOrAddAsync(key, ct =>
                {
                    factoryRun = true;
                    return(Task.FromResult(new BundleCacheData()));
                }, CancellationToken.None, BundleCacheOptions.Default, lockFile : false);

                Assert.False(factoryRun);
            }
            finally
            {
                Teardown();
            }
        }