@@ -3,15 +3,16 @@ package v1_test
33import (
44 "testing"
55
6- api "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
7- "github.com/percona/percona-server-mongodb-operator/version"
86 "github.com/stretchr/testify/assert"
97 corevs "k8s.io/api/core/v1"
108 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
119 logf "sigs.k8s.io/controller-runtime/pkg/log"
10+
11+ api "github.com/percona/percona-server-mongodb-operator/pkg/apis/psmdb/v1"
12+ "github.com/percona/percona-server-mongodb-operator/version"
1213)
1314
14- func TestSetSafeDefault (t * testing.T ) {
15+ func TestSetSafeDefaultPre116 (t * testing.T ) {
1516 type args struct {
1617 replset * api.ReplsetSpec
1718 expected * api.ReplsetSpec
@@ -248,3 +249,167 @@ func TestSetSafeDefault(t *testing.T) {
248249 })
249250 }
250251}
252+
253+ func TestSetSafeDefault (t * testing.T ) {
254+ type args struct {
255+ replset * api.ReplsetSpec
256+ expectedErr string
257+ }
258+
259+ vs := & api.VolumeSpec {
260+ EmptyDir : & corevs.EmptyDirVolumeSource {
261+ Medium : corevs .StorageMediumDefault ,
262+ },
263+ }
264+ tests := map [string ]args {
265+ "even number" : {
266+ & api.ReplsetSpec {
267+ VolumeSpec : vs ,
268+ Size : 4 ,
269+ },
270+ "check safe defaults: replset size must be odd. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
271+ },
272+ "even number2" : {
273+ & api.ReplsetSpec {
274+ VolumeSpec : vs ,
275+ Size : 2 ,
276+ },
277+ "check safe defaults: replset size must be odd. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
278+ },
279+ "0 w/o arbiter " : {
280+ & api.ReplsetSpec {
281+ VolumeSpec : vs ,
282+ Size : 0 ,
283+ },
284+ "check safe defaults: replset size must be at least 3. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
285+ },
286+ "0 with arbiter" : {
287+ & api.ReplsetSpec {
288+ VolumeSpec : vs ,
289+ Size : 0 ,
290+ Arbiter : api.Arbiter {
291+ Enabled : true ,
292+ Size : 1 ,
293+ },
294+ },
295+ "check safe defaults: replset size must be at least 4 with arbiter. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
296+ },
297+ "1 w/o arbiter " : {
298+ & api.ReplsetSpec {
299+ VolumeSpec : vs ,
300+ Size : 1 ,
301+ },
302+ "check safe defaults: replset size must be at least 3. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
303+ },
304+ "1 with arbiter" : {
305+ & api.ReplsetSpec {
306+ VolumeSpec : vs ,
307+ Size : 1 ,
308+ Arbiter : api.Arbiter {
309+ Enabled : true ,
310+ Size : 1 ,
311+ },
312+ },
313+ "check safe defaults: replset size must be at least 4 with arbiter. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
314+ },
315+ "odd with arbiter" : {
316+ & api.ReplsetSpec {
317+ VolumeSpec : vs ,
318+ Size : 3 ,
319+ Arbiter : api.Arbiter {
320+ Enabled : true ,
321+ Size : 1 ,
322+ },
323+ },
324+ "check safe defaults: replset size must be at least 4 with arbiter. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
325+ },
326+ "odd with two arbiters" : {
327+ & api.ReplsetSpec {
328+ VolumeSpec : vs ,
329+ Size : 3 ,
330+ Arbiter : api.Arbiter {
331+ Enabled : true ,
332+ Size : 2 ,
333+ },
334+ },
335+ "check safe defaults: arbiter size must be 1. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
336+ },
337+ "odd with three arbiters" : {
338+ & api.ReplsetSpec {
339+ VolumeSpec : vs ,
340+ Size : 3 ,
341+ Arbiter : api.Arbiter {
342+ Enabled : true ,
343+ Size : 3 ,
344+ },
345+ },
346+ "check safe defaults: arbiter size must be 1. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
347+ },
348+ "even with arbiter" : {
349+ & api.ReplsetSpec {
350+ VolumeSpec : vs ,
351+ Size : 2 ,
352+ Arbiter : api.Arbiter {
353+ Enabled : true ,
354+ Size : 1 ,
355+ },
356+ },
357+ "check safe defaults: replset size must be at least 4 with arbiter. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
358+ },
359+ "even4 with arbiter" : {
360+ & api.ReplsetSpec {
361+ VolumeSpec : vs ,
362+ Size : 4 ,
363+ Arbiter : api.Arbiter {
364+ Enabled : true ,
365+ Size : 2 ,
366+ },
367+ },
368+ "check safe defaults: arbiter size must be 1. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
369+ },
370+ "even with two arbiters" : {
371+ & api.ReplsetSpec {
372+ VolumeSpec : vs ,
373+ Size : 2 ,
374+ Arbiter : api.Arbiter {
375+ Enabled : true ,
376+ Size : 2 ,
377+ },
378+ },
379+ "check safe defaults: arbiter size must be 1. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
380+ },
381+ "even with three arbiters" : {
382+ & api.ReplsetSpec {
383+ VolumeSpec : vs ,
384+ Size : 2 ,
385+ Arbiter : api.Arbiter {
386+ Enabled : true ,
387+ Size : 3 ,
388+ },
389+ },
390+ "check safe defaults: arbiter size must be 1. Set spec.unsafeFlags.replsetSize to true to disable this check" ,
391+ },
392+ }
393+
394+ cr := & api.PerconaServerMongoDB {
395+ ObjectMeta : metav1.ObjectMeta {Name : "psmdb-mock" , Namespace : "psmdb" },
396+ Spec : api.PerconaServerMongoDBSpec {
397+ CRVersion : "1.16.0" ,
398+ Replsets : []* api.ReplsetSpec {{Name : "rs0" , Size : 3 }, {Name : "rs1" , Size : 3 }},
399+ Sharding : api.Sharding {Enabled : true , Mongos : & api.MongosSpec {Size : 3 }},
400+ },
401+ }
402+
403+ for name , test := range tests {
404+ t .Run (name , func (t * testing.T ) {
405+ for _ , platform := range []version.Platform {version .PlatformKubernetes , version .PlatformOpenshift } {
406+ err := test .replset .SetDefaults (platform , cr , logf .Log .WithName ("TestSetSafeDefault" ))
407+ if err == nil {
408+ t .Fatalf ("expected error: %v, got nil" , test .expectedErr )
409+ }
410+
411+ assert .EqualError (t , err , test .expectedErr )
412+ }
413+ })
414+ }
415+ }
0 commit comments