add unit test
This commit is contained in:
		
							parent
							
								
									9390ae3630
								
							
						
					
					
						commit
						03f7fc0a92
					
				|  | @ -77,7 +77,7 @@ func main() { | |||
| 		log.Fatalf("couldn't get REST config: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	c := controller.NewController(&config) | ||||
| 	c := controller.NewController(&config, "") | ||||
| 
 | ||||
| 	c.Run(stop, wg) | ||||
| 
 | ||||
|  |  | |||
|  | @ -63,14 +63,14 @@ type Controller struct { | |||
| } | ||||
| 
 | ||||
| // NewController creates a new controller
 | ||||
| func NewController(controllerConfig *spec.ControllerConfig) *Controller { | ||||
| func NewController(controllerConfig *spec.ControllerConfig, controllerId string) *Controller { | ||||
| 	logger := logrus.New() | ||||
| 
 | ||||
| 	c := &Controller{ | ||||
| 		config:           *controllerConfig, | ||||
| 		opConfig:         &config.Config{}, | ||||
| 		logger:           logger.WithField("pkg", "controller"), | ||||
| 		controllerID:     os.Getenv("CONTROLLER_ID"), | ||||
| 		controllerID:     controllerId, | ||||
| 		curWorkerCluster: sync.Map{}, | ||||
| 		clusterWorkers:   make(map[spec.NamespacedName]uint32), | ||||
| 		clusters:         make(map[spec.NamespacedName]*cluster.Cluster), | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import ( | |||
| 	"testing" | ||||
| 
 | ||||
| 	"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" | ||||
| ) | ||||
| 
 | ||||
|  | @ -13,10 +13,10 @@ const ( | |||
| 	readyValue = "ready" | ||||
| ) | ||||
| 
 | ||||
| func initializeController() *Controller { | ||||
| 	var c = NewController(&spec.ControllerConfig{}) | ||||
| 	c.opConfig.NodeReadinessLabel = map[string]string{readyLabel: readyValue} | ||||
| 	return c | ||||
| func newNodeTestController() *Controller { | ||||
| 	var controller = NewController(&spec.ControllerConfig{}, "node-test") | ||||
| 	controller.opConfig.NodeReadinessLabel = map[string]string{readyLabel: readyValue} | ||||
| 	return controller | ||||
| } | ||||
| 
 | ||||
| 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) { | ||||
| 	testName := "TestNodeIsReady" | ||||
|  | @ -57,7 +57,7 @@ func TestNodeIsReady(t *testing.T) { | |||
| 		}, | ||||
| 	} | ||||
| 	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", | ||||
| 				testName, tt.out, isReady, tt.in) | ||||
| 		} | ||||
|  |  | |||
|  | @ -1,10 +1,12 @@ | |||
| package controller | ||||
| 
 | ||||
| import ( | ||||
| 	acidv1 "github.com/zalando/postgres-operator/pkg/apis/acid.zalan.do/v1" | ||||
| 	"github.com/zalando/postgres-operator/pkg/spec" | ||||
| 	"reflect" | ||||
| 	"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 ( | ||||
|  | @ -12,9 +14,55 @@ var ( | |||
| 	False = false | ||||
| ) | ||||
| 
 | ||||
| func TestMergeDeprecatedPostgreSQLSpecParameters(t *testing.T) { | ||||
| 	c := NewController(&spec.ControllerConfig{}) | ||||
| func newPostgresqlTestController() *Controller { | ||||
| 	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 { | ||||
| 		name  string | ||||
| 		in    *acidv1.PostgresSpec | ||||
|  | @ -36,7 +84,7 @@ func TestMergeDeprecatedPostgreSQLSpecParameters(t *testing.T) { | |||
| 		}, | ||||
| 	} | ||||
| 	for _, tt := range tests { | ||||
| 		result := c.mergeDeprecatedPostgreSQLSpecParameters(tt.in) | ||||
| 		result := postgresqlTestController.mergeDeprecatedPostgreSQLSpecParameters(tt.in) | ||||
| 		if !reflect.DeepEqual(result, tt.out) { | ||||
| 			t.Errorf("%s: %v", tt.name, tt.error) | ||||
| 		} | ||||
|  |  | |||
|  | @ -17,8 +17,8 @@ const ( | |||
| 	testInfrastructureRolesSecretName = "infrastructureroles-test" | ||||
| ) | ||||
| 
 | ||||
| func newMockController() *Controller { | ||||
| 	controller := NewController(&spec.ControllerConfig{}) | ||||
| func newUtilTestController() *Controller { | ||||
| 	controller := NewController(&spec.ControllerConfig{}, "util-test") | ||||
| 	controller.opConfig.ClusterNameLabel = "cluster-name" | ||||
| 	controller.opConfig.InfrastructureRolesSecretName = | ||||
| 		spec.NamespacedName{Namespace: v1.NamespaceDefault, Name: testInfrastructureRolesSecretName} | ||||
|  | @ -27,7 +27,7 @@ func newMockController() *Controller { | |||
| 	return controller | ||||
| } | ||||
| 
 | ||||
| var mockController = newMockController() | ||||
| var utilTestController = newUtilTestController() | ||||
| 
 | ||||
| func TestPodClusterName(t *testing.T) { | ||||
| 	var testTable = []struct { | ||||
|  | @ -43,7 +43,7 @@ func TestPodClusterName(t *testing.T) { | |||
| 				ObjectMeta: metav1.ObjectMeta{ | ||||
| 					Namespace: v1.NamespaceDefault, | ||||
| 					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 { | ||||
| 		resp := mockController.podClusterName(test.in) | ||||
| 		resp := utilTestController.podClusterName(test.in) | ||||
| 		if resp != test.expected { | ||||
| 			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 { | ||||
| 		resp := mockController.clusterWorkerID(test.in) | ||||
| 		resp := utilTestController.clusterWorkerID(test.in) | ||||
| 		if resp != test.expected { | ||||
| 			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 { | ||||
| 		roles, err := mockController.getInfrastructureRoles(&test.secretName) | ||||
| 		roles, err := utilTestController.getInfrastructureRoles(&test.secretName) | ||||
| 		if err != test.expectedError { | ||||
| 			if err != nil && test.expectedError != nil && err.Error() == test.expectedError.Error() { | ||||
| 				continue | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue