postgresql spec tests
This commit is contained in:
parent
fdde527e82
commit
312f9e47b3
|
|
@ -1,7 +1,6 @@
|
|||
package spec
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"reflect"
|
||||
|
|
@ -10,23 +9,30 @@ import (
|
|||
|
||||
"k8s.io/client-go/pkg/api/unversioned"
|
||||
"k8s.io/client-go/pkg/api/v1"
|
||||
"bytes"
|
||||
)
|
||||
|
||||
var parseTimeTests = []struct {
|
||||
in string
|
||||
out time.Time
|
||||
outWeekday time.Weekday
|
||||
outWeekdayProvided bool
|
||||
err error
|
||||
}{
|
||||
{"Mon:16:08", mustParseTime("16:08"), time.Monday, true, nil},
|
||||
{"Sun:11:00", mustParseTime("11:00"), time.Sunday, true, nil},
|
||||
{"23:59", mustParseTime("23:59"), time.Weekday(0), false, nil},
|
||||
{"16:08", mustParseTime("16:08"), nil},
|
||||
{"11:00", mustParseTime("11:00"), nil},
|
||||
{"23:59", mustParseTime("23:59"), nil},
|
||||
|
||||
{"Thr:00:12", time.Now(), time.Sunday, false, errors.New(`incorrect weekday`)},
|
||||
{"26:09", time.Now(), time.Sunday, false, errors.New(`parsing time "26:09": hour out of range`)},
|
||||
{"Std:26:09", time.Now(), time.Sunday, false, errors.New(`incorrect weekday`)},
|
||||
{"Saturday:00:00", time.Now(), time.Sunday, false, errors.New(`weekday must be 3 characters length`)},
|
||||
{"26:09", time.Now(), errors.New(`parsing time "26:09": hour out of range`)},
|
||||
{"23:69", time.Now(), errors.New(`parsing time "23:69": minute out of range`)},
|
||||
}
|
||||
|
||||
var parseWeekdayTests = []struct {
|
||||
in string
|
||||
out time.Weekday
|
||||
err error
|
||||
}{
|
||||
{"Wed", time.Wednesday, nil},
|
||||
{"Sunday", time.Weekday(0), errors.New("incorrect weekday")},
|
||||
{"", time.Weekday(0), errors.New("incorrect weekday")},
|
||||
}
|
||||
|
||||
var clusterNames = []struct {
|
||||
|
|
@ -40,7 +46,7 @@ var clusterNames = []struct {
|
|||
{"my-team-another-test", "my-team", "another-test", nil},
|
||||
{"------strange-team-cluster", "-----", "strange-team-cluster", nil},
|
||||
{"acid-test", "test", "", errors.New("name must match {TEAM}-{NAME} format")},
|
||||
{"-test", "", "", errors.New("Team name is empty")},
|
||||
{"-test", "", "", errors.New("team name is empty")},
|
||||
{"-test", "-", "", errors.New("name must match {TEAM}-{NAME} format")},
|
||||
{"", "-", "", errors.New("name is too short")},
|
||||
{"-", "-", "", errors.New("name is too short")},
|
||||
|
|
@ -50,56 +56,33 @@ var maintenanceWindows = []struct {
|
|||
in []byte
|
||||
out MaintenanceWindow
|
||||
err error
|
||||
}{{[]byte(`"10:00-20:00"`),
|
||||
}{{[]byte(`"Tue:10:00-20:00"`),
|
||||
MaintenanceWindow{
|
||||
Weekday: time.Tuesday,
|
||||
StartTime: mustParseTime("10:00"),
|
||||
StartWeekday: time.Monday,
|
||||
EndTime: mustParseTime("20:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
}, nil},
|
||||
{[]byte(`"Tue:10:00-Sun:23:00"`),
|
||||
{[]byte(`"Mon:10:00-10:00"`),
|
||||
MaintenanceWindow{
|
||||
Weekday: time.Monday,
|
||||
StartTime: mustParseTime("10:00"),
|
||||
StartWeekday: time.Tuesday,
|
||||
EndTime: mustParseTime("23:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
}, nil},
|
||||
{[]byte(`"Mon:10:00-Mon:10:00"`),
|
||||
MaintenanceWindow{
|
||||
StartTime: mustParseTime("10:00"),
|
||||
StartWeekday: time.Monday,
|
||||
EndTime: mustParseTime("10:00"),
|
||||
EndWeekday: time.Monday,
|
||||
}, nil},
|
||||
{[]byte(`"Sun:00:00-Sun:00:00"`),
|
||||
{[]byte(`"Sun:00:00-00:00"`),
|
||||
MaintenanceWindow{
|
||||
Weekday: time.Sunday,
|
||||
StartTime: mustParseTime("00:00"),
|
||||
StartWeekday: time.Sunday,
|
||||
EndTime: mustParseTime("00:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
}, nil},
|
||||
{[]byte(`"00:00-10:00"`),
|
||||
MaintenanceWindow{
|
||||
StartTime: mustParseTime("00:00"),
|
||||
StartWeekday: time.Monday,
|
||||
EndTime: mustParseTime("10:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
}, nil},
|
||||
{[]byte(`"00:00-00:00"`),
|
||||
MaintenanceWindow{
|
||||
StartTime: mustParseTime("00:00"),
|
||||
StartWeekday: time.Monday,
|
||||
EndTime: mustParseTime("00:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
}, nil},
|
||||
{[]byte(`"Mon:12:00-Sun:11:00"`), MaintenanceWindow{}, errors.New(`'From' time must be prior to the 'To' time`)},
|
||||
{[]byte(`"Mon:12:00-Mon:11:00"`), MaintenanceWindow{}, errors.New(`'From' time must be prior to the 'To' time`)},
|
||||
{[]byte(`"Wed:00:00-Tue:26:00"`), MaintenanceWindow{}, errors.New(`parsing time "Tue:26:00": hour out of range`)},
|
||||
{[]byte(`"Sun:00:00-Mon:00:00"`), MaintenanceWindow{}, errors.New(`'From' weekday must be prior to the 'To' weekday`)},
|
||||
{[]byte(`"Wed:00:00-Mon:10:00"`), MaintenanceWindow{}, errors.New(`'From' weekday must be prior to the 'To' weekday`)},
|
||||
{[]byte(`"10:00-00:00"`), MaintenanceWindow{}, errors.New(`'From' time must be prior to the 'To' time`)},
|
||||
{[]byte(`"Mon:00:00:00-Tue:10:00:00"`), MaintenanceWindow{}, errors.New(`parsing time "Mon:00:00:00" as "15:04": cannot parse "Mon:00:00:00" as "15"`)},
|
||||
{[]byte(`"Mon:00:00"`), MaintenanceWindow{}, errors.New("incorrect maintenance window format")}}
|
||||
{[]byte(`"Mon:12:00-11:00"`), MaintenanceWindow{}, errors.New(`'From' time must be prior to the 'To' time`)},
|
||||
{[]byte(`"Wed:33:00-00:00"`), MaintenanceWindow{}, errors.New(`could not parse start time: parsing time "33:00": hour out of range`)},
|
||||
{[]byte(`"Wed:00:00-26:00"`), MaintenanceWindow{}, errors.New(`could not parse end time: parsing time "26:00": hour out of range`)},
|
||||
{[]byte(`"Sunday:00:00-00:00"`), MaintenanceWindow{}, errors.New(`could not parse weekday: incorrect weekday`)},
|
||||
{[]byte(`":00:00-10:00"`), MaintenanceWindow{}, errors.New(`could not parse weekday: incorrect weekday`)},
|
||||
{[]byte(`"Mon:10:00-00:00"`), MaintenanceWindow{}, errors.New(`'From' time must be prior to the 'To' time`)},
|
||||
{[]byte(`"Mon:00:00:00-10:00:00"`), MaintenanceWindow{}, errors.New(`incorrect maintenance window format`)},
|
||||
{[]byte(`"Mon:00:00"`), MaintenanceWindow{}, errors.New("incorrect maintenance window format")},
|
||||
{[]byte(`"Mon:00:00-00:00:00"`), MaintenanceWindow{}, errors.New("could not parse end time: incorrect time format")}}
|
||||
|
||||
var unmarshalCluster = []struct {
|
||||
in []byte
|
||||
|
|
@ -184,8 +167,8 @@ var unmarshalCluster = []struct {
|
|||
"maximum_lag_on_failover": 33554432
|
||||
},
|
||||
"maintenanceWindows": [
|
||||
"01:00-06:00",
|
||||
"Sat:00:00-Sat:04:00"
|
||||
"Mon:01:00-06:00",
|
||||
"Sat:00:00-04:00"
|
||||
]
|
||||
}
|
||||
}`),
|
||||
|
|
@ -231,23 +214,21 @@ var unmarshalCluster = []struct {
|
|||
NumberOfInstances: 2,
|
||||
Users: map[string]UserFlags{"zalando": {"superuser", "createdb"}},
|
||||
MaintenanceWindows: []MaintenanceWindow{{
|
||||
StartWeekday: time.Monday,
|
||||
Weekday: time.Monday,
|
||||
StartTime: mustParseTime("01:00"),
|
||||
EndTime: mustParseTime("06:00"),
|
||||
EndWeekday: time.Sunday,
|
||||
},
|
||||
{
|
||||
StartWeekday: time.Saturday,
|
||||
Weekday: time.Saturday,
|
||||
StartTime: mustParseTime("00:00"),
|
||||
EndTime: mustParseTime("04:00"),
|
||||
EndWeekday: time.Saturday,
|
||||
},
|
||||
},
|
||||
ClusterName: "testcluster1",
|
||||
},
|
||||
Error: nil,
|
||||
},
|
||||
[]byte(`{"kind":"Postgresql","apiVersion":"acid.zalan.do/v1","metadata":{"name":"acid-testcluster1","creationTimestamp":null},"spec":{"postgresql":{"version":"9.6","parameters":{"log_statement":"all","max_connections":"10","shared_buffers":"32MB"}},"volume":{"size":"5Gi","storageClass":"SSD"},"patroni":{"initdb":{"data-checksums":"true","encoding":"UTF8","locale":"en_US.UTF-8"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"],"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432},"resources":{"requests":{"cpu":"10m","memory":"50Mi"},"limits":{"cpu":"300m","memory":"3000Mi"}},"teamId":"ACID","allowedSourceRanges":["127.0.0.1/32"],"numberOfInstances":2,"users":{"zalando":["superuser","createdb"]},"maintenanceWindows":["01:00-06:00","Sat:00:00-Sat:04:00"]}}`), nil},
|
||||
[]byte(`{"kind":"Postgresql","apiVersion":"acid.zalan.do/v1","metadata":{"name":"acid-testcluster1","creationTimestamp":null},"spec":{"postgresql":{"version":"9.6","parameters":{"log_statement":"all","max_connections":"10","shared_buffers":"32MB"}},"volume":{"size":"5Gi","storageClass":"SSD"},"patroni":{"initdb":{"data-checksums":"true","encoding":"UTF8","locale":"en_US.UTF-8"},"pg_hba":["hostssl all all 0.0.0.0/0 md5","host all all 0.0.0.0/0 md5"],"ttl":30,"loop_wait":10,"retry_timeout":10,"maximum_lag_on_failover":33554432},"resources":{"requests":{"cpu":"10m","memory":"50Mi"},"limits":{"cpu":"300m","memory":"3000Mi"}},"teamId":"ACID","allowedSourceRanges":["127.0.0.1/32"],"numberOfInstances":2,"users":{"zalando":["superuser","createdb"]},"maintenanceWindows":["Mon:01:00-06:00","Sat:00:00-04:00"]}}`), nil},
|
||||
{
|
||||
[]byte(`{"kind": "Postgresql","apiVersion": "acid.zalan.do/v1","metadata": {"name": "teapot-testcluster1"}, "spec": {"teamId": "acid"}}`),
|
||||
Postgresql{
|
||||
|
|
@ -319,15 +300,15 @@ func mustParseTime(s string) time.Time {
|
|||
panic(err)
|
||||
}
|
||||
|
||||
return v
|
||||
return v.UTC()
|
||||
}
|
||||
|
||||
func TestParseTime(t *testing.T) {
|
||||
for _, tt := range parseTimeTests {
|
||||
aTime, weekday, weekdayProvided, err := parseTime(tt.in)
|
||||
aTime, err := parseTime(tt.in)
|
||||
if err != nil {
|
||||
if err.Error() != tt.err.Error() {
|
||||
t.Errorf("ParseTime expected error: %v, got: %v", err, tt.err)
|
||||
t.Errorf("ParseTime expected error: %v, got: %v", tt.err, err)
|
||||
}
|
||||
|
||||
continue
|
||||
|
|
@ -336,17 +317,27 @@ func TestParseTime(t *testing.T) {
|
|||
if aTime != tt.out {
|
||||
t.Errorf("Expected time: %v, got: %v", tt.out, aTime)
|
||||
}
|
||||
|
||||
if weekday != tt.outWeekday {
|
||||
t.Errorf("Expected weekday: %v, got: %v", tt.outWeekday, weekday)
|
||||
}
|
||||
}
|
||||
|
||||
if weekdayProvided != tt.outWeekdayProvided {
|
||||
t.Errorf("Expected weekdayProvided: %t, got: %t", tt.outWeekdayProvided, weekdayProvided)
|
||||
func TestWeekdayTime(t *testing.T) {
|
||||
for _, tt := range parseWeekdayTests {
|
||||
aTime, err := parseWeekday(tt.in)
|
||||
if err != nil {
|
||||
if err.Error() != tt.err.Error() {
|
||||
t.Errorf("ParseWeekday expected error: %v, got: %v", tt.err, err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if aTime != tt.out {
|
||||
t.Errorf("Expected weekday: %v, got: %v", tt.out, aTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func TestClusterName(t *testing.T) {
|
||||
for _, tt := range clusterNames {
|
||||
name, err := extractClusterName(tt.in, tt.inTeam)
|
||||
|
|
@ -363,11 +354,15 @@ func TestClusterName(t *testing.T) {
|
|||
func TestUnmarshalMaintenanceWindow(t *testing.T) {
|
||||
for _, tt := range maintenanceWindows {
|
||||
var m MaintenanceWindow
|
||||
err := m.UnmarshalJSON([]byte(tt.in))
|
||||
err := m.UnmarshalJSON(tt.in)
|
||||
if err != nil && err.Error() != tt.err.Error() {
|
||||
t.Errorf("MaintenanceWindow unmarshal expected error: %v, got %v", tt.err, err)
|
||||
continue
|
||||
}
|
||||
if tt.err != nil && err == nil {
|
||||
t.Errorf("Expected error")
|
||||
continue
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(m, tt.out) {
|
||||
t.Errorf("Expected maintenace window: %#v, got: %#v", tt.out, m)
|
||||
|
|
|
|||
Loading…
Reference in New Issue