github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/clusters/kubernetes/initialize_test.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/caos/orbos/mntr"
     8  	v1 "k8s.io/api/core/v1"
     9  )
    10  
    11  func Test_reconcileTaints(t *testing.T) {
    12  	type args struct {
    13  		node v1.Node
    14  		pool Pool
    15  	}
    16  	someTaintKey := "someKey"
    17  	someTaintEffect := v1.TaintEffectNoSchedule
    18  	someDesiredTaint := Taint{
    19  		Key:    someTaintKey,
    20  		Effect: someTaintEffect,
    21  	}
    22  	someNodeTaint := v1.Taint{
    23  		Key:    someTaintKey,
    24  		Effect: someTaintEffect,
    25  	}
    26  
    27  	node := func(taint ...v1.Taint) v1.Node {
    28  		return v1.Node{Spec: v1.NodeSpec{Taints: append([]v1.Taint{}, taint...)}}
    29  	}
    30  	pool := func(taint ...Taint) Pool {
    31  		taints := Taints(append([]Taint{}, taint...))
    32  		return Pool{Taints: &taints}
    33  	}
    34  
    35  	nodePtr := func(node v1.Node) *v1.Node {
    36  		return &node
    37  	}
    38  
    39  	tests := []struct {
    40  		name string
    41  		args args
    42  		want *v1.Node
    43  	}{
    44  		{
    45  			name: "It should add configured taints",
    46  			args: args{
    47  				node: v1.Node{},
    48  				pool: pool(someDesiredTaint),
    49  			}, want: nodePtr(node(someNodeTaint)),
    50  		},
    51  		{
    52  			name: "It should leave the taints as they are if the taints property is nil",
    53  			args: args{
    54  				node: node(someNodeTaint),
    55  				pool: Pool{},
    56  			}, want: nil,
    57  		},
    58  		{
    59  			name: "It should remove existing taints if the empty slice is passed",
    60  			args: args{
    61  				node: node(someNodeTaint),
    62  				pool: pool(),
    63  			}, want: nodePtr(node()),
    64  		},
    65  	}
    66  	for _, tt := range tests {
    67  		t.Run(tt.name, func(t *testing.T) {
    68  			got := reconcileTaints(tt.args.node, tt.args.pool, mntr.Monitor{})
    69  			if !reflect.DeepEqual(got, tt.want) {
    70  				t.Errorf("reconcileTaints() got = %v, want %v", got, tt.want)
    71  			}
    72  		})
    73  	}
    74  }