mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-26 05:14:13 +01:00
338 lines
7.4 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|