コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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)));
        }
コード例 #4
0
        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);
        }