RunCordonOrUncordon error if drainer has nil Ctx or Client

Kubernetes-commit: ee02f5ddc42a67166c91e539fe98cc6541db668e
This commit is contained in:
Jack 2021-09-27 14:20:24 -07:00 committed by Kubernetes Publisher
parent f348ed572e
commit 5fb22b2ab8
2 changed files with 75 additions and 0 deletions

View File

@ -49,6 +49,12 @@ func RunNodeDrain(drainer *Helper, nodeName string) error {
// RunCordonOrUncordon demonstrates the canonical way to cordon or uncordon a Node
func RunCordonOrUncordon(drainer *Helper, node *corev1.Node, desired bool) error {
if drainer.Ctx == nil {
return fmt.Errorf("RunCordonOrUncordon error: drainer.Ctx can't be nil")
}
if drainer.Client == nil {
return fmt.Errorf("RunCordonOrUncordon error: drainer.Client can't be nil")
}
// TODO(justinsb): Ensure we have adequate e2e coverage of this function in library consumers
c := NewCordonHelper(node)

69
pkg/drain/default_test.go Normal file
View File

@ -0,0 +1,69 @@
/*
Copyright 2021 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package drain
import (
"context"
"fmt"
"testing"
corev1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes/fake"
)
func TestRunCordonOrUncordon(t *testing.T) {
nilContextError := fmt.Errorf("RunCordonOrUncordon error: drainer.Ctx can't be nil")
nilClientError := fmt.Errorf("RunCordonOrUncordon error: drainer.Client can't be nil")
tests := []struct {
description string
drainer *Helper
node *corev1.Node
desired bool
expectedError *error
}{
{
description: "nil context object",
drainer: &Helper{
Client: fake.NewSimpleClientset(),
},
desired: true,
expectedError: &nilContextError,
},
{
description: "nil client object",
drainer: &Helper{
Ctx: context.TODO(),
},
desired: true,
expectedError: &nilClientError,
},
}
for _, test := range tests {
test := test
t.Run(test.description, func(t *testing.T) {
err := RunCordonOrUncordon(test.drainer, test.node, test.desired)
if test.expectedError == nil {
if err != nil {
t.Fatalf("%s: did not expect error, got err=%s", test.description, err.Error())
}
} else if err.Error() != (*test.expectedError).Error() {
t.Fatalf("%s: the error does not match expected error, got err=%s, expected err=%s", test.description, err, *test.expectedError)
}
})
}
}