@@ -320,6 +320,48 @@ func (s *failoverWorkflowTestSuite) TestShouldFailover() {
320320 sourceCluster : "c2" ,
321321 expected : true ,
322322 },
323+ {
324+ domain : & types.DescribeDomainResponse {
325+ IsGlobalDomain : true ,
326+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
327+ ActiveClusterName : "c2" ,
328+ Clusters : clusters ,
329+ ActiveClusters : & types.ActiveClusters {
330+ ActiveClustersByRegion : map [string ]types.ActiveClusterInfo {
331+ "c1" : {
332+ ActiveClusterName : "c1" ,
333+ },
334+ },
335+ },
336+ },
337+ DomainInfo : & types.DomainInfo {
338+ Data : map [string ]string {
339+ constants .DomainDataKeyForManagedFailover : "true" ,
340+ },
341+ },
342+ },
343+ sourceCluster : "c2" ,
344+ expected : false ,
345+ },
346+ {
347+ domain : & types.DescribeDomainResponse {
348+ IsGlobalDomain : true ,
349+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
350+ ActiveClusterName : "c2" ,
351+ Clusters : clusters ,
352+ ActiveClusters : & types.ActiveClusters {
353+ ActiveClustersByRegion : map [string ]types.ActiveClusterInfo {},
354+ },
355+ },
356+ DomainInfo : & types.DomainInfo {
357+ Data : map [string ]string {
358+ constants .DomainDataKeyForManagedFailover : "true" ,
359+ },
360+ },
361+ },
362+ sourceCluster : "c2" ,
363+ expected : true ,
364+ },
323365 }
324366 for _ , t := range tests {
325367 s .Equal (t .expected , shouldFailover (t .domain , t .sourceCluster ))
@@ -410,6 +452,122 @@ func (s *failoverWorkflowTestSuite) TestGetDomainsActivity_WithTargetDomains() {
410452 s .Equal ([]string {"d1" }, result ) // d3 filtered out because not managed
411453}
412454
455+ func (s * failoverWorkflowTestSuite ) TestGetDomainsActivity_FiltersActiveActiveDomains () {
456+ env , mockResource := s .prepareTestActivityEnv ()
457+
458+ domains := & types.ListDomainsResponse {
459+ Domains : []* types.DescribeDomainResponse {
460+ {
461+ DomainInfo : & types.DomainInfo {
462+ Name : "regular-domain" ,
463+ Data : map [string ]string {constants .DomainDataKeyForManagedFailover : "true" },
464+ },
465+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
466+ ActiveClusterName : "c1" ,
467+ Clusters : clusters ,
468+ },
469+ IsGlobalDomain : true ,
470+ },
471+ {
472+ DomainInfo : & types.DomainInfo {
473+ Name : "active-active-domain" ,
474+ Data : map [string ]string {constants .DomainDataKeyForManagedFailover : "true" },
475+ },
476+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
477+ ActiveClusterName : "c1" ,
478+ Clusters : clusters ,
479+ ActiveClusters : & types.ActiveClusters {
480+ ActiveClustersByRegion : map [string ]types.ActiveClusterInfo {
481+ "region1" : {
482+ ActiveClusterName : "c1" ,
483+ },
484+ },
485+ },
486+ },
487+ IsGlobalDomain : true ,
488+ },
489+ {
490+ DomainInfo : & types.DomainInfo {
491+ Name : "empty-active-clusters-domain" ,
492+ Data : map [string ]string {constants .DomainDataKeyForManagedFailover : "true" },
493+ },
494+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
495+ ActiveClusterName : "c1" ,
496+ Clusters : clusters ,
497+ ActiveClusters : & types.ActiveClusters {
498+ ActiveClustersByRegion : map [string ]types.ActiveClusterInfo {},
499+ },
500+ },
501+ IsGlobalDomain : true ,
502+ },
503+ },
504+ }
505+ mockResource .FrontendClient .EXPECT ().ListDomains (gomock .Any (), gomock .Any ()).Return (domains , nil )
506+
507+ params := & GetDomainsActivityParams {
508+ TargetCluster : "c2" ,
509+ SourceCluster : "c1" ,
510+ }
511+ actResult , err := env .ExecuteActivity (getDomainsActivityName , params )
512+ s .NoError (err )
513+ var result []string
514+ s .NoError (actResult .Get (& result ))
515+ s .Equal ([]string {"regular-domain" , "empty-active-clusters-domain" }, result )
516+ }
517+
518+ func (s * failoverWorkflowTestSuite ) TestGetDomainsActivity_WithActiveActiveTargetDomains () {
519+ env , mockResource := s .prepareTestActivityEnv ()
520+
521+ domains := & types.ListDomainsResponse {
522+ Domains : []* types.DescribeDomainResponse {
523+ {
524+ DomainInfo : & types.DomainInfo {
525+ Name : "regular-domain" ,
526+ Data : map [string ]string {constants .DomainDataKeyForManagedFailover : "true" },
527+ },
528+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
529+ ActiveClusterName : "c1" ,
530+ Clusters : clusters ,
531+ },
532+ IsGlobalDomain : true ,
533+ },
534+ {
535+ DomainInfo : & types.DomainInfo {
536+ Name : "active-active-domain" ,
537+ Data : map [string ]string {constants .DomainDataKeyForManagedFailover : "true" },
538+ },
539+ ReplicationConfiguration : & types.DomainReplicationConfiguration {
540+ ActiveClusterName : "c1" ,
541+ Clusters : clusters ,
542+ ActiveClusters : & types.ActiveClusters {
543+ ActiveClustersByRegion : map [string ]types.ActiveClusterInfo {
544+ "region1" : {
545+ ActiveClusterName : "c1" ,
546+ },
547+ "region2" : {
548+ ActiveClusterName : "c2" ,
549+ },
550+ },
551+ },
552+ },
553+ IsGlobalDomain : true ,
554+ },
555+ },
556+ }
557+ mockResource .FrontendClient .EXPECT ().ListDomains (gomock .Any (), gomock .Any ()).Return (domains , nil )
558+
559+ params := & GetDomainsActivityParams {
560+ TargetCluster : "c2" ,
561+ SourceCluster : "c1" ,
562+ Domains : []string {"regular-domain" , "active-active-domain" },
563+ }
564+ actResult , err := env .ExecuteActivity (getDomainsActivityName , params )
565+ s .NoError (err )
566+ var result []string
567+ s .NoError (actResult .Get (& result ))
568+ s .Equal ([]string {"regular-domain" }, result )
569+ }
570+
413571func (s * failoverWorkflowTestSuite ) TestFailoverActivity_ForceFailover_Success () {
414572 env , mockResource := s .prepareTestActivityEnv ()
415573
0 commit comments