@@ -675,6 +675,45 @@ public void Should_process_a_query_with_the_explain_modifier()
675675 commandSucceededEvent . RequestId . Should ( ) . Be ( commandStartedEvent . RequestId ) ;
676676 }
677677
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+
678717 [ Test ]
679718 public void Should_process_an_update_without_gle ( )
680719 {
0 commit comments