1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-26 05:14:13 +01:00
Files
descheduler/pkg/utils/predicates_test.go
2021-05-09 18:08:27 +02:00

338 lines
7.4 KiB
Go

package utils
import (
"reflect"
"testing"
v1 "k8s.io/api/core/v1"
)
func TestUniqueSortTolerations(t *testing.T) {
tests := []struct {
name string
tolerations []v1.Toleration
expectedTolerations []v1.Toleration
}{
{
name: "sort by key",
tolerations: []v1.Toleration{
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key3",
Operator: v1.TolerationOpEqual,
Value: "value3",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
},
expectedTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key3",
Operator: v1.TolerationOpEqual,
Value: "value3",
Effect: v1.TaintEffectNoSchedule,
},
},
},
{
name: "sort by value",
tolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value3",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
},
expectedTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value3",
Effect: v1.TaintEffectNoSchedule,
},
},
},
{
name: "sort by effect",
tolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoExecute,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectPreferNoSchedule,
},
},
expectedTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoExecute,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectPreferNoSchedule,
},
},
},
{
name: "sort unique",
tolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
expectedTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
resultTolerations := uniqueSortTolerations(test.tolerations)
if !reflect.DeepEqual(resultTolerations, test.expectedTolerations) {
t.Errorf("tolerations not sorted as expected, \n\tgot: %#v, \n\texpected: %#v", resultTolerations, test.expectedTolerations)
}
})
}
}
func TestTolerationsEqual(t *testing.T) {
tests := []struct {
name string
leftTolerations, rightTolerations []v1.Toleration
equal bool
}{
{
name: "identical lists",
leftTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
rightTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
equal: true,
},
{
name: "equal lists",
leftTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
rightTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
equal: true,
},
{
name: "non-equal lists",
leftTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoSchedule,
},
},
rightTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoExecute,
},
},
equal: false,
},
{
name: "different sizes lists",
leftTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
},
rightTolerations: []v1.Toleration{
{
Key: "key1",
Operator: v1.TolerationOpEqual,
Value: "value1",
Effect: v1.TaintEffectNoSchedule,
},
{
Key: "key2",
Operator: v1.TolerationOpEqual,
Value: "value2",
Effect: v1.TaintEffectNoExecute,
},
},
equal: false,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
equal := TolerationsEqual(test.leftTolerations, test.rightTolerations)
if equal != test.equal {
t.Errorf("TolerationsEqual expected to be %v, got %v", test.equal, equal)
}
})
}
}