@@ -87,7 +87,16 @@ type sdamEvent struct {
87
87
Awaited * bool `bson:"awaited"`
88
88
} `bson:"serverHeartbeatFailedEvent"`
89
89
90
- TopologyDescriptionChangedEvent * struct {} `bson:"topologyDescriptionChangedEvent"`
90
+ TopologyDescriptionChangedEvent * struct {
91
+ PreviousDescription * struct {
92
+ Type * string `bson:"type"`
93
+ } `bson:"previousDescription"`
94
+ NewDescription * struct {
95
+ Type * string `bson:"type"`
96
+ } `bson:"newDescription"`
97
+ } `bson:"topologyDescriptionChangedEvent"`
98
+ TopologyOpeningEvent * struct {} `bson:"topologyOpeningEvent"`
99
+ TopologyClosedEvent * struct {} `bson:"topologyClosedEvent"`
91
100
}
92
101
93
102
type expectedEvents struct {
@@ -468,7 +477,7 @@ func getNextServerHeartbeatSucceededEvent(
468
477
return nil , nil , errors .New ("no heartbeat succeeded event published" )
469
478
}
470
479
471
- return events [0 ], events [: 1 ], nil
480
+ return events [0 ], events [1 : ], nil
472
481
}
473
482
474
483
func getNextServerHeartbeatFailedEvent (
@@ -478,7 +487,7 @@ func getNextServerHeartbeatFailedEvent(
478
487
return nil , nil , errors .New ("no heartbeat failed event published" )
479
488
}
480
489
481
- return events [0 ], events [: 1 ], nil
490
+ return events [0 ], events [1 : ], nil
482
491
}
483
492
484
493
func getNextTopologyDescriptionChangedEvent (
@@ -488,7 +497,27 @@ func getNextTopologyDescriptionChangedEvent(
488
497
return nil , nil , errors .New ("no topology description changed event published" )
489
498
}
490
499
491
- return events [0 ], events [:1 ], nil
500
+ return events [0 ], events [1 :], nil
501
+ }
502
+
503
+ func getNextTopologyOpeningEvent (
504
+ events []* event.TopologyOpeningEvent ,
505
+ ) (* event.TopologyOpeningEvent , []* event.TopologyOpeningEvent , error ) {
506
+ if len (events ) == 0 {
507
+ return nil , nil , errors .New ("no topology opening event published" )
508
+ }
509
+
510
+ return events [0 ], events [1 :], nil
511
+ }
512
+
513
+ func getNextTopologyClosedEvent (
514
+ events []* event.TopologyClosedEvent ,
515
+ ) (* event.TopologyClosedEvent , []* event.TopologyClosedEvent , error ) {
516
+ if len (events ) == 0 {
517
+ return nil , nil , errors .New ("no topology closed event published" )
518
+ }
519
+
520
+ return events [0 ], events [1 :], nil
492
521
}
493
522
494
523
func verifySDAMEvents (client * clientEntity , expectedEvents * expectedEvents ) error {
@@ -498,9 +527,21 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
498
527
succeeded = client .serverHeartbeatSucceeded
499
528
failed = client .serverHeartbeatFailedEvent
500
529
tchanged = client .topologyDescriptionChanged
530
+ topening = client .topologyOpening
531
+ tclosed = client .topologyClosed
501
532
)
502
533
503
- vol := func () int { return len (changed ) + len (started ) + len (succeeded ) + len (failed ) + len (tchanged ) }
534
+ vol := func () int {
535
+ var count int
536
+ count += len (changed )
537
+ count += len (started )
538
+ count += len (succeeded )
539
+ count += len (failed )
540
+ count += len (tchanged )
541
+ count += len (topening )
542
+ count += len (tclosed )
543
+ return count
544
+ }
504
545
505
546
if len (expectedEvents .SDAMEvents ) == 0 && vol () != 0 {
506
547
return fmt .Errorf ("expected no sdam events to be sent but got %s" , stringifyEventsForClient (client ))
@@ -569,7 +610,23 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
569
610
return newEventVerificationError (idx , client , "want awaited %v, got %v" , * want , got .Awaited )
570
611
}
571
612
case evt .TopologyDescriptionChangedEvent != nil :
572
- if _ , tchanged , err = getNextTopologyDescriptionChangedEvent (tchanged ); err != nil {
613
+ var got * event.TopologyDescriptionChangedEvent
614
+ if got , tchanged , err = getNextTopologyDescriptionChangedEvent (tchanged ); err != nil {
615
+ return newEventVerificationError (idx , client , "failed to get next description changed event: %v" , err .Error ())
616
+ }
617
+
618
+ if want := evt .TopologyDescriptionChangedEvent .PreviousDescription ; want != nil && want .Type != nil && * want .Type != got .PreviousDescription .Kind {
619
+ return newEventVerificationError (idx , client , "want previous description %v, got %v" , * want .Type , got .PreviousDescription .Kind )
620
+ }
621
+ if want := evt .TopologyDescriptionChangedEvent .NewDescription ; want != nil && want .Type != nil && * want .Type != got .NewDescription .Kind {
622
+ return newEventVerificationError (idx , client , "want new description %v, got %v" , * want .Type , got .NewDescription .Kind )
623
+ }
624
+ case evt .TopologyOpeningEvent != nil :
625
+ if _ , topening , err = getNextTopologyOpeningEvent (topening ); err != nil {
626
+ return newEventVerificationError (idx , client , "failed to get next description changed event: %v" , err .Error ())
627
+ }
628
+ case evt .TopologyClosedEvent != nil :
629
+ if _ , tclosed , err = getNextTopologyClosedEvent (tclosed ); err != nil {
573
630
return newEventVerificationError (idx , client , "failed to get next description changed event: %v" , err .Error ())
574
631
}
575
632
}
0 commit comments