@@ -87,7 +87,16 @@ type sdamEvent struct {
8787 Awaited * bool `bson:"awaited"`
8888 } `bson:"serverHeartbeatFailedEvent"`
8989
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"`
91100}
92101
93102type expectedEvents struct {
@@ -468,7 +477,7 @@ func getNextServerHeartbeatSucceededEvent(
468477 return nil , nil , errors .New ("no heartbeat succeeded event published" )
469478 }
470479
471- return events [0 ], events [: 1 ], nil
480+ return events [0 ], events [1 : ], nil
472481}
473482
474483func getNextServerHeartbeatFailedEvent (
@@ -478,7 +487,7 @@ func getNextServerHeartbeatFailedEvent(
478487 return nil , nil , errors .New ("no heartbeat failed event published" )
479488 }
480489
481- return events [0 ], events [: 1 ], nil
490+ return events [0 ], events [1 : ], nil
482491}
483492
484493func getNextTopologyDescriptionChangedEvent (
@@ -488,7 +497,27 @@ func getNextTopologyDescriptionChangedEvent(
488497 return nil , nil , errors .New ("no topology description changed event published" )
489498 }
490499
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
492521}
493522
494523func verifySDAMEvents (client * clientEntity , expectedEvents * expectedEvents ) error {
@@ -498,9 +527,21 @@ func verifySDAMEvents(client *clientEntity, expectedEvents *expectedEvents) erro
498527 succeeded = client .serverHeartbeatSucceeded
499528 failed = client .serverHeartbeatFailedEvent
500529 tchanged = client .topologyDescriptionChanged
530+ topening = client .topologyOpening
531+ tclosed = client .topologyClosed
501532 )
502533
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+ }
504545
505546 if len (expectedEvents .SDAMEvents ) == 0 && vol () != 0 {
506547 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
569610 return newEventVerificationError (idx , client , "want awaited %v, got %v" , * want , got .Awaited )
570611 }
571612 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 {
573630 return newEventVerificationError (idx , client , "failed to get next description changed event: %v" , err .Error ())
574631 }
575632 }
0 commit comments