...
1
16
17 package cloud
18
19 import (
20 "context"
21 "time"
22
23 v1 "k8s.io/api/core/v1"
24 apierrors "k8s.io/apimachinery/pkg/api/errors"
25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26 clientset "k8s.io/client-go/kubernetes"
27 "k8s.io/kubernetes/test/e2e/feature"
28 "k8s.io/kubernetes/test/e2e/framework"
29 e2enode "k8s.io/kubernetes/test/e2e/framework/node"
30 e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
31 admissionapi "k8s.io/pod-security-admission/api"
32
33 "github.com/onsi/ginkgo/v2"
34 "github.com/onsi/gomega"
35 )
36
37 var _ = SIGDescribe(feature.CloudProvider, framework.WithDisruptive(), "Nodes", func() {
38 f := framework.NewDefaultFramework("cloudprovider")
39 f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged
40 var c clientset.Interface
41
42 ginkgo.BeforeEach(func() {
43
44
45 e2eskipper.SkipUnlessProviderIs("aws", "gce", "gke")
46 c = f.ClientSet
47 })
48
49 ginkgo.It("should be deleted on API server if it doesn't exist in the cloud provider", func(ctx context.Context) {
50 ginkgo.By("deleting a node on the cloud provider")
51
52 nodeToDelete, err := e2enode.GetRandomReadySchedulableNode(ctx, c)
53 framework.ExpectNoError(err)
54
55 origNodes, err := e2enode.GetReadyNodesIncludingTainted(ctx, c)
56 if err != nil {
57 framework.Logf("Unexpected error occurred: %v", err)
58 }
59 framework.ExpectNoErrorWithOffset(0, err)
60
61 framework.Logf("Original number of ready nodes: %d", len(origNodes.Items))
62
63 err = deleteNodeOnCloudProvider(nodeToDelete)
64 if err != nil {
65 framework.Failf("failed to delete node %q, err: %q", nodeToDelete.Name, err)
66 }
67
68 newNodes, err := e2enode.CheckReady(ctx, c, len(origNodes.Items)-1, 5*time.Minute)
69 framework.ExpectNoError(err)
70 gomega.Expect(newNodes).To(gomega.HaveLen(len(origNodes.Items) - 1))
71 _, err = c.CoreV1().Nodes().Get(ctx, nodeToDelete.Name, metav1.GetOptions{})
72 if err == nil {
73 framework.Failf("node %q still exists when it should be deleted", nodeToDelete.Name)
74 } else if !apierrors.IsNotFound(err) {
75 framework.Failf("failed to get node %q err: %q", nodeToDelete.Name, err)
76 }
77
78 })
79 })
80
81
82 func deleteNodeOnCloudProvider(node *v1.Node) error {
83 return framework.TestContext.CloudConfig.Provider.DeleteNode(node)
84 }
85
View as plain text