Update go dependencies and cleanup deprecated packages
This commit is contained in:
parent
03a1e20fde
commit
44fd79d061
1099 changed files with 75691 additions and 31913 deletions
8
vendor/k8s.io/kubernetes/pkg/util/taints/BUILD
generated
vendored
8
vendor/k8s.io/kubernetes/pkg/util/taints/BUILD
generated
vendored
|
|
@ -9,9 +9,10 @@ load(
|
|||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["taints.go"],
|
||||
importpath = "k8s.io/kubernetes/pkg/util/taints",
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/api/helper:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/core/helper:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
|
|
@ -22,9 +23,10 @@ go_library(
|
|||
go_test(
|
||||
name = "go_default_test",
|
||||
srcs = ["taints_test.go"],
|
||||
importpath = "k8s.io/kubernetes/pkg/util/taints",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||
"//vendor/k8s.io/api/core/v1:go_default_library",
|
||||
],
|
||||
|
|
|
|||
47
vendor/k8s.io/kubernetes/pkg/util/taints/taints.go
generated
vendored
47
vendor/k8s.io/kubernetes/pkg/util/taints/taints.go
generated
vendored
|
|
@ -25,8 +25,8 @@ import (
|
|||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apimachinery/pkg/util/validation"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/helper"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
"k8s.io/kubernetes/pkg/apis/core/helper"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -35,7 +35,7 @@ const (
|
|||
UNTAINTED = "untainted"
|
||||
)
|
||||
|
||||
// parseTaint parses a taint from a string. Taint must be off the format '<key>=<value>:<effect>'.
|
||||
// parseTaint parses a taint from a string. Taint must be of the format '<key>=<value>:<effect>'.
|
||||
func parseTaint(st string) (v1.Taint, error) {
|
||||
var taint v1.Taint
|
||||
parts := strings.Split(st, "=")
|
||||
|
|
@ -45,15 +45,14 @@ func parseTaint(st string) (v1.Taint, error) {
|
|||
|
||||
parts2 := strings.Split(parts[1], ":")
|
||||
|
||||
effect := v1.TaintEffect(parts2[1])
|
||||
|
||||
errs := validation.IsValidLabelValue(parts2[0])
|
||||
if len(parts2) != 2 || len(errs) != 0 {
|
||||
return taint, fmt.Errorf("invalid taint spec: %v, %s", st, strings.Join(errs, "; "))
|
||||
}
|
||||
|
||||
if effect != v1.TaintEffectNoSchedule && effect != v1.TaintEffectPreferNoSchedule && effect != v1.TaintEffectNoExecute {
|
||||
return taint, fmt.Errorf("invalid taint spec: %v, unsupported taint effect", st)
|
||||
effect := v1.TaintEffect(parts2[1])
|
||||
if err := validateTaintEffect(effect); err != nil {
|
||||
return taint, err
|
||||
}
|
||||
|
||||
taint.Key = parts[0]
|
||||
|
|
@ -63,6 +62,14 @@ func parseTaint(st string) (v1.Taint, error) {
|
|||
return taint, nil
|
||||
}
|
||||
|
||||
func validateTaintEffect(effect v1.TaintEffect) error {
|
||||
if effect != v1.TaintEffectNoSchedule && effect != v1.TaintEffectPreferNoSchedule && effect != v1.TaintEffectNoExecute {
|
||||
return fmt.Errorf("invalid taint effect: %v, unsupported taint effect", effect)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// NewTaintsVar wraps []api.Taint in a struct that implements flag.Value to allow taints to be
|
||||
// bound to command line flags.
|
||||
func NewTaintsVar(ptr *[]api.Taint) taintsVar {
|
||||
|
|
@ -76,6 +83,10 @@ type taintsVar struct {
|
|||
}
|
||||
|
||||
func (t taintsVar) Set(s string) error {
|
||||
if len(s) == 0 {
|
||||
*t.ptr = nil
|
||||
return nil
|
||||
}
|
||||
sts := strings.Split(s, ",")
|
||||
var taints []api.Taint
|
||||
for _, st := range sts {
|
||||
|
|
@ -91,7 +102,7 @@ func (t taintsVar) Set(s string) error {
|
|||
|
||||
func (t taintsVar) String() string {
|
||||
if len(*t.ptr) == 0 {
|
||||
return "<nil>"
|
||||
return ""
|
||||
}
|
||||
var taints []string
|
||||
for _, taint := range *t.ptr {
|
||||
|
|
@ -134,6 +145,14 @@ func ParseTaints(spec []string) ([]v1.Taint, []v1.Taint, error) {
|
|||
taintKey = parts[0]
|
||||
effect = v1.TaintEffect(parts[1])
|
||||
}
|
||||
|
||||
// If effect is specified, need to validate it.
|
||||
if len(effect) > 0 {
|
||||
err := validateTaintEffect(effect)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
taintsToRemove = append(taintsToRemove, v1.Taint{Key: taintKey, Effect: effect})
|
||||
} else {
|
||||
return nil, nil, fmt.Errorf("unknown taint spec: %v", taintSpec)
|
||||
|
|
@ -238,11 +257,7 @@ func DeleteTaint(taints []v1.Taint, taintToDelete *v1.Taint) ([]v1.Taint, bool)
|
|||
// RemoveTaint tries to remove a taint from annotations list. Returns a new copy of updated Node and true if something was updated
|
||||
// false otherwise.
|
||||
func RemoveTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) {
|
||||
objCopy, err := api.Scheme.DeepCopy(node)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
newNode := objCopy.(*v1.Node)
|
||||
newNode := node.DeepCopy()
|
||||
nodeTaints := newNode.Spec.Taints
|
||||
if len(nodeTaints) == 0 {
|
||||
return newNode, false, nil
|
||||
|
|
@ -260,11 +275,7 @@ func RemoveTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) {
|
|||
// AddOrUpdateTaint tries to add a taint to annotations list. Returns a new copy of updated Node and true if something was updated
|
||||
// false otherwise.
|
||||
func AddOrUpdateTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) {
|
||||
objCopy, err := api.Scheme.DeepCopy(node)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
newNode := objCopy.(*v1.Node)
|
||||
newNode := node.DeepCopy()
|
||||
nodeTaints := newNode.Spec.Taints
|
||||
|
||||
var newTaints []v1.Taint
|
||||
|
|
|
|||
576
vendor/k8s.io/kubernetes/pkg/util/taints/taints_test.go
generated
vendored
576
vendor/k8s.io/kubernetes/pkg/util/taints/taints_test.go
generated
vendored
|
|
@ -22,7 +22,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
|
@ -111,3 +111,577 @@ func TestAddOrUpdateTaint(t *testing.T) {
|
|||
newNode, result, err = AddOrUpdateTaint(node, taint)
|
||||
checkResult("Add Duplicate Taint", newNode, taint, result, false, err)
|
||||
}
|
||||
|
||||
func TestTaintExists(t *testing.T) {
|
||||
testingTaints := []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Value: "bar_1",
|
||||
Effect: v1.TaintEffectNoExecute,
|
||||
},
|
||||
{
|
||||
Key: "foo_2",
|
||||
Value: "bar_2",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
taintToFind *v1.Taint
|
||||
expectedResult bool
|
||||
}{
|
||||
{
|
||||
name: "taint exists",
|
||||
taintToFind: &v1.Taint{Key: "foo_1", Value: "bar_1", Effect: v1.TaintEffectNoExecute},
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "different key",
|
||||
taintToFind: &v1.Taint{Key: "no_such_key", Value: "bar_1", Effect: v1.TaintEffectNoExecute},
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "different effect",
|
||||
taintToFind: &v1.Taint{Key: "foo_1", Value: "bar_1", Effect: v1.TaintEffectNoSchedule},
|
||||
expectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
result := TaintExists(testingTaints, c.taintToFind)
|
||||
|
||||
if result != c.expectedResult {
|
||||
t.Errorf("[%s] unexpected results: %v", c.name, result)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveTaint(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
node *v1.Node
|
||||
taintToRemove *v1.Taint
|
||||
expectedTaints []v1.Taint
|
||||
expectedResult bool
|
||||
}{
|
||||
{
|
||||
name: "remove taint unsuccessfully",
|
||||
node: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
taintToRemove: &v1.Taint{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "remove taint successfully",
|
||||
node: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
taintToRemove: &v1.Taint{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "remove taint from node with no taint",
|
||||
node: &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Taints: []v1.Taint{},
|
||||
},
|
||||
},
|
||||
taintToRemove: &v1.Taint{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
newNode, result, err := RemoveTaint(c.node, c.taintToRemove)
|
||||
if err != nil {
|
||||
t.Errorf("[%s] should not raise error but got: %v", c.name, err)
|
||||
}
|
||||
if result != c.expectedResult {
|
||||
t.Errorf("[%s] should return %t, but got: %t", c.name, c.expectedResult, result)
|
||||
}
|
||||
if !reflect.DeepEqual(newNode.Spec.Taints, c.expectedTaints) {
|
||||
t.Errorf("[%s] the new node object should have taints %v, but got: %v", c.name, c.expectedTaints, newNode.Spec.Taints)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteTaint(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
taints []v1.Taint
|
||||
taintToDelete *v1.Taint
|
||||
expectedTaints []v1.Taint
|
||||
expectedResult bool
|
||||
}{
|
||||
{
|
||||
name: "delete taint with different name",
|
||||
taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintToDelete: &v1.Taint{Key: "foo_1", Effect: v1.TaintEffectNoSchedule},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "delete taint with different effect",
|
||||
taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintToDelete: &v1.Taint{Key: "foo", Effect: v1.TaintEffectNoExecute},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "delete taint successfully",
|
||||
taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintToDelete: &v1.Taint{Key: "foo", Effect: v1.TaintEffectNoSchedule},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "delete taint from empty taint array",
|
||||
taints: []v1.Taint{},
|
||||
taintToDelete: &v1.Taint{Key: "foo", Effect: v1.TaintEffectNoSchedule},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
taints, result := DeleteTaint(c.taints, c.taintToDelete)
|
||||
if result != c.expectedResult {
|
||||
t.Errorf("[%s] should return %t, but got: %t", c.name, c.expectedResult, result)
|
||||
}
|
||||
if !reflect.DeepEqual(taints, c.expectedTaints) {
|
||||
t.Errorf("[%s] the result taints should be %v, but got: %v", c.name, c.expectedTaints, taints)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteTaintByKey(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
taints []v1.Taint
|
||||
taintKey string
|
||||
expectedTaints []v1.Taint
|
||||
expectedResult bool
|
||||
}{
|
||||
{
|
||||
name: "delete taint unsuccessfully",
|
||||
taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintKey: "foo_1",
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: false,
|
||||
},
|
||||
{
|
||||
name: "delete taint successfully",
|
||||
taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintKey: "foo",
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: true,
|
||||
},
|
||||
{
|
||||
name: "delete taint from empty taint array",
|
||||
taints: []v1.Taint{},
|
||||
taintKey: "foo",
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedResult: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
taints, result := DeleteTaintsByKey(c.taints, c.taintKey)
|
||||
if result != c.expectedResult {
|
||||
t.Errorf("[%s] should return %t, but got: %t", c.name, c.expectedResult, result)
|
||||
}
|
||||
if !reflect.DeepEqual(c.expectedTaints, taints) {
|
||||
t.Errorf("[%s] the result taints should be %v, but got: %v", c.name, c.expectedTaints, taints)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckIfTaintsAlreadyExists(t *testing.T) {
|
||||
oldTaints := []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "foo_2",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "foo_3",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
taintsToCheck []v1.Taint
|
||||
expectedResult string
|
||||
}{
|
||||
{
|
||||
name: "empty array",
|
||||
taintsToCheck: []v1.Taint{},
|
||||
expectedResult: "",
|
||||
},
|
||||
{
|
||||
name: "no match",
|
||||
taintsToCheck: []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoExecute,
|
||||
},
|
||||
},
|
||||
expectedResult: "",
|
||||
},
|
||||
{
|
||||
name: "match one taint",
|
||||
taintsToCheck: []v1.Taint{
|
||||
{
|
||||
Key: "foo_2",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: "foo_2",
|
||||
},
|
||||
{
|
||||
name: "match two taints",
|
||||
taintsToCheck: []v1.Taint{
|
||||
{
|
||||
Key: "foo_2",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "foo_3",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedResult: "foo_2,foo_3",
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
result := CheckIfTaintsAlreadyExists(oldTaints, c.taintsToCheck)
|
||||
if result != c.expectedResult {
|
||||
t.Errorf("[%s] should return '%s', but got: '%s'", c.name, c.expectedResult, result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestReorganizeTaints(t *testing.T) {
|
||||
node := &v1.Node{
|
||||
Spec: v1.NodeSpec{
|
||||
Taints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
name string
|
||||
overwrite bool
|
||||
taintsToAdd []v1.Taint
|
||||
taintsToDelete []v1.Taint
|
||||
expectedTaints []v1.Taint
|
||||
expectedOperation string
|
||||
expectedErr bool
|
||||
}{
|
||||
{
|
||||
name: "no changes with overwrite is true",
|
||||
overwrite: true,
|
||||
taintsToAdd: []v1.Taint{},
|
||||
taintsToDelete: []v1.Taint{},
|
||||
expectedTaints: node.Spec.Taints,
|
||||
expectedOperation: MODIFIED,
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "no changes with overwrite is false",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{},
|
||||
taintsToDelete: []v1.Taint{},
|
||||
expectedTaints: node.Spec.Taints,
|
||||
expectedOperation: UNTAINTED,
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "add new taint",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoExecute,
|
||||
},
|
||||
},
|
||||
taintsToDelete: []v1.Taint{},
|
||||
expectedTaints: append([]v1.Taint{{Key: "foo_1", Effect: v1.TaintEffectNoExecute}}, node.Spec.Taints...),
|
||||
expectedOperation: TAINTED,
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "delete taint with effect",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{},
|
||||
taintsToDelete: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedOperation: UNTAINTED,
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "delete taint with no effect",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{},
|
||||
taintsToDelete: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
},
|
||||
},
|
||||
expectedTaints: []v1.Taint{},
|
||||
expectedOperation: UNTAINTED,
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "delete non-exist taint",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{},
|
||||
taintsToDelete: []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedTaints: node.Spec.Taints,
|
||||
expectedOperation: UNTAINTED,
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "add new taint and delete old one",
|
||||
overwrite: false,
|
||||
taintsToAdd: []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
taintsToDelete: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo_1",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedOperation: MODIFIED,
|
||||
expectedErr: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
operation, taints, err := ReorganizeTaints(node, c.overwrite, c.taintsToAdd, c.taintsToDelete)
|
||||
if c.expectedErr && err == nil {
|
||||
t.Errorf("[%s] expect to see an error, but did not get one", c.name)
|
||||
} else if !c.expectedErr && err != nil {
|
||||
t.Errorf("[%s] expect not to see an error, but got one: %v", c.name, err)
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(c.expectedTaints, taints) {
|
||||
t.Errorf("[%s] expect to see taint list %#v, but got: %#v", c.name, c.expectedTaints, taints)
|
||||
}
|
||||
|
||||
if c.expectedOperation != operation {
|
||||
t.Errorf("[%s] expect to see operation %s, but got: %s", c.name, c.expectedOperation, operation)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseTaints(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
spec []string
|
||||
expectedTaints []v1.Taint
|
||||
expectedTaintsToRemove []v1.Taint
|
||||
expectedErr bool
|
||||
}{
|
||||
{
|
||||
name: "invalid spec format",
|
||||
spec: []string{"foo=abc"},
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "invalid spec effect for adding taint",
|
||||
spec: []string{"foo=abc:invalid_effect"},
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "invalid spec effect for deleting taint",
|
||||
spec: []string{"foo:invalid_effect-"},
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "add new taints",
|
||||
spec: []string{"foo=abc:NoSchedule", "bar=abc:NoSchedule"},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "abc",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "bar",
|
||||
Value: "abc",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "delete taints",
|
||||
spec: []string{"foo:NoSchedule-", "bar:NoSchedule-"},
|
||||
expectedTaintsToRemove: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedErr: false,
|
||||
},
|
||||
{
|
||||
name: "add taints and delete taints",
|
||||
spec: []string{"foo=abc:NoSchedule", "bar=abc:NoSchedule", "foo:NoSchedule-", "bar:NoSchedule-"},
|
||||
expectedTaints: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Value: "abc",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "bar",
|
||||
Value: "abc",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedTaintsToRemove: []v1.Taint{
|
||||
{
|
||||
Key: "foo",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
{
|
||||
Key: "bar",
|
||||
Effect: v1.TaintEffectNoSchedule,
|
||||
},
|
||||
},
|
||||
expectedErr: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
taints, taintsToRemove, err := ParseTaints(c.spec)
|
||||
if c.expectedErr && err == nil {
|
||||
t.Errorf("[%s] expected error, but got nothing", c.name)
|
||||
}
|
||||
if !c.expectedErr && err != nil {
|
||||
t.Errorf("[%s] expected no error, but got: %v", c.name, err)
|
||||
}
|
||||
if !reflect.DeepEqual(c.expectedTaints, taints) {
|
||||
t.Errorf("[%s] expected returen taints as %v, but got: %v", c.name, c.expectedTaints, taints)
|
||||
}
|
||||
if !reflect.DeepEqual(c.expectedTaintsToRemove, taintsToRemove) {
|
||||
t.Errorf("[%s] expected return taints to be removed as %v, but got: %v", c.name, c.expectedTaintsToRemove, taintsToRemove)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue