public void FeedToken_EPK_IsDone() { const string containerRid = "containerRid"; FeedTokenEPKRange token = new FeedTokenEPKRange(containerRid, new Documents.PartitionKeyRange() { MinInclusive = "A", MaxExclusive = "B" }); token.UpdateContinuation(Guid.NewGuid().ToString()); Assert.IsFalse(token.IsDone); token.UpdateContinuation(null); Assert.IsTrue(token.IsDone); }
public void FeedToken_EPK_IsDone_MultipleRanges() { const string containerRid = "containerRid"; FeedTokenEPKRange token = new FeedTokenEPKRange(containerRid, new List <Documents.PartitionKeyRange>() { new Documents.PartitionKeyRange() { MinInclusive = "A", MaxExclusive = "B" }, new Documents.PartitionKeyRange() { MinInclusive = "B", MaxExclusive = "C" }, new Documents.PartitionKeyRange() { MinInclusive = "C", MaxExclusive = "D" } }); // First range has continuation token.UpdateContinuation(Guid.NewGuid().ToString()); Assert.IsFalse(token.IsDone); // Second range is done token.UpdateContinuation(null); Assert.IsFalse(token.IsDone); // Third range is done token.UpdateContinuation(null); Assert.IsFalse(token.IsDone); // First range has continuation token.UpdateContinuation(Guid.NewGuid().ToString()); Assert.IsFalse(token.IsDone); // MoveNext should skip the second and third // Finish first one token.UpdateContinuation(null); Assert.IsTrue(token.IsDone); }
public async Task FeedToken_EPK_ShouldRetry() { List <CompositeContinuationToken> compositeContinuationTokens = new List <CompositeContinuationToken>() { FeedTokenTests.BuildTokenForRange("A", "C", "token1"), FeedTokenTests.BuildTokenForRange("C", "F", "token2") }; FeedTokenEPKRange feedTokenEPKRange = new FeedTokenEPKRange(Guid.NewGuid().ToString(), new Documents.Routing.Range <string>(compositeContinuationTokens[0].Range.Min, compositeContinuationTokens[1].Range.Min, true, false), compositeContinuationTokens); ContainerCore containerCore = Mock.Of <ContainerCore>(); Assert.IsFalse(await feedTokenEPKRange.ShouldRetryAsync(containerCore, new ResponseMessage(HttpStatusCode.OK))); // A 304 on a multi Range token should cycle on all available ranges before stopping retrying Assert.IsTrue(await feedTokenEPKRange.ShouldRetryAsync(containerCore, new ResponseMessage(HttpStatusCode.NotModified))); feedTokenEPKRange.UpdateContinuation(Guid.NewGuid().ToString()); Assert.IsTrue(await feedTokenEPKRange.ShouldRetryAsync(containerCore, new ResponseMessage(HttpStatusCode.NotModified))); feedTokenEPKRange.UpdateContinuation(Guid.NewGuid().ToString()); Assert.IsFalse(await feedTokenEPKRange.ShouldRetryAsync(containerCore, new ResponseMessage(HttpStatusCode.NotModified))); }
public void FeedToken_EPK_MoveToNextTokenCircles() { const string containerRid = "containerRid"; List <Documents.PartitionKeyRange> keyRanges = new List <Documents.PartitionKeyRange>() { new Documents.PartitionKeyRange() { MinInclusive = "A", MaxExclusive = "B" }, new Documents.PartitionKeyRange() { MinInclusive = "D", MaxExclusive = "E" }, }; FeedTokenEPKRange token = new FeedTokenEPKRange(containerRid, keyRanges); Assert.AreEqual(keyRanges[0].MinInclusive, token.CompositeContinuationTokens.Peek().Range.Min); token.UpdateContinuation("something"); Assert.AreEqual(keyRanges[1].MinInclusive, token.CompositeContinuationTokens.Peek().Range.Min); token.UpdateContinuation("something"); Assert.AreEqual(keyRanges[0].MinInclusive, token.CompositeContinuationTokens.Peek().Range.Min); token.UpdateContinuation("something"); Assert.AreEqual(keyRanges[1].MinInclusive, token.CompositeContinuationTokens.Peek().Range.Min); }