1414*/
1515
1616using System ;
17+ using System . Collections . Generic ;
1718using System . IO ;
19+ using System . Linq ;
1820using System . Net ;
1921using System . Net . Sockets ;
2022using System . Threading ;
2123using System . Threading . Tasks ;
2224using FluentAssertions ;
2325using MongoDB . Bson ;
24- using MongoDB . Bson . Serialization ;
2526using MongoDB . Bson . Serialization . Serializers ;
2627using MongoDB . Bson . TestHelpers . XunitExtensions ;
2728using MongoDB . Driver . Core . Clusters ;
@@ -715,26 +716,76 @@ public void SendMessageshould_throw_MongoConnectionClosedException_for_waiting_t
715716 Func< Task > act2 = ( ) => task2 ;
716717 act2. ShouldThrow < MongoConnectionClosedException > ( ) ;
717718
718- _capturedEvents. Next ( ) . Should ( ) . BeOfType < ConnectionSendingMessagesEvent > ( ) ;
719- _capturedEvents. Next ( ) . Should ( ) . BeOfType < CommandStartedEvent > ( ) ;
720- _capturedEvents. Next ( ) . Should ( ) . BeOfType < ConnectionSendingMessagesEvent > ( ) ;
721- _capturedEvents. Next ( ) . Should ( ) . BeOfType < CommandStartedEvent > ( ) ;
722- _capturedEvents. Next ( ) . Should ( ) . BeOfType < ConnectionFailedEvent > ( ) ;
723- _capturedEvents. Next ( ) . Should ( ) . BeOfType < CommandFailedEvent > ( ) ;
724- var events7And8Types = new Type[ ]
719+ SpinWait. SpinUntil ( ( ) => _capturedEvents . Count >= 9 , TimeSpan . FromSeconds ( 5 ) ) ;
720+ _capturedEvents. Count . Should ( ) . Be ( 9 ) ;
721+
722+ var allEvents = new List < object > ( ) ;
723+ while ( _capturedEvents . Any ( ) )
725724 {
726- _capturedEvents . Next ( ) . GetType ( ) ,
727- _capturedEvents . Next ( ) . GetType ( )
728- } ;
729- var expectedEventTypes = new Type [ ]
725+ allEvents. Add ( _capturedEvents . Next ( ) ) ;
726+ }
727+
728+ var request1Events = GetEventsForRequest( allEvents , message1 . RequestId ) ;
729+ request1Events. Should ( ) . HaveCount ( 4 ) ;
730+ request1Events[ 0 ] . Should ( ) . BeOfType < ConnectionSendingMessagesEvent > ( ) ;
731+ request1Events[ 1 ] . Should ( ) . BeOfType < CommandStartedEvent > ( ) ;
732+ request1Events[ 2 ] . Should ( ) . BeOfType < CommandFailedEvent > ( ) ;
733+ request1Events[ 3 ] . Should ( ) . BeOfType < ConnectionSendingMessagesFailedEvent > ( ) ;
734+
735+ var request2Events = GetEventsForRequest( allEvents , message2 . RequestId ) ;
736+ request2Events. Should ( ) . HaveCount ( 4 ) ;
737+ request2Events[ 0 ] . Should ( ) . BeOfType < ConnectionSendingMessagesEvent > ( ) ;
738+ request2Events[ 1 ] . Should ( ) . BeOfType < CommandStartedEvent > ( ) ;
739+ request2Events[ 2 ] . Should ( ) . BeOfType < CommandFailedEvent > ( ) ;
740+ request2Events[ 3 ] . Should ( ) . BeOfType < ConnectionSendingMessagesFailedEvent > ( ) ;
741+
742+ var connectionFailedEvents = allEvents. OfType < ConnectionFailedEvent > ( ) . ToList ( ) ;
743+ connectionFailedEvents. Should ( ) . HaveCount ( 1 ) ;
744+ }
745+ }
746+
747+ // private methods
748+ private List< object > GetEventsForRequest ( List < object > events , int requestId )
749+ {
750+ var eventsForRequest = new List < object > ( ) ;
751+
752+ foreach ( var @event in events)
753+ {
754+ if ( @event is ConnectionSendingMessagesEvent )
730755 {
731- typeof ( CommandFailedEvent ) ,
732- typeof ( ConnectionSendingMessagesFailedEvent )
733- } ;
734- events7And8Types . Should ( ) . BeEquivalentTo ( expectedEventTypes ) ;
735- _capturedEvents . Next ( ) . Should ( ) . BeOfType < ConnectionSendingMessagesFailedEvent > ( ) ;
736- _capturedEvents . Any ( ) . Should ( ) . BeFalse ( ) ;
756+ var e = ( ConnectionSendingMessagesEvent ) @event;
757+ if ( e . RequestIds . Single ( ) == requestId )
758+ {
759+ eventsForRequest . Add ( @event ) ;
760+ }
761+ }
762+ else if ( @event is CommandStartedEvent)
763+ {
764+ var e = ( CommandStartedEvent ) @event;
765+ if ( e . RequestId == requestId )
766+ {
767+ eventsForRequest . Add ( @event ) ;
768+ }
769+ }
770+ else if ( @event is CommandFailedEvent)
771+ {
772+ var e = ( CommandFailedEvent ) @event;
773+ if ( e . RequestId == requestId )
774+ {
775+ eventsForRequest . Add ( @event ) ;
776+ }
777+ }
778+ else if ( @event is ConnectionSendingMessagesFailedEvent)
779+ {
780+ var e = ( ConnectionSendingMessagesFailedEvent ) @event;
781+ if ( e . RequestIds . Single ( ) == requestId )
782+ {
783+ eventsForRequest . Add ( @event ) ;
784+ }
785+ }
737786 }
787+
788+ return eventsForRequest;
738789 }
739790 }
740791}
0 commit comments