@@ -875,22 +875,82 @@ public async Task ReadConsistencyStrategyRequestOptionSetsHeaders(string strateg
875875 }
876876
877877 [ TestMethod ]
878- public async Task ReadConsistencyStrategyClientLevelApplied ( )
878+ [ DataRow ( "Query" , DisplayName = "Query sets hub header" ) ]
879+ [ DataRow ( "SqlQuery" , DisplayName = "SqlQuery sets hub header" ) ]
880+ [ DataRow ( "ReadFeed" , DisplayName = "ReadFeed (ChangeFeed) sets hub header" ) ]
881+ public async Task LastCommittedWriteRegionSetsHubHeaderForNonPointReadOperations ( string operationTypeName )
882+ {
883+ OperationType operationType = Enum . Parse < OperationType > ( operationTypeName ) ;
884+ using CosmosClient client = MockCosmosUtil . CreateMockCosmosClient ( accountConsistencyLevel : Cosmos . ConsistencyLevel . Strong ) ;
885+
886+ TestHandler testHandler = new TestHandler ( ( request , cancellationToken ) =>
887+ {
888+ Assert . AreEqual (
889+ Cosmos . ReadConsistencyStrategy . LastCommittedWriteRegion . ToString ( ) ,
890+ request . Headers [ HttpConstants . HttpHeaders . ReadConsistencyStrategy ] ,
891+ "ReadConsistencyStrategy header should be set" ) ;
892+ Assert . AreEqual (
893+ bool . TrueString ,
894+ request . Headers [ HttpConstants . HttpHeaders . ShouldProcessOnlyInHubRegion ] ,
895+ $ "Hub region header should be set for LastCommittedWriteRegion on { operationTypeName } ") ;
896+
897+ return TestHandler . ReturnSuccess ( ) ;
898+ } ) ;
899+
900+ RequestInvokerHandler invoker = new RequestInvokerHandler (
901+ client ,
902+ requestedClientConsistencyLevel : null ,
903+ requestedClientReadConsistencyStrategy : null ,
904+ requestedClientPriorityLevel : null ,
905+ requestedClientThroughputBucket : null )
906+ {
907+ InnerHandler = testHandler
908+ } ;
909+
910+ RequestMessage requestMessage = new RequestMessage ( HttpMethod . Get , new System . Uri ( "https://dummy.documents.azure.com:443/dbs" ) )
911+ {
912+ ResourceType = ResourceType . Document
913+ } ;
914+ requestMessage . Headers . Add ( HttpConstants . HttpHeaders . PartitionKey , "[]" ) ;
915+ requestMessage . OperationType = operationType ;
916+ requestMessage . RequestOptions = new ItemRequestOptions
917+ {
918+ ReadConsistencyStrategy = Cosmos . ReadConsistencyStrategy . LastCommittedWriteRegion
919+ } ;
920+
921+ await invoker . SendAsync ( requestMessage , new CancellationToken ( ) ) ;
922+ }
923+
924+ [ TestMethod ]
925+ [ DataRow ( "LatestCommitted" ) ]
926+ [ DataRow ( "LastCommittedWriteRegion" ) ]
927+ public async Task ReadConsistencyStrategyClientLevelApplied ( string strategyName )
879928 {
880929 // Verify client-level ReadConsistencyStrategy is applied when no request-level is set.
930+ Cosmos . ReadConsistencyStrategy strategy = Enum . Parse < Cosmos . ReadConsistencyStrategy > ( strategyName ) ;
881931 using CosmosClient client = MockCosmosUtil . CreateMockCosmosClient (
882932 accountConsistencyLevel : Cosmos . ConsistencyLevel . Strong ,
883- customizeClientBuilder : builder => builder . WithReadConsistencyStrategy ( Cosmos . ReadConsistencyStrategy . LastCommittedWriteRegion ) ) ;
933+ customizeClientBuilder : builder => builder . WithReadConsistencyStrategy ( strategy ) ) ;
884934
885935 TestHandler testHandler = new TestHandler ( ( request , cancellationToken ) =>
886936 {
887937 Assert . AreEqual (
888- Cosmos . ReadConsistencyStrategy . LastCommittedWriteRegion . ToString ( ) ,
938+ strategy . ToString ( ) ,
889939 request . Headers [ HttpConstants . HttpHeaders . ReadConsistencyStrategy ] ) ;
890940 Assert . IsNull ( request . Headers [ HttpConstants . HttpHeaders . ConsistencyLevel ] ,
891941 "ConsistencyLevel header should not be set when ReadConsistencyStrategy is used" ) ;
892- Assert . AreEqual ( bool . TrueString , request . Headers [ HttpConstants . HttpHeaders . ShouldProcessOnlyInHubRegion ] ,
893- "Hub region header should be set when client-level LastCommittedWriteRegion is used on a read" ) ;
942+
943+ if ( strategy == Cosmos . ReadConsistencyStrategy . LastCommittedWriteRegion )
944+ {
945+ Assert . AreEqual ( bool . TrueString , request . Headers [ HttpConstants . HttpHeaders . ShouldProcessOnlyInHubRegion ] ,
946+ "Hub region header should be set when client-level LastCommittedWriteRegion is used on a read" ) ;
947+ }
948+ else
949+ {
950+ Assert . IsNull ( request . Headers [ HttpConstants . HttpHeaders . ShouldProcessOnlyInHubRegion ] ,
951+ $ "Hub region header should NOT be set for { strategyName } strategy") ;
952+ }
953+
894954 return TestHandler . ReturnSuccess ( ) ;
895955 } ) ;
896956
0 commit comments