96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package controller
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/zalando/postgres-operator/pkg/spec"
 | 
						|
	v1 "k8s.io/api/core/v1"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	readyLabel = "lifecycle-status"
 | 
						|
	readyValue = "ready"
 | 
						|
)
 | 
						|
 | 
						|
func newNodeTestController() *Controller {
 | 
						|
	var controller = NewController(&spec.ControllerConfig{}, "node-test")
 | 
						|
	return controller
 | 
						|
}
 | 
						|
 | 
						|
func makeNode(labels map[string]string, isSchedulable bool) *v1.Node {
 | 
						|
	return &v1.Node{
 | 
						|
		ObjectMeta: metav1.ObjectMeta{
 | 
						|
			Namespace: v1.NamespaceDefault,
 | 
						|
			Labels:    labels,
 | 
						|
		},
 | 
						|
		Spec: v1.NodeSpec{
 | 
						|
			Unschedulable: !isSchedulable,
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
var nodeTestController = newNodeTestController()
 | 
						|
 | 
						|
func TestNodeIsReady(t *testing.T) {
 | 
						|
	testName := "TestNodeIsReady"
 | 
						|
	var testTable = []struct {
 | 
						|
		in             *v1.Node
 | 
						|
		out            bool
 | 
						|
		readinessLabel map[string]string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar"}, true),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{readyLabel: readyValue},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar"}, false),
 | 
						|
			out:            false,
 | 
						|
			readinessLabel: map[string]string{readyLabel: readyValue},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{readyLabel: readyValue}, false),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{readyLabel: readyValue},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar", "master": "true"}, false),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{readyLabel: readyValue},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar", "master": "true"}, false),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{readyLabel: readyValue},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar"}, true),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar"}, false),
 | 
						|
			out:            false,
 | 
						|
			readinessLabel: map[string]string{},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{readyLabel: readyValue}, false),
 | 
						|
			out:            false,
 | 
						|
			readinessLabel: map[string]string{},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			in:             makeNode(map[string]string{"foo": "bar", "master": "true"}, false),
 | 
						|
			out:            true,
 | 
						|
			readinessLabel: map[string]string{},
 | 
						|
		},
 | 
						|
	}
 | 
						|
	for _, tt := range testTable {
 | 
						|
		nodeTestController.opConfig.NodeReadinessLabel = tt.readinessLabel
 | 
						|
		if isReady := nodeTestController.nodeIsReady(tt.in); isReady != tt.out {
 | 
						|
			t.Errorf("%s: expected response %t does not match the actual %t for the node %#v",
 | 
						|
				testName, tt.out, isReady, tt.in)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |