14
14
*/
15
15
16
16
using System ;
17
+ using System . Collections . Generic ;
17
18
using System . IO ;
19
+ using System . Linq ;
18
20
using System . Net ;
19
21
using System . Net . Sockets ;
20
22
using System . Threading ;
21
23
using System . Threading . Tasks ;
22
24
using FluentAssertions ;
23
25
using MongoDB . Bson ;
24
- using MongoDB . Bson . Serialization ;
25
26
using MongoDB . Bson . Serialization . Serializers ;
26
27
using MongoDB . Bson . TestHelpers . XunitExtensions ;
27
28
using MongoDB . Driver . Core . Clusters ;
@@ -715,26 +716,76 @@ public void SendMessageshould_throw_MongoConnectionClosedException_for_waiting_t
715
716
Func< Task > act2 = ( ) => task2 ;
716
717
act2. ShouldThrow < MongoConnectionClosedException > ( ) ;
717
718
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 ( ) )
725
724
{
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 )
730
755
{
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
+ }
737
786
}
787
+
788
+ return eventsForRequest;
738
789
}
739
790
}
740
791
}
0 commit comments