@@ -675,6 +675,45 @@ public void Should_process_a_query_with_the_explain_modifier()
675
675
commandSucceededEvent . RequestId . Should ( ) . Be ( commandStartedEvent . RequestId ) ;
676
676
}
677
677
678
+ [ Test ]
679
+ public void Should_process_a_failed_query ( )
680
+ {
681
+ var expectedCommand = new BsonDocument
682
+ {
683
+ { "find" , MessageHelper . DefaultCollectionNamespace . CollectionName } ,
684
+ { "filter" , new BsonDocument ( "x" , 1 ) } ,
685
+ } ;
686
+ var queryFailureDocument = BsonDocument . Parse ( "{ $err: \" Can't canonicalize query: BadValue $or needs an array\" , code: 17287 }" ) ;
687
+
688
+ var requestMessage = MessageHelper . BuildQuery (
689
+ ( BsonDocument ) expectedCommand [ "filter" ] ,
690
+ requestId : 10 ) ;
691
+ SendMessages ( requestMessage ) ;
692
+
693
+
694
+ var replyMessage = MessageHelper . BuildQueryFailedReply < BsonDocument > (
695
+ queryFailureDocument ,
696
+ requestMessage . RequestId ) ;
697
+ ReceiveMessages ( replyMessage ) ;
698
+
699
+ var commandStartedEvent = ( CommandStartedEvent ) _capturedEvents . Next ( ) ;
700
+ var commandFailedEvent = ( CommandFailedEvent ) _capturedEvents . Next ( ) ;
701
+
702
+ commandStartedEvent . CommandName . Should ( ) . Be ( expectedCommand . GetElement ( 0 ) . Name ) ;
703
+ commandStartedEvent . Command . Should ( ) . Be ( expectedCommand ) ;
704
+ commandStartedEvent . ConnectionId . Should ( ) . Be ( _subject . ConnectionId ) ;
705
+ commandStartedEvent . DatabaseNamespace . Should ( ) . Be ( MessageHelper . DefaultDatabaseNamespace ) ;
706
+ commandStartedEvent . OperationId . Should ( ) . Be ( EventContext . OperationId ) ;
707
+ commandStartedEvent . RequestId . Should ( ) . Be ( requestMessage . RequestId ) ;
708
+
709
+ commandFailedEvent . CommandName . Should ( ) . Be ( commandStartedEvent . CommandName ) ;
710
+ commandFailedEvent . ConnectionId . Should ( ) . Be ( commandStartedEvent . ConnectionId ) ;
711
+ commandFailedEvent . Duration . Should ( ) . BeGreaterThan ( TimeSpan . Zero ) ;
712
+ commandFailedEvent . OperationId . Should ( ) . Be ( commandStartedEvent . OperationId ) ;
713
+ ( ( MongoCommandException ) commandFailedEvent . Failure ) . Result . Should ( ) . Be ( queryFailureDocument ) ;
714
+ commandFailedEvent . RequestId . Should ( ) . Be ( commandStartedEvent . RequestId ) ;
715
+ }
716
+
678
717
[ Test ]
679
718
public void Should_process_an_update_without_gle ( )
680
719
{
0 commit comments