@@ -59,6 +59,106 @@ func TestCompareTags(t *testing.T) {
5959 }
6060}
6161
62+ func TestDefaultRWConcern (t * testing.T ) {
63+ t .Parallel ()
64+
65+ tests := map [string ]struct {
66+ spec * api.DefaultRWConcern
67+ wantReadConcern string
68+ wantWriteConcern string
69+ }{
70+ "nil spec falls back to majority" : {
71+ spec : nil ,
72+ wantReadConcern : mongo .DefaultReadConcern ,
73+ wantWriteConcern : mongo .DefaultWriteConcern ,
74+ },
75+ "empty fields fall back to majority" : {
76+ spec : & api.DefaultRWConcern {},
77+ wantReadConcern : mongo .DefaultReadConcern ,
78+ wantWriteConcern : mongo .DefaultWriteConcern ,
79+ },
80+ "only read overridden" : {
81+ spec : & api.DefaultRWConcern {ReadConcern : "local" },
82+ wantReadConcern : "local" ,
83+ wantWriteConcern : mongo .DefaultWriteConcern ,
84+ },
85+ "only write overridden" : {
86+ spec : & api.DefaultRWConcern {WriteConcern : "1" },
87+ wantReadConcern : mongo .DefaultReadConcern ,
88+ wantWriteConcern : "1" ,
89+ },
90+ "both overridden" : {
91+ spec : & api.DefaultRWConcern {ReadConcern : "local" , WriteConcern : "1" },
92+ wantReadConcern : "local" ,
93+ wantWriteConcern : "1" ,
94+ },
95+ }
96+
97+ for name , tt := range tests {
98+ t .Run (name , func (t * testing.T ) {
99+ cr := & api.PerconaServerMongoDB {
100+ Spec : api.PerconaServerMongoDBSpec {DefaultRWConcern : tt .spec },
101+ }
102+ gotRead , gotWrite := defaultRWConcern (cr )
103+ assert .Equal (t , tt .wantReadConcern , gotRead )
104+ assert .Equal (t , tt .wantWriteConcern , gotWrite )
105+ })
106+ }
107+ }
108+
109+ func TestShouldSetDefaultRWConcern (t * testing.T ) {
110+ t .Parallel ()
111+
112+ tests := map [string ]struct {
113+ shardingEnabled bool
114+ arbiterEnabled bool
115+ rwConcern * api.DefaultRWConcern
116+ want bool
117+ }{
118+ "PSS, no custom concern" : {
119+ want : false ,
120+ },
121+ "PSA, no custom concern" : {
122+ arbiterEnabled : true ,
123+ want : true ,
124+ },
125+ "PSS, custom concern" : {
126+ rwConcern : & api.DefaultRWConcern {WriteConcern : "1" },
127+ want : true ,
128+ },
129+ "PSA, custom concern" : {
130+ arbiterEnabled : true ,
131+ rwConcern : & api.DefaultRWConcern {WriteConcern : "1" },
132+ want : true ,
133+ },
134+ "sharded, PSA" : {
135+ shardingEnabled : true ,
136+ arbiterEnabled : true ,
137+ want : false ,
138+ },
139+ "sharded, custom concern" : {
140+ shardingEnabled : true ,
141+ rwConcern : & api.DefaultRWConcern {WriteConcern : "1" },
142+ want : false ,
143+ },
144+ }
145+
146+ for name , tc := range tests {
147+ t .Run (name , func (t * testing.T ) {
148+ cr := & api.PerconaServerMongoDB {
149+ Spec : api.PerconaServerMongoDBSpec {
150+ Sharding : api.Sharding {Enabled : tc .shardingEnabled },
151+ DefaultRWConcern : tc .rwConcern ,
152+ },
153+ }
154+ rs := & api.ReplsetSpec {
155+ Arbiter : api.Arbiter {Enabled : tc .arbiterEnabled },
156+ }
157+ assert .Equal (t , tc .want , shouldSetDefaultRWConcern (cr , rs ))
158+ })
159+ }
160+ }
161+
62162func TestGetRoles (t * testing.T ) {
63163 tests := map [string ]struct {
64164 crVersion string
0 commit comments