@@ -2,17 +2,15 @@ package replica_set
2
2
3
3
import (
4
4
"fmt"
5
- "os"
6
- "testing"
7
- "time"
8
-
9
- . "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/util/mongotester"
10
- "github.com/stretchr/testify/assert"
11
-
12
5
e2eutil "github.com/mongodb/mongodb-kubernetes-operator/test/e2e"
13
6
"github.com/mongodb/mongodb-kubernetes-operator/test/e2e/mongodbtests"
14
7
setup "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/setup"
8
+ "github.com/mongodb/mongodb-kubernetes-operator/test/e2e/util/mongotester"
15
9
"github.com/mongodb/mongodb-kubernetes-operator/test/e2e/util/wait"
10
+ "github.com/stretchr/testify/assert"
11
+ "os"
12
+ "testing"
13
+ "time"
16
14
)
17
15
18
16
func TestMain (m * testing.M ) {
@@ -23,71 +21,89 @@ func TestMain(m *testing.M) {
23
21
os .Exit (code )
24
22
}
25
23
24
+ func Test (t * testing.T ) {
25
+
26
+ }
27
+
26
28
func TestReplicaSetArbiter (t * testing.T ) {
27
29
ctx := setup .Setup (t )
28
30
defer ctx .Teardown ()
29
31
30
- // Invalid case 1
31
- numberArbiters := 3
32
- numberMembers := 3
33
- desiredStatus := fmt .Sprintf ("error validating new Spec: number of arbiters specified (%v) is greater or equal than the number of members in the replicaset (%v). At least one member must not be an arbiter" , numberArbiters , numberMembers )
34
- mdb , user := e2eutil .NewTestMongoDB (ctx , "mdb0" , "" )
35
- mdb .Spec .Arbiters = numberArbiters
36
- mdb .Spec .Members = numberMembers
37
- _ , err := setup .GeneratePasswordForUser (ctx , user , "" )
38
- if err != nil {
39
- t .Fatal (err )
32
+ type args struct {
33
+ numberOfArbiters int
34
+ scaleArbitersTo int
35
+ numberOfMembers int
36
+ expectedErrorMessage string
37
+ resourceName string
40
38
}
41
- t .Run ("Create MongoDB Resource" , mongodbtests .CreateMongoDBResource (& mdb , ctx ))
42
- t .Run ("Check status for case 1" , mongodbtests .StatefulSetMessageIsReceived (& mdb , ctx , desiredStatus ))
43
-
44
- // Invalid case 2
45
- numberArbiters = - 1
46
- numberMembers = 3
47
- desiredStatus = "error validating new Spec: number of arbiters must be greater or equal than 0"
48
- mdb , user = e2eutil .NewTestMongoDB (ctx , "mdb1" , "" )
49
- mdb .Spec .Arbiters = numberArbiters
50
- mdb .Spec .Members = numberMembers
51
- _ , err = setup .GeneratePasswordForUser (ctx , user , "" )
52
- if err != nil {
53
- t .Fatal (err )
39
+ tests := map [string ]args {
40
+ "Number of Arbiters must be less than number of nodes" : {
41
+ numberOfArbiters : 3 ,
42
+ numberOfMembers : 3 ,
43
+ expectedErrorMessage : fmt .Sprintf ("error validating new Spec: number of arbiters specified (%v) is greater or equal than the number of members in the replicaset (%v). At least one member must not be an arbiter" , 3 , 3 ),
44
+ resourceName : "mdb0" ,
45
+ },
46
+ "Number of Arbiters must be greater than 0" : {
47
+ numberOfArbiters : - 1 ,
48
+ numberOfMembers : 3 ,
49
+ expectedErrorMessage : "error validating new Spec: number of arbiters must be greater or equal than 0" ,
50
+ resourceName : "mdb1" ,
51
+ },
52
+ "Scaling arbiters from 0 to 1" : {
53
+ numberOfArbiters : 0 ,
54
+ scaleArbitersTo : 1 ,
55
+ numberOfMembers : 2 ,
56
+ resourceName : "mdb2" ,
57
+ },
58
+ "Scaling Arbiters from 1 to 0" : {
59
+ numberOfArbiters : 1 ,
60
+ scaleArbitersTo : 0 ,
61
+ numberOfMembers : 3 ,
62
+ resourceName : "mdb3" ,
63
+ },
64
+ "Arbiters can be deployed in initial bootstrap" : {
65
+ numberOfArbiters : 1 ,
66
+ scaleArbitersTo : 1 ,
67
+ numberOfMembers : 2 ,
68
+ resourceName : "mdb4" ,
69
+ },
54
70
}
55
- t .Run ("Create MongoDB Resource" , mongodbtests .CreateMongoDBResource (& mdb , ctx ))
56
- t .Run ("Check status for case 2" , mongodbtests .StatefulSetMessageIsReceived (& mdb , ctx , desiredStatus ))
71
+ for testName , _ := range tests {
72
+ t .Run (testName , func (t * testing.T ) {
73
+ testConfig , _ := tests [testName ]
74
+ mdb , user := e2eutil .NewTestMongoDB (ctx , testConfig .resourceName , "" )
75
+ mdb .Spec .Arbiters = testConfig .numberOfArbiters
76
+ mdb .Spec .Members = testConfig .numberOfMembers
77
+ pwd , err := setup .GeneratePasswordForUser (ctx , user , "" )
78
+ if err != nil {
79
+ t .Fatal (err )
80
+ }
81
+ t .Run ("Create MongoDB Resource" , mongodbtests .CreateMongoDBResource (& mdb , ctx ))
82
+ if len (testConfig .expectedErrorMessage ) > 0 {
83
+ t .Run ("Check status" , mongodbtests .StatefulSetMessageIsReceived (& mdb , ctx , testConfig .expectedErrorMessage ))
84
+ } else {
85
+ t .Run ("Check that the stateful set becomes ready" , mongodbtests .StatefulSetBecomesReady (& mdb , wait .Timeout (20 * time .Minute )))
86
+ t .Run ("Check the number of arbiters" , mongodbtests .AutomationConfigReplicaSetsHaveExpectedArbiters (& mdb , testConfig .numberOfArbiters ))
57
87
58
- numberArbiters = 0
59
- numberMembers = 3
60
- mdb , user = e2eutil .NewTestMongoDB (ctx , "mdb2" , "" )
61
- mdb .Spec .Arbiters = numberArbiters
62
- mdb .Spec .Members = numberMembers
63
- pwd , err := setup .GeneratePasswordForUser (ctx , user , "" )
64
- if err != nil {
65
- t .Fatal (err )
66
- }
67
-
68
- t .Run ("Create MongoDB Resource" , mongodbtests .CreateMongoDBResource (& mdb , ctx ))
69
- t .Run ("Check that the stateful set becomes ready" , mongodbtests .StatefulSetBecomesReady (& mdb , wait .Timeout (20 * time .Minute )))
70
- t .Run ("Check the number of arbiters" , mongodbtests .AutomationConfigReplicaSetsHaveExpectedArbiters (& mdb , numberArbiters ))
71
-
72
- // Arbiters need to be less than regular members
73
- t .Run ("Scale MongoDB Up to 2 Arbiters" , mongodbtests .ScaleArbiters (& mdb , 2 ))
74
- t .Run ("Arbiters Stateful Set Scaled Up Correctly" , mongodbtests .ArbitersStatefulSetBecomesReady (& mdb ))
75
- t .Run ("MongoDB Reaches Running Phase" , mongodbtests .MongoDBReachesRunningPhase (& mdb ))
88
+ if testConfig .numberOfArbiters != testConfig .scaleArbitersTo {
89
+ t .Run (fmt .Sprintf ("Scale Arbiters to %v" , testConfig .scaleArbitersTo ), mongodbtests .ScaleArbiters (& mdb , testConfig .scaleArbitersTo ))
90
+ t .Run ("Arbiters Stateful Set Scaled Correctly" , mongodbtests .ArbitersStatefulSetBecomesReady (& mdb ))
91
+ }
76
92
77
- t .Run ("Test SRV Connectivity with generated connection string secret " , func ( t * testing. T ) {
78
- tester , err := FromResource ( t , mdb )
79
- if err != nil {
80
- t . Fatal ( err )
81
- }
82
- scramUser := mdb . GetScramUsers ()[ 0 ]
83
- expectedCnxStr := fmt . Sprintf ( "mongodb+srv://%s-user:%s@%s-svc.%s.svc.cluster.local/admin?replicaSet=mdb2&ssl=false" , mdb .Name , pwd , mdb . Name , mdb . Namespace )
84
- cnxStrSrv := mongodbtests . GetSrvConnectionStringForUser ( mdb , scramUser )
85
- assert . Equal ( t , expectedCnxStr , cnxStrSrv )
86
- tester . ConnectivitySucceeds ( WithURI ( cnxStrSrv ) )
87
- } )
88
-
89
- t . Run ( "Scale MongoDB Up to 0 Arbiters" , mongodbtests . ScaleArbiters ( & mdb , 0 ))
90
- t .Run ("Arbiters Stateful Set Scaled Up Correctly " , mongodbtests .ArbitersStatefulSetBecomesReady (& mdb ))
91
- t . Run ( "MongoDB Reaches Running Phase" , mongodbtests . MongoDBReachesRunningPhase ( & mdb ) )
92
- t . Run ( "Check the number of arbiters" , mongodbtests . AutomationConfigReplicaSetsHaveExpectedArbiters ( & mdb , 0 ))
93
+ t .Run ("MongoDB Reaches Running Phase " , mongodbtests . MongoDBReachesRunningPhase ( & mdb ))
94
+ t . Run ( "Test SRV Connectivity with generated connection string secret" , func ( t * testing. T ) {
95
+ tester , err := mongotester . FromResource ( t , mdb )
96
+ if err != nil {
97
+ t . Fatal ( err )
98
+ }
99
+ scramUser := mdb .GetScramUsers ()[ 0 ]
100
+ expectedCnxStr := fmt . Sprintf ( "mongodb+srv://%s-user:%s@%s-svc.%s.svc.cluster.local/admin?replicaSet=%s&ssl=false" , mdb . Name , pwd , mdb . Name , mdb . Namespace , mdb . Name )
101
+ cnxStrSrv := mongodbtests . GetSrvConnectionStringForUser ( mdb , scramUser )
102
+ assert . Equal ( t , expectedCnxStr , cnxStrSrv )
103
+ tester . ConnectivitySucceeds ( mongotester . WithURI ( cnxStrSrv ) )
104
+ })
105
+ }
106
+ t .Run ("Delete MongoDB Resource " , mongodbtests .DeleteMongoDBResource (& mdb , ctx ))
107
+ } )
108
+ }
93
109
}
0 commit comments