コード例 #1
0
ファイル: QuotaRuleTests.cs プロジェクト: kittinap/kunnjae
        public async Task NoPurgingIf(bool withinTargetQuota, bool canceled)
        {
            var evictResult = new EvictResult(10, 20, 30, lastAccessTime: DateTime.Now, successfullyEvictedHash: true, replicaCount: 1);
            var rule        = CreateRule(withinTargetQuota ? SizeWithinTargetQuota : SizeBeyondTargetQuota, evictResult);

            using (var cts = new CancellationTokenSource())
            {
                if (canceled)
                {
                    cts.Cancel();
                }

                var result = await rule.PurgeAsync(new Context(Logger), 1, new[] { new ContentHashWithLastAccessTimeAndReplicaCount(ContentHash.Random(), DateTime.UtcNow) }, cts.Token);

                // No purging if within quota, there's an active sensitive session, or cancellation has been requested.
                if (withinTargetQuota || canceled)
                {
                    AssertNoPurging(result);
                }
                else
                {
                    AssertPurged(result, evictResult);
                }
            }
        }
コード例 #2
0
ファイル: MaxSizeRuleTests.cs プロジェクト: kittinap/kunnjae
 protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null)
 {
     return(new MaxSizeRule(
                new MaxSizeQuota(Hard, Soft),
                (context, contentHashInfo, onlyUnlinked) => Task.FromResult(evictResult ?? new EvictResult("error")),
                () => currentSize));
 }
コード例 #3
0
ファイル: QuotaRuleTests.cs プロジェクト: kittinap/kunnjae
        public async Task ErrorPropagated()
        {
            var evictResult = new EvictResult($"{nameof(ErrorPropagated)} test error.");
            var rule        = CreateRule(SizeBeyondTargetQuota, evictResult);

            using (var cts = new CancellationTokenSource())
            {
                var result = await rule.PurgeAsync(new Context(Logger), 10, new[] { new ContentHashWithLastAccessTimeAndReplicaCount(ContentHash.Random(), DateTime.UtcNow) }, cts.Token);

                result.ShouldBeError(evictResult.ErrorMessage);
            }
        }
コード例 #4
0
        protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null)
        {
            var dummyPath = PathGeneratorUtilities.GetAbsolutePath("C", "dummy");
            var mock      = new TestAbsFileSystem(currentSize);

            var quota = new DiskFreePercentQuota(Hard, Soft);

            return(new DiskFreePercentRule(
                       quota,
                       mock,
                       new AbsolutePath(dummyPath)));
        }
コード例 #5
0
        protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null)
        {
            var dummyPath = PathGeneratorUtilities.GetAbsolutePath("C", "dummy");
            var mock      = new TestAbsFileSystem(currentSize);

            var mockStore = new TestContentStoreInternal(dummyPath);

            var quota = new DiskFreePercentQuota(Hard, Soft);

            return(new DiskFreePercentRule(
                       quota,
                       (context, contentHashInfo, onlyUnlinked) => Task.FromResult(evictResult ?? new EvictResult("error")),
                       mock,
                       new AbsolutePath(dummyPath)));
        }
コード例 #6
0
        protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null)
        {
            var root = new DisposableDirectory(FileSystem);
            Func <IQuotaRule> ruleFactory = () =>
            {
                var initialQuota = new MaxSizeQuota(Hard);
                return(new ElasticSizeRule(
                           ElasticSizeRule.DefaultHistoryWindowSize,
                           initialQuota,
                           () => currentSize,
                           windowSize => new PinSizeHistory.ReadHistoryResult(new long[0], DateTime.UtcNow.Ticks),
                           FileSystem,
                           root.Path));
            };

            return(new ForwardingQuotaRule(ruleFactory, root));
        }
コード例 #7
0
 protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null)
 {
     return(new MaxSizeRule(
                new MaxSizeQuota(Hard, Soft),
                () => currentSize));
 }
コード例 #8
0
ファイル: QuotaRuleTests.cs プロジェクト: kittinap/kunnjae
 protected abstract IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null);
コード例 #9
0
ファイル: QuotaRuleTests.cs プロジェクト: kittinap/kunnjae
 private static void AssertPurged(PurgeResult result, EvictResult expectedResult)
 {
     result.EvictedFiles.Should().Be(expectedResult.EvictedFiles);
     result.EvictedSize.Should().Be(expectedResult.EvictedSize);
     result.PinnedSize.Should().Be(expectedResult.PinnedSize);
 }