add unit test

This commit is contained in:
Felix Kunde 2020-03-16 12:37:43 +01:00
parent 9390ae3630
commit 03f7fc0a92
5 changed files with 70 additions and 22 deletions

View File

@ -77,7 +77,7 @@ func main() {
log.Fatalf("couldn't get REST config: %v", err) log.Fatalf("couldn't get REST config: %v", err)
} }
c := controller.NewController(&config) c := controller.NewController(&config, "")
c.Run(stop, wg) c.Run(stop, wg)

View File

@ -63,14 +63,14 @@ type Controller struct {
} }
// NewController creates a new controller // NewController creates a new controller
func NewController(controllerConfig *spec.ControllerConfig) *Controller { func NewController(controllerConfig *spec.ControllerConfig, controllerId string) *Controller {
logger := logrus.New() logger := logrus.New()
c := &Controller{ c := &Controller{
config: *controllerConfig, config: *controllerConfig,
opConfig: &config.Config{}, opConfig: &config.Config{},
logger: logger.WithField("pkg", "controller"), logger: logger.WithField("pkg", "controller"),
controllerID: os.Getenv("CONTROLLER_ID"), controllerID: controllerId,
curWorkerCluster: sync.Map{}, curWorkerCluster: sync.Map{},
clusterWorkers: make(map[spec.NamespacedName]uint32), clusterWorkers: make(map[spec.NamespacedName]uint32),
clusters: make(map[spec.NamespacedName]*cluster.Cluster), clusters: make(map[spec.NamespacedName]*cluster.Cluster),

View File

@ -4,7 +4,7 @@ import (
"testing" "testing"
"github.com/zalando/postgres-operator/pkg/spec" "github.com/zalando/postgres-operator/pkg/spec"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
@ -13,10 +13,10 @@ const (
readyValue = "ready" readyValue = "ready"
) )
func initializeController() *Controller { func newNodeTestController() *Controller {
var c = NewController(&spec.ControllerConfig{}) var controller = NewController(&spec.ControllerConfig{}, "node-test")
c.opConfig.NodeReadinessLabel = map[string]string{readyLabel: readyValue} controller.opConfig.NodeReadinessLabel = map[string]string{readyLabel: readyValue}
return c return controller
} }
func makeNode(labels map[string]string, isSchedulable bool) *v1.Node { func makeNode(labels map[string]string, isSchedulable bool) *v1.Node {
@ -31,7 +31,7 @@ func makeNode(labels map[string]string, isSchedulable bool) *v1.Node {
} }
} }
var c = initializeController() var nodeTestController = newNodeTestController()
func TestNodeIsReady(t *testing.T) { func TestNodeIsReady(t *testing.T) {
testName := "TestNodeIsReady" testName := "TestNodeIsReady"
@ -57,7 +57,7 @@ func TestNodeIsReady(t *testing.T) {
}, },
} }
for _, tt := range testTable { for _, tt := range testTable {
if isReady := c.nodeIsReady(tt.in); isReady != tt.out { if isReady := nodeTestController.nodeIsReady(tt.in); isReady != tt.out {
t.Errorf("%s: expected response %t doesn't match the actual %t for the node %#v", t.Errorf("%s: expected response %t doesn't match the actual %t for the node %#v",
testName, tt.out, isReady, tt.in) testName, tt.out, isReady, tt.in)
} }

View File

@ -1,10 +1,12 @@
package controller package controller
import ( import (
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
"github.com/zalando/postgres-operator/pkg/spec"
"reflect" "reflect"
"testing" "testing"
acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1"
"github.com/zalando/postgres-operator/pkg/spec"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
var ( var (
@ -12,9 +14,55 @@ var (
False = false False = false
) )
func TestMergeDeprecatedPostgreSQLSpecParameters(t *testing.T) { func newPostgresqlTestController() *Controller {
c := NewController(&spec.ControllerConfig{}) controller := NewController(&spec.ControllerConfig{}, "postgresql-test")
return controller
}
var postgresqlTestController = newPostgresqlTestController()
func TestControllerOwnershipOnPostgresql(t *testing.T) {
tests := []struct {
name string
pg *acidv1.Postgresql
owned bool
error string
}{
{
"Postgres cluster with defined ownership of mocked controller",
&acidv1.Postgresql{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{"acid.zalan.do/controller": "postgresql-test"},
},
},
True,
"Postgres cluster should be owned by operator, but controller says no",
},
{
"Postgres cluster with defined ownership of another controller",
&acidv1.Postgresql{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{"acid.zalan.do/controller": "stups-test"},
},
},
False,
"Postgres cluster should be owned by another operator, but controller say yes",
},
{
"Test Postgres cluster without defined ownership",
&acidv1.Postgresql{},
False,
"Postgres cluster should be owned by operator with empty controller ID, but controller says yes",
},
}
for _, tt := range tests {
if postgresqlTestController.hasOwnership(tt.pg) != tt.owned {
t.Errorf("%s: %v", tt.name, tt.error)
}
}
}
func TestMergeDeprecatedPostgreSQLSpecParameters(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
in *acidv1.PostgresSpec in *acidv1.PostgresSpec
@ -36,7 +84,7 @@ func TestMergeDeprecatedPostgreSQLSpecParameters(t *testing.T) {
}, },
} }
for _, tt := range tests { for _, tt := range tests {
result := c.mergeDeprecatedPostgreSQLSpecParameters(tt.in) result := postgresqlTestController.mergeDeprecatedPostgreSQLSpecParameters(tt.in)
if !reflect.DeepEqual(result, tt.out) { if !reflect.DeepEqual(result, tt.out) {
t.Errorf("%s: %v", tt.name, tt.error) t.Errorf("%s: %v", tt.name, tt.error)
} }

View File

@ -17,8 +17,8 @@ const (
testInfrastructureRolesSecretName = "infrastructureroles-test" testInfrastructureRolesSecretName = "infrastructureroles-test"
) )
func newMockController() *Controller { func newUtilTestController() *Controller {
controller := NewController(&spec.ControllerConfig{}) controller := NewController(&spec.ControllerConfig{}, "util-test")
controller.opConfig.ClusterNameLabel = "cluster-name" controller.opConfig.ClusterNameLabel = "cluster-name"
controller.opConfig.InfrastructureRolesSecretName = controller.opConfig.InfrastructureRolesSecretName =
spec.NamespacedName{Namespace: v1.NamespaceDefault, Name: testInfrastructureRolesSecretName} spec.NamespacedName{Namespace: v1.NamespaceDefault, Name: testInfrastructureRolesSecretName}
@ -27,7 +27,7 @@ func newMockController() *Controller {
return controller return controller
} }
var mockController = newMockController() var utilTestController = newUtilTestController()
func TestPodClusterName(t *testing.T) { func TestPodClusterName(t *testing.T) {
var testTable = []struct { var testTable = []struct {
@ -43,7 +43,7 @@ func TestPodClusterName(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Namespace: v1.NamespaceDefault, Namespace: v1.NamespaceDefault,
Labels: map[string]string{ Labels: map[string]string{
mockController.opConfig.ClusterNameLabel: "testcluster", utilTestController.opConfig.ClusterNameLabel: "testcluster",
}, },
}, },
}, },
@ -51,7 +51,7 @@ func TestPodClusterName(t *testing.T) {
}, },
} }
for _, test := range testTable { for _, test := range testTable {
resp := mockController.podClusterName(test.in) resp := utilTestController.podClusterName(test.in)
if resp != test.expected { if resp != test.expected {
t.Errorf("expected response %v does not match the actual %v", test.expected, resp) t.Errorf("expected response %v does not match the actual %v", test.expected, resp)
} }
@ -73,7 +73,7 @@ func TestClusterWorkerID(t *testing.T) {
}, },
} }
for _, test := range testTable { for _, test := range testTable {
resp := mockController.clusterWorkerID(test.in) resp := utilTestController.clusterWorkerID(test.in)
if resp != test.expected { if resp != test.expected {
t.Errorf("expected response %v does not match the actual %v", test.expected, resp) t.Errorf("expected response %v does not match the actual %v", test.expected, resp)
} }
@ -116,7 +116,7 @@ func TestGetInfrastructureRoles(t *testing.T) {
}, },
} }
for _, test := range testTable { for _, test := range testTable {
roles, err := mockController.getInfrastructureRoles(&test.secretName) roles, err := utilTestController.getInfrastructureRoles(&test.secretName)
if err != test.expectedError { if err != test.expectedError {
if err != nil && test.expectedError != nil && err.Error() == test.expectedError.Error() { if err != nil && test.expectedError != nil && err.Error() == test.expectedError.Error() {
continue continue