@@ -43,14 +43,29 @@ var clusterNames = []struct {
43
43
{"acid-test" , "acid" , "test" , nil },
44
44
{"test-my-name" , "test" , "my-name" , nil },
45
45
{"my-team-another-test" , "my-team" , "another-test" , nil },
46
- {"------strange-team-cluster" , "-----" , "strange-team-cluster" , nil },
46
+ {"------strange-team-cluster" , "-----" , "strange-team-cluster" ,
47
+ errors .New (`name must confirm to DNS-1035, regex used for validation is "^[a-z]([-a-z0-9]*[a-z0-9])?$"` )},
48
+ {"fooobar-fooobarfooobarfooobarfooobarfooobarfooobarfooobarfooobar" , "fooobar" , "" ,
49
+ errors .New ("name cannot be longer than 58 characters" )},
47
50
{"acid-test" , "test" , "" , errors .New ("name must match {TEAM}-{NAME} format" )},
48
51
{"-test" , "" , "" , errors .New ("team name is empty" )},
49
52
{"-test" , "-" , "" , errors .New ("name must match {TEAM}-{NAME} format" )},
50
53
{"" , "-" , "" , errors .New ("name is too short" )},
51
54
{"-" , "-" , "" , errors .New ("name is too short" )},
52
55
}
53
56
57
+ var cloneClusterDescriptions = []struct {
58
+ in * CloneDescription
59
+ err error
60
+ }{
61
+ {& CloneDescription {"foo+bar" , "" , "NotEmpty" }, nil },
62
+ {& CloneDescription {"foo+bar" , "" , "" },
63
+ errors .New (`clone cluster name must confirm to DNS-1035, regex used for validation is "^[a-z]([-a-z0-9]*[a-z0-9])?$"` )},
64
+ {& CloneDescription {"foobar123456789012345678901234567890123456789012345678901234567890" , "" , "" },
65
+ errors .New ("clone cluster name must be no longer than 63 characters" )},
66
+ {& CloneDescription {"foobar" , "" , "" }, nil },
67
+ }
68
+
54
69
var maintenanceWindows = []struct {
55
70
in []byte
56
71
out MaintenanceWindow
@@ -279,14 +294,15 @@ var unmarshalCluster = []struct {
279
294
Name : "acid-testcluster1" ,
280
295
},
281
296
Spec : PostgresSpec {
282
- TeamID : "acid" ,
283
- Clone : CloneDescription {},
297
+ TeamID : "acid" ,
298
+ Clone : CloneDescription {
299
+ ClusterName : "team-batman" ,
300
+ },
284
301
ClusterName : "testcluster1" ,
285
302
},
286
- Status : ClusterStatusInvalid ,
287
- Error : errors .New ("name must match {TEAM}-{NAME} format for the cluster to clone" ),
303
+ Error : nil ,
288
304
},
289
- marshal : []byte (`{"kind":"Postgresql","apiVersion":"acid.zalan.do/v1","metadata":{"name":"acid-testcluster1","creationTimestamp":null},"spec":{"postgresql":{"version":"","parameters":null},"volume":{"size":"","storageClass":""},"patroni":{"initdb":null,"pg_hba":null,"ttl":0,"loop_wait":0,"retry_timeout":0,"maximum_lag_on_failover":0},"resources":{"requests":{"cpu":"","memory":""},"limits":{"cpu":"","memory":""}},"teamId":"acid","allowedSourceRanges":null,"numberOfInstances":0,"users":null,"clone":{}},"status ":"Invalid" }` ), err : nil },
305
+ marshal : []byte (`{"kind":"Postgresql","apiVersion":"acid.zalan.do/v1","metadata":{"name":"acid-testcluster1","creationTimestamp":null},"spec":{"postgresql":{"version":"","parameters":null},"volume":{"size":"","storageClass":""},"patroni":{"initdb":null,"pg_hba":null,"ttl":0,"loop_wait":0,"retry_timeout":0,"maximum_lag_on_failover":0},"resources":{"requests":{"cpu":"","memory":""},"limits":{"cpu":"","memory":""}},"teamId":"acid","allowedSourceRanges":null,"numberOfInstances":0,"users":null,"clone":{"cluster ":"team-batman"}} }` ), err : nil },
290
306
{[]byte (`{"kind": "Postgresql","apiVersion": "acid.zalan.do/v1"` ),
291
307
Postgresql {},
292
308
[]byte {},
@@ -350,11 +366,12 @@ func TestParseTime(t *testing.T) {
350
366
for _ , tt := range parseTimeTests {
351
367
aTime , err := parseTime (tt .in )
352
368
if err != nil {
353
- if err .Error () != tt .err .Error () {
369
+ if tt . err == nil || err .Error () != tt .err .Error () {
354
370
t .Errorf ("ParseTime expected error: %v, got: %v" , tt .err , err )
355
371
}
356
-
357
372
continue
373
+ } else if tt .err != nil {
374
+ t .Errorf ("Expected error: %v" , tt .err )
358
375
}
359
376
360
377
if aTime != tt .out {
@@ -367,11 +384,12 @@ func TestWeekdayTime(t *testing.T) {
367
384
for _ , tt := range parseWeekdayTests {
368
385
aTime , err := parseWeekday (tt .in )
369
386
if err != nil {
370
- if err .Error () != tt .err .Error () {
387
+ if tt . err == nil || err .Error () != tt .err .Error () {
371
388
t .Errorf ("ParseWeekday expected error: %v, got: %v" , tt .err , err )
372
389
}
373
-
374
390
continue
391
+ } else if tt .err != nil {
392
+ t .Errorf ("Expected error: %v" , tt .err )
375
393
}
376
394
377
395
if aTime != tt .out {
@@ -383,27 +401,43 @@ func TestWeekdayTime(t *testing.T) {
383
401
func TestClusterName (t * testing.T ) {
384
402
for _ , tt := range clusterNames {
385
403
name , err := extractClusterName (tt .in , tt .inTeam )
386
- if err != nil && err .Error () != tt .err .Error () {
387
- t .Errorf ("extractClusterName expected error: %v, got: %v" , tt .err , err )
404
+ if err != nil {
405
+ if tt .err == nil || err .Error () != tt .err .Error () {
406
+ t .Errorf ("extractClusterName expected error: %v, got: %v" , tt .err , err )
407
+ }
388
408
continue
409
+ } else if tt .err != nil {
410
+ t .Errorf ("Expected error: %v" , tt .err )
389
411
}
390
412
if name != tt .clusterName {
391
413
t .Errorf ("Expected cluserName: %q, got: %q" , tt .clusterName , name )
392
414
}
393
415
}
394
416
}
395
417
418
+ func TestCloneClusterDescription (t * testing.T ) {
419
+ for _ , tt := range cloneClusterDescriptions {
420
+ if err := validateCloneClusterDescription (tt .in ); err != nil {
421
+ if tt .err == nil || err .Error () != tt .err .Error () {
422
+ t .Errorf ("testCloneClusterDescription expected error: %v, got: %v" , tt .err , err )
423
+ }
424
+ } else if tt .err != nil {
425
+ t .Errorf ("Expected error: %v" , tt .err )
426
+ }
427
+ }
428
+ }
429
+
396
430
func TestUnmarshalMaintenanceWindow (t * testing.T ) {
397
431
for _ , tt := range maintenanceWindows {
398
432
var m MaintenanceWindow
399
433
err := m .UnmarshalJSON (tt .in )
400
- if err != nil && err .Error () != tt .err .Error () {
401
- t .Errorf ("MaintenanceWindow unmarshal expected error: %v, got %v" , tt .err , err )
402
- continue
403
- }
404
- if tt .err != nil && err == nil {
405
- t .Errorf ("Expected error" )
434
+ if err != nil {
435
+ if tt .err == nil || err .Error () != tt .err .Error () {
436
+ t .Errorf ("MaintenanceWindow unmarshal expected error: %v, got %v" , tt .err , err )
437
+ }
406
438
continue
439
+ } else if tt .err != nil {
440
+ t .Errorf ("Expected error: %v" , tt .err )
407
441
}
408
442
409
443
if ! reflect .DeepEqual (m , tt .out ) {
@@ -421,7 +455,6 @@ func TestMarshalMaintenanceWindow(t *testing.T) {
421
455
s , err := tt .out .MarshalJSON ()
422
456
if err != nil {
423
457
t .Errorf ("Marshal Error: %v" , err )
424
- continue
425
458
}
426
459
427
460
if ! bytes .Equal (s , tt .in ) {
@@ -435,11 +468,12 @@ func TestPostgresUnmarshal(t *testing.T) {
435
468
var cluster Postgresql
436
469
err := cluster .UnmarshalJSON (tt .in )
437
470
if err != nil {
438
- if err .Error () != tt .err .Error () {
471
+ if tt . err == nil || err .Error () != tt .err .Error () {
439
472
t .Errorf ("Unmarshal expected error: %v, got: %v" , tt .err , err )
440
473
}
441
-
442
474
continue
475
+ } else if tt .err != nil {
476
+ t .Errorf ("Expected error: %v" , tt .err )
443
477
}
444
478
445
479
if ! reflect .DeepEqual (cluster , tt .out ) {
@@ -457,7 +491,6 @@ func TestMarshal(t *testing.T) {
457
491
m , err := json .Marshal (tt .out )
458
492
if err != nil {
459
493
t .Errorf ("Marshal error: %v" , err )
460
- continue
461
494
}
462
495
if ! bytes .Equal (m , tt .marshal ) {
463
496
t .Errorf ("Marshal Postgresql expected: %q, got: %q" , string (tt .marshal ), string (m ))
@@ -481,10 +514,15 @@ func TestUnmarshalPostgresList(t *testing.T) {
481
514
for _ , tt := range postgresqlList {
482
515
var list PostgresqlList
483
516
err := list .UnmarshalJSON (tt .in )
484
- if err != nil && err .Error () != tt .err .Error () {
485
- t .Errorf ("PostgresqlList unmarshal expected error: %v, got: %v" , tt .err , err )
486
- return
517
+ if err != nil {
518
+ if tt .err == nil || err .Error () != tt .err .Error () {
519
+ t .Errorf ("PostgresqlList unmarshal expected error: %v, got: %v" , tt .err , err )
520
+ }
521
+ continue
522
+ } else if tt .err != nil {
523
+ t .Errorf ("Expected error: %v" , tt .err )
487
524
}
525
+
488
526
if ! reflect .DeepEqual (list , tt .out ) {
489
527
t .Errorf ("Postgresql list unmarshall expected: %#v, got: %#v" , tt .out , list )
490
528
}
0 commit comments