public void Now() { ChangeFeedState now = ChangeFeedState.Now(); CosmosElement cosmosElement = ChangeFeedStateCosmosElementSerializer.ToCosmosElement(now); TryCatch <ChangeFeedState> monadicState = ChangeFeedStateCosmosElementSerializer.MonadicFromCosmosElement(cosmosElement); Assert.IsTrue(monadicState.Succeeded); Assert.IsTrue(monadicState.Result is ChangeFeedStateNow); }
public static ChangeFeedCrossFeedRangeState CreateFromNow(FeedRange feedRange) { if (!(feedRange is FeedRangeInternal feedRangeInternal)) { throw new ArgumentException($"{nameof(feedRange)} needs to be a {nameof(FeedRangeInternal)}."); } if (feedRange.Equals(FeedRangeEpk.FullRange)) { return(FullRangeStatesSingletons.Now); } return(new ChangeFeedCrossFeedRangeState( new List <FeedRangeState <ChangeFeedState> >() { new FeedRangeState <ChangeFeedState>(feedRangeInternal, ChangeFeedState.Now()) })); }
public async Task StartFromNowAsync(bool useContinuations) { int numItems = 100; IDocumentContainer documentContainer = await CreateDocumentContainerAsync(numItems); CrossPartitionChangeFeedAsyncEnumerator enumerator = CrossPartitionChangeFeedAsyncEnumerator.Create( documentContainer, new CrossFeedRangeState <ChangeFeedState>( new FeedRangeState <ChangeFeedState>[] { new FeedRangeState <ChangeFeedState>(FeedRangeEpk.FullRange, ChangeFeedState.Now()) }), ChangeFeedPaginationOptions.Default, cancellationToken: default); (int globalCount, double _) = await(useContinuations ? DrainWithUntilNotModifiedWithContinuationTokens(documentContainer, enumerator) : DrainUntilNotModifedAsync(enumerator)); Assert.AreEqual(0, globalCount); for (int i = 0; i < numItems; i++) { // Insert an item CosmosObject item = CosmosObject.Parse($"{{\"pk\" : {i} }}"); while (true) { TryCatch <Record> monadicCreateRecord = await documentContainer.MonadicCreateItemAsync(item, cancellationToken : default); if (monadicCreateRecord.Succeeded) { break; } } } (int globalCountAfter, double _) = await(useContinuations ? DrainWithUntilNotModifiedWithContinuationTokens(documentContainer, enumerator) : DrainUntilNotModifedAsync(enumerator)); Assert.AreEqual(numItems, globalCountAfter); }
public async Task ShouldReturnNotModifiedAfterCyclingOnAllRanges(int partitions) { ReadOnlyMemory<FeedRangeState<ChangeFeedState>> rangeStates = null; if (partitions == 1) { rangeStates = new FeedRangeState<ChangeFeedState>[]{ new FeedRangeState<ChangeFeedState>(FeedRangeEpk.FullRange, ChangeFeedState.Now()) }; } if (partitions == 2) { rangeStates = new FeedRangeState<ChangeFeedState>[]{ new FeedRangeState<ChangeFeedState>(new FeedRangeEpk(new Documents.Routing.Range<string>("", "AA", true, false)), ChangeFeedState.Now()), new FeedRangeState<ChangeFeedState>(new FeedRangeEpk(new Documents.Routing.Range<string>("AA", "FF", true, false)), ChangeFeedState.Now()), }; } if (partitions == 3) { rangeStates = new FeedRangeState<ChangeFeedState>[]{ new FeedRangeState<ChangeFeedState>(new FeedRangeEpk(new Documents.Routing.Range<string>("", "AA", true, false)), ChangeFeedState.Now()), new FeedRangeState<ChangeFeedState>(new FeedRangeEpk(new Documents.Routing.Range<string>("AA", "BB", true, false)), ChangeFeedState.Now()), new FeedRangeState<ChangeFeedState>(new FeedRangeEpk(new Documents.Routing.Range<string>("BB", "FF", true, false)), ChangeFeedState.Now()), }; } Assert.IsNotNull(rangeStates, $"Range states not initialized for {partitions} partitions"); CrossFeedRangeState<ChangeFeedState> state = new CrossFeedRangeState<ChangeFeedState>(rangeStates); Mock<IDocumentContainer> documentContainer = new Mock<IDocumentContainer>(); // Returns a 304 with 1RU charge documentContainer.Setup(c => c.MonadicChangeFeedAsync( It.IsAny<FeedRangeState<ChangeFeedState>>(), It.IsAny<ChangeFeedPaginationOptions>(), It.IsAny<ITrace>(), It.IsAny<CancellationToken>())).ReturnsAsync( (FeedRangeState<ChangeFeedState> state, ChangeFeedPaginationOptions options, ITrace trace, CancellationToken token) => TryCatch<ChangeFeedPage>.FromResult(new ChangeFeedNotModifiedPage(requestCharge: 1, activityId: string.Empty, additionalHeaders: default, state.State)));