postgresql tests
This commit is contained in:
		
							parent
							
								
									0bfb81eb4f
								
							
						
					
					
						commit
						1708f7b8e0
					
				|  | @ -1,8 +1,8 @@ | |||
| package spec | ||||
| 
 | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"reflect" | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | @ -104,7 +104,31 @@ var wrongMaintenanceWindows = [][]byte{ | |||
| 	[]byte(`"Mon:00:00"`), | ||||
| } | ||||
| 
 | ||||
| var cl = []byte(`{ | ||||
| var unmarshalCluster = []struct { | ||||
| 	in  []byte | ||||
| 	out Postgresql | ||||
| }{{ | ||||
| 	[]byte(`{ | ||||
|   "kind": "Postgresql","apiVersion": "acid.zalan.do/v1", | ||||
|   "metadata": {"name": "acid-testcluster1"}, "spec": {"teamId": 100}}`), | ||||
| 	Postgresql{ | ||||
| 		TypeMeta: unversioned.TypeMeta{ | ||||
| 			Kind:       "Postgresql", | ||||
| 			APIVersion: "acid.zalan.do/v1", | ||||
| 		}, | ||||
| 		Metadata: v1.ObjectMeta{ | ||||
| 			Name: "acid-testcluster1", | ||||
| 		}, | ||||
| 		Status: ClusterStatusInvalid, | ||||
| 		Error: &json.UnmarshalTypeError{ | ||||
| 			Value:  "number", | ||||
| 			Type:   reflect.TypeOf(""), | ||||
| 			Offset: 126, | ||||
| 			Struct: "PostgresSpec", | ||||
| 			Field:  "teamId", | ||||
| 		}, | ||||
| 	}}, | ||||
| 	{[]byte(`{ | ||||
|   "kind": "Postgresql", | ||||
|   "apiVersion": "acid.zalan.do/v1", | ||||
|   "metadata": { | ||||
|  | @ -164,68 +188,88 @@ var cl = []byte(`{ | |||
|       "Sat:00:00-Sat:04:00" | ||||
|     ] | ||||
|   } | ||||
| }`) | ||||
| 
 | ||||
| var clExp = Postgresql{ | ||||
| 	TypeMeta: unversioned.TypeMeta{ | ||||
| 		Kind:       "Postgresql", | ||||
| 		APIVersion: "acid.zalan.do/v1", | ||||
| 	}, | ||||
| 	Metadata: v1.ObjectMeta{ | ||||
| 		Name: "acid-testcluster1", | ||||
| 	}, | ||||
| 	Spec: PostgresSpec{ | ||||
| 		PostgresqlParam: PostgresqlParam{ | ||||
| 			PgVersion: "9.6", | ||||
| 			Parameters: map[string]string{ | ||||
| 				"shared_buffers":  "32MB", | ||||
| 				"max_connections": "10", | ||||
| 				"log_statement":   "all", | ||||
| }`), | ||||
| 		Postgresql{ | ||||
| 			TypeMeta: unversioned.TypeMeta{ | ||||
| 				Kind:       "Postgresql", | ||||
| 				APIVersion: "acid.zalan.do/v1", | ||||
| 			}, | ||||
| 		}, | ||||
| 		Volume: Volume{ | ||||
| 			Size:         "5Gi", | ||||
| 			StorageClass: "SSD", | ||||
| 		}, | ||||
| 		Patroni: Patroni{ | ||||
| 			InitDB: map[string]string{ | ||||
| 				"encoding":       "UTF8", | ||||
| 				"locale":         "en_US.UTF-8", | ||||
| 				"data-checksums": "true", | ||||
| 			Metadata: v1.ObjectMeta{ | ||||
| 				Name: "acid-testcluster1", | ||||
| 			}, | ||||
| 			PgHba:                []string{"hostssl all all 0.0.0.0/0 md5", "host    all all 0.0.0.0/0 md5"}, | ||||
| 			TTL:                  30, | ||||
| 			LoopWait:             10, | ||||
| 			RetryTimeout:         10, | ||||
| 			MaximumLagOnFailover: 33554432, | ||||
| 		}, | ||||
| 		Resources: Resources{ | ||||
| 			ResourceRequest: ResourceDescription{CPU: "10m", Memory: "50Mi"}, | ||||
| 			ResourceLimits:  ResourceDescription{CPU: "300m", Memory: "3000Mi"}, | ||||
| 		}, | ||||
| 		TeamID:              "ACID", | ||||
| 		AllowedSourceRanges: []string{"127.0.0.1/32"}, | ||||
| 		NumberOfInstances:   2, | ||||
| 		Users:               map[string]UserFlags{"zalando": {"superuser", "createdb"}}, | ||||
| 		MaintenanceWindows: []MaintenanceWindow{{ | ||||
| 			StartWeekday: time.Monday, | ||||
| 			StartTime:    mustParseTime("01:00"), | ||||
| 			EndTime:      mustParseTime("06:00"), | ||||
| 			EndWeekday:   time.Sunday, | ||||
| 		}, | ||||
| 			{ | ||||
| 				StartWeekday: time.Saturday, | ||||
| 				StartTime:    mustParseTime("00:00"), | ||||
| 				EndTime:      mustParseTime("04:00"), | ||||
| 				EndWeekday:   time.Saturday, | ||||
| 			Spec: PostgresSpec{ | ||||
| 				PostgresqlParam: PostgresqlParam{ | ||||
| 					PgVersion: "9.6", | ||||
| 					Parameters: map[string]string{ | ||||
| 						"shared_buffers":  "32MB", | ||||
| 						"max_connections": "10", | ||||
| 						"log_statement":   "all", | ||||
| 					}, | ||||
| 				}, | ||||
| 				Volume: Volume{ | ||||
| 					Size:         "5Gi", | ||||
| 					StorageClass: "SSD", | ||||
| 				}, | ||||
| 				Patroni: Patroni{ | ||||
| 					InitDB: map[string]string{ | ||||
| 						"encoding":       "UTF8", | ||||
| 						"locale":         "en_US.UTF-8", | ||||
| 						"data-checksums": "true", | ||||
| 					}, | ||||
| 					PgHba:                []string{"hostssl all all 0.0.0.0/0 md5", "host    all all 0.0.0.0/0 md5"}, | ||||
| 					TTL:                  30, | ||||
| 					LoopWait:             10, | ||||
| 					RetryTimeout:         10, | ||||
| 					MaximumLagOnFailover: 33554432, | ||||
| 				}, | ||||
| 				Resources: Resources{ | ||||
| 					ResourceRequest: ResourceDescription{CPU: "10m", Memory: "50Mi"}, | ||||
| 					ResourceLimits:  ResourceDescription{CPU: "300m", Memory: "3000Mi"}, | ||||
| 				}, | ||||
| 				TeamID:              "ACID", | ||||
| 				AllowedSourceRanges: []string{"127.0.0.1/32"}, | ||||
| 				NumberOfInstances:   2, | ||||
| 				Users:               map[string]UserFlags{"zalando": {"superuser", "createdb"}}, | ||||
| 				MaintenanceWindows: []MaintenanceWindow{{ | ||||
| 					StartWeekday: time.Monday, | ||||
| 					StartTime:    mustParseTime("01:00"), | ||||
| 					EndTime:      mustParseTime("06:00"), | ||||
| 					EndWeekday:   time.Sunday, | ||||
| 				}, | ||||
| 					{ | ||||
| 						StartWeekday: time.Saturday, | ||||
| 						StartTime:    mustParseTime("00:00"), | ||||
| 						EndTime:      mustParseTime("04:00"), | ||||
| 						EndWeekday:   time.Saturday, | ||||
| 					}, | ||||
| 				}, | ||||
| 				ClusterName: "testcluster1", | ||||
| 			}, | ||||
| 		}, | ||||
| 		ClusterName: "testcluster1", | ||||
| 	}, | ||||
| 	Status: "", | ||||
| 	Error:  nil, | ||||
| 			Error: nil, | ||||
| 		}}, | ||||
| 	{ | ||||
| 		[]byte(`{"kind": "Postgresql","apiVersion": "acid.zalan.do/v1","metadata": {"name": "teapot-testcluster1"}, "spec": {"teamId": "acid"}}`), | ||||
| 		Postgresql{ | ||||
| 			TypeMeta: unversioned.TypeMeta{ | ||||
| 				Kind:       "Postgresql", | ||||
| 				APIVersion: "acid.zalan.do/v1", | ||||
| 			}, | ||||
| 			Metadata: v1.ObjectMeta{ | ||||
| 				Name: "teapot-testcluster1", | ||||
| 			}, | ||||
| 			Spec:   PostgresSpec{TeamID: "acid"}, | ||||
| 			Status: ClusterStatusInvalid, | ||||
| 			Error:  errors.New("name must match {TEAM}-{NAME} format"), | ||||
| 		}}, | ||||
| } | ||||
| 
 | ||||
| var invalidClusterSpec = []struct { | ||||
| 	in  []byte | ||||
| 	err error | ||||
| }{{[]byte(`{"kind": "Postgresql","apiVersion": "acid.zalan.do/v1"`), | ||||
| 	errors.New("unexpected end of JSON input"), | ||||
| }} | ||||
| 
 | ||||
| func mustParseTime(s string) time.Time { | ||||
| 	v, err := time.Parse("15:04", s) | ||||
| 	if err != nil { | ||||
|  | @ -323,25 +367,30 @@ func TestUnmarshalMaintWindowsErrs(t *testing.T) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPostgresqlUnmarshal(t *testing.T) { | ||||
| 	var cluster Postgresql | ||||
| 	err := cluster.UnmarshalJSON(cl) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Unmarshal Error: %v", err) | ||||
| 	} | ||||
| func TestPostgresUnmarshal(t *testing.T) { | ||||
| 	for _, tt := range unmarshalCluster { | ||||
| 		var cluster Postgresql | ||||
| 		err := cluster.UnmarshalJSON(tt.in) | ||||
| 		if err != nil { | ||||
| 			t.Errorf("Unmarshal Error: %v", err) | ||||
| 		} | ||||
| 
 | ||||
| 	if !reflect.DeepEqual(cluster, clExp) { | ||||
| 		t.Errorf("Expected Postgresql: %#v, got %#v", clExp, cluster) | ||||
| 		if !reflect.DeepEqual(cluster, tt.out) { | ||||
| 			t.Errorf("Expected Postgresql: %#v, got %#v", tt.out, cluster) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestPostgresqlMarshal(t *testing.T) { | ||||
| 	m, err := json.Marshal(clExp) | ||||
| 	if err != nil { | ||||
| 		t.Errorf("Marshal Error: %v", err) | ||||
| 	} | ||||
| func TestInvalidPostgresUnmarshal(t *testing.T) { | ||||
| 	for _, tt := range invalidClusterSpec { | ||||
| 		var cluster Postgresql | ||||
| 		err := cluster.UnmarshalJSON(tt.in) | ||||
| 		if err == nil { | ||||
| 			t.Errorf("Error expected for %s", string(tt.in)) | ||||
| 		} | ||||
| 
 | ||||
| 	if bytes.Compare(m, cl) != 0 { | ||||
| 		t.Errorf("Expected postgresql marshal: %s, got %s", string(cl), string(m)) | ||||
| 		if err.Error() != tt.err.Error() { | ||||
| 			t.Errorf("Unmarshal error expected: %v, got: %v", tt.err, err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue