public async Task VerifyPatchItemStreamOperation() { ResponseMessage response = null; ItemRequestOptions requestOptions = null; Mock <Stream> mockPayload = new Mock <Stream>(); HttpStatusCode httpStatusCode = HttpStatusCode.OK; int testHandlerHitCount = 0; TestHandler testHandler = new TestHandler((request, cancellationToken) => { Assert.IsTrue(request.RequestUri.OriginalString.StartsWith(@"dbs/testdb/colls/testcontainer/docs/cdbBinaryIdRequest")); Assert.AreEqual(Cosmos.PartitionKey.Null.ToJsonString(), request.Headers.PartitionKey); Assert.AreEqual(ResourceType.Document, request.ResourceType); Assert.AreEqual(OperationType.Patch, request.OperationType); Assert.AreEqual(mockPayload.Object, request.Content); Assert.AreEqual(requestOptions, request.RequestOptions); testHandlerHitCount++; response = new ResponseMessage(httpStatusCode, request, errorMessage: null) { Content = request.Content }; return(Task.FromResult(response)); }); CosmosClient client = MockCosmosUtil.CreateMockCosmosClient( (builder) => builder.AddCustomHandlers(testHandler)); Container container = client.GetDatabase("testdb") .GetContainer("testcontainer"); ContainerInternal containerInternal = (ContainerInternal)container; ResponseMessage responseMessage = await containerInternal.PatchItemStreamAsync( id : "cdbBinaryIdRequest", partitionKey : Cosmos.PartitionKey.Null, streamPayload : mockPayload.Object, requestOptions : requestOptions); Assert.IsNotNull(responseMessage); Assert.AreEqual(httpStatusCode, responseMessage.StatusCode); Assert.AreEqual(1, testHandlerHitCount, "The operation did not make it to the handler"); }
private static Task <ResponseMessage> ExecutePatchStreamAsync(ContainerInternal container, ToDoActivity item, List <PatchOperation> patch) { return(container.PatchItemStreamAsync(item.id, new PartitionKey(item.pk), patch)); }
public async Task PointOperationDiagnostic(bool disableDiagnostics) { ItemRequestOptions requestOptions = new ItemRequestOptions(); if (disableDiagnostics) { requestOptions.DiagnosticContextFactory = () => EmptyCosmosDiagnosticsContext.Singleton; } else { // Add 10 seconds to ensure CPU history is recorded await Task.Delay(TimeSpan.FromSeconds(10)); } //Checking point operation diagnostics on typed operations ToDoActivity testItem = ToDoActivity.CreateRandomToDoActivity(); ItemResponse <ToDoActivity> createResponse = await this.Container.CreateItemAsync <ToDoActivity>( item : testItem, requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( createResponse.Diagnostics, disableDiagnostics); ItemResponse <ToDoActivity> readResponse = await this.Container.ReadItemAsync <ToDoActivity>( id : testItem.id, partitionKey : new PartitionKey(testItem.status), requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( readResponse.Diagnostics, disableDiagnostics); testItem.description = "NewDescription"; ItemResponse <ToDoActivity> replaceResponse = await this.Container.ReplaceItemAsync <ToDoActivity>( item : testItem, id : testItem.id, partitionKey : new PartitionKey(testItem.status), requestOptions : requestOptions); Assert.AreEqual(replaceResponse.Resource.description, "NewDescription"); CosmosDiagnosticsTests.VerifyPointDiagnostics( replaceResponse.Diagnostics, disableDiagnostics); testItem.description = "PatchedDescription"; ContainerInternal containerInternal = (ContainerInternal)this.Container; List <PatchOperation> patch = new List <PatchOperation>() { PatchOperation.Replace("/description", testItem.description) }; ItemResponse <ToDoActivity> patchResponse = await containerInternal.PatchItemAsync <ToDoActivity>( id : testItem.id, partitionKey : new PartitionKey(testItem.status), patchOperations : patch, requestOptions : requestOptions); Assert.AreEqual(patchResponse.Resource.description, "PatchedDescription"); CosmosDiagnosticsTests.VerifyPointDiagnostics( patchResponse.Diagnostics, disableDiagnostics); ItemResponse <ToDoActivity> deleteResponse = await this.Container.DeleteItemAsync <ToDoActivity>( partitionKey : new Cosmos.PartitionKey(testItem.status), id : testItem.id, requestOptions : requestOptions); Assert.IsNotNull(deleteResponse); CosmosDiagnosticsTests.VerifyPointDiagnostics( deleteResponse.Diagnostics, disableDiagnostics); //Checking point operation diagnostics on stream operations ResponseMessage createStreamResponse = await this.Container.CreateItemStreamAsync( partitionKey : new PartitionKey(testItem.status), streamPayload : TestCommon.SerializerCore.ToStream <ToDoActivity>(testItem), requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( createStreamResponse.Diagnostics, disableDiagnostics); ResponseMessage readStreamResponse = await this.Container.ReadItemStreamAsync( id : testItem.id, partitionKey : new PartitionKey(testItem.status), requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( readStreamResponse.Diagnostics, disableDiagnostics); ResponseMessage replaceStreamResponse = await this.Container.ReplaceItemStreamAsync( streamPayload : TestCommon.SerializerCore.ToStream <ToDoActivity>(testItem), id : testItem.id, partitionKey : new PartitionKey(testItem.status), requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( replaceStreamResponse.Diagnostics, disableDiagnostics); ResponseMessage patchStreamResponse = await containerInternal.PatchItemStreamAsync( id : testItem.id, partitionKey : new PartitionKey(testItem.status), patchOperations : patch, requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( patchStreamResponse.Diagnostics, disableDiagnostics); ResponseMessage deleteStreamResponse = await this.Container.DeleteItemStreamAsync( id : testItem.id, partitionKey : new PartitionKey(testItem.status), requestOptions : requestOptions); CosmosDiagnosticsTests.VerifyPointDiagnostics( deleteStreamResponse.Diagnostics, disableDiagnostics); // Ensure diagnostics are set even on failed operations testItem.description = new string('x', Microsoft.Azure.Documents.Constants.MaxResourceSizeInBytes + 1); ResponseMessage createTooBigStreamResponse = await this.Container.CreateItemStreamAsync( partitionKey : new PartitionKey(testItem.status), streamPayload : TestCommon.SerializerCore.ToStream <ToDoActivity>(testItem), requestOptions : requestOptions); Assert.IsFalse(createTooBigStreamResponse.IsSuccessStatusCode); CosmosDiagnosticsTests.VerifyPointDiagnostics( createTooBigStreamResponse.Diagnostics, disableDiagnostics); }