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); } } }
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)); }
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); } }
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))); }
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))); }
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)); }
protected override IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null) { return(new MaxSizeRule( new MaxSizeQuota(Hard, Soft), () => currentSize)); }
protected abstract IQuotaRule CreateRule(long currentSize, EvictResult evictResult = null);
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); }