public void VerifyCosmosQueryResponseStream() { string contianerRid = "mockContainerRid"; (QueryResponseCore response, IList <ToDoItem> items)factoryResponse = QueryResponseMessageFactory.Create( itemIdPrefix: $"TestPage", continuationToken: "SomeContinuationToken", collectionRid: contianerRid, itemCount: 100); QueryResponseCore responseCore = factoryResponse.response; QueryResponse queryResponse = QueryResponse.CreateSuccess( result: responseCore.CosmosElements, count: responseCore.CosmosElements.Count, responseLengthBytes: responseCore.ResponseLengthBytes, queryMetrics: responseCore.QueryMetrics, responseHeaders: new CosmosQueryResponseMessageHeaders( responseCore.ContinuationToken, responseCore.DisallowContinuationTokenMessage, ResourceType.Document, contianerRid) { RequestCharge = responseCore.RequestCharge, ActivityId = responseCore.ActivityId }); using (Stream stream = queryResponse.Content) { using (Stream innerStream = queryResponse.Content) { Assert.IsTrue(object.ReferenceEquals(stream, innerStream), "Content should return the same stream"); } } }
public static List <ToDoItem> MockSinglePartitionKeyRangeContext( Mock <CosmosQueryClient> mockQueryContext, int[] responseMessagesPageSize, SqlQuerySpec sqlQuerySpec, PartitionKeyRange partitionKeyRange, string continuationToken, int maxPageSize, string collectionRid, Action executeCallback, CancellationToken cancellationToken) { // Setup a list of query responses. It generates a new continuation token for each response. This allows the mock to return the messages in the correct order. List <ToDoItem> allItems = new List <ToDoItem>(); string previousContinuationToken = continuationToken; for (int i = 0; i < responseMessagesPageSize.Length; i++) { string newContinuationToken = null; // The last response should have a null continuation token if (i + 1 != responseMessagesPageSize.Length) { newContinuationToken = Guid.NewGuid().ToString(); } (QueryResponseCore response, IList <ToDoItem> items)queryResponse = QueryResponseMessageFactory.Create( itemIdPrefix: $"page{i}-pk{partitionKeyRange.Id}-", continuationToken: newContinuationToken, collectionRid: collectionRid, itemCount: responseMessagesPageSize[i]); allItems.AddRange(queryResponse.items); mockQueryContext.Setup(x => x.ExecuteItemQueryAsync( It.IsAny <string>(), ResourceType.Document, OperationType.Query, It.IsAny <Guid>(), It.IsAny <QueryRequestOptions>(), It.IsAny <Action <QueryPageDiagnostics> >(), It.Is <SqlQuerySpec>(specInput => IsSqlQuerySpecEqual(sqlQuerySpec, specInput)), previousContinuationToken, It.Is <PartitionKeyRangeIdentity>(rangeId => string.Equals(rangeId.PartitionKeyRangeId, partitionKeyRange.Id) && string.Equals(rangeId.CollectionRid, collectionRid)), It.IsAny <bool>(), maxPageSize, cancellationToken)) .Callback(() => executeCallback?.Invoke()) .Returns(Task.FromResult(queryResponse.response)); if (responseMessagesPageSize[i] != QueryResponseMessageFactory.SPLIT) { previousContinuationToken = newContinuationToken; } } return(allItems); }
public static List <ToDoItem> MockSinglePartitionKeyRangeContext( Mock <CosmosQueryContext> mockQueryContext, int[] responseMessagesPageSize, SqlQuerySpec sqlQuerySpec, PartitionKeyRange partitionKeyRange, string continuationToken, int maxPageSize, string collectionRid, TimeSpan?responseDelay, CancellationToken cancellationToken) { // Setup a list of query responses. It generates a new continuation token for each response. This allows the mock to return the messages in the correct order. List <ToDoItem> allItems = new List <ToDoItem>(); string previousContinuationToken = continuationToken; for (int i = 0; i < responseMessagesPageSize.Length; i++) { string newContinuationToken = null; // The last response should have a null continuation token if (i + 1 != responseMessagesPageSize.Length) { newContinuationToken = Guid.NewGuid().ToString(); } (QueryResponse response, IList <ToDoItem> items)queryResponse = QueryResponseMessageFactory.Create( itemIdPrefix: $"page{i}-pk{partitionKeyRange.Id}-", continuationToken: newContinuationToken, collectionRid: collectionRid, itemCount: responseMessagesPageSize[i]); allItems.AddRange(queryResponse.items); mockQueryContext.Setup(x => x.ExecuteQueryAsync( It.Is <SqlQuerySpec>(specInput => IsSqlQuerySpecEqual(sqlQuerySpec, specInput)), previousContinuationToken, It.Is <PartitionKeyRangeIdentity>(rangeId => string.Equals(rangeId.PartitionKeyRangeId, partitionKeyRange.Id) && string.Equals(rangeId.CollectionRid, collectionRid)), It.IsAny <bool>(), maxPageSize, cancellationToken)) .Callback(() => { if (responseDelay.HasValue) { Thread.Sleep(responseDelay.Value); } }) .Returns(Task.FromResult(queryResponse.response)); previousContinuationToken = newContinuationToken; } return(allItems); }
public void VerifyItemQueryResponseResult() { string contianerRid = "mockContainerRid"; (QueryResponseCore response, IList <ToDoItem> items)factoryResponse = QueryResponseMessageFactory.Create( itemIdPrefix: $"TestPage", continuationToken: "SomeContinuationToken", collectionRid: contianerRid, itemCount: 100); QueryResponseCore responseCore = factoryResponse.response; List <CosmosElement> cosmosElements = new List <CosmosElement>(responseCore.CosmosElements); QueryResponse queryResponse = QueryResponse.CreateSuccess( result: cosmosElements, count: cosmosElements.Count, responseLengthBytes: responseCore.ResponseLengthBytes, serializationOptions: null, responseHeaders: new CosmosQueryResponseMessageHeaders( responseCore.ContinuationToken, responseCore.DisallowContinuationTokenMessage, ResourceType.Document, contianerRid) { RequestCharge = responseCore.RequestCharge, ActivityId = responseCore.ActivityId }, diagnostics: new CosmosDiagnosticsContextCore()); QueryResponse <ToDoItem> itemQueryResponse = QueryResponseMessageFactory.CreateQueryResponse <ToDoItem>(queryResponse); List <ToDoItem> resultItems = new List <ToDoItem>(itemQueryResponse.Resource); ToDoItemComparer comparer = new ToDoItemComparer(); Assert.AreEqual(factoryResponse.items.Count, resultItems.Count); for (int i = 0; i < factoryResponse.items.Count; i++) { Assert.AreNotSame(factoryResponse.items[i], resultItems[i]); Assert.AreEqual(0, comparer.Compare(factoryResponse.items[i], resultItems[i])); } }