mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #91734 from nodo/pod-deleted-unschedulable-pod-integration-tests
Add test case for a pod becoming schedulable when another pod is deleted
This commit is contained in:
commit
4dfa0912a0
@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
@ -1036,16 +1037,16 @@ var (
|
|||||||
func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
init func(kubernetes.Interface) error
|
init func(kubernetes.Interface, string) error
|
||||||
pod *pausePodConfig
|
pod *pausePodConfig
|
||||||
update func(kubernetes.Interface) error
|
update func(kubernetes.Interface, string) error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "node gets added",
|
name: "node gets added",
|
||||||
pod: &pausePodConfig{
|
pod: &pausePodConfig{
|
||||||
Name: "pod-1",
|
Name: "pod-1",
|
||||||
},
|
},
|
||||||
update: func(cs kubernetes.Interface) error {
|
update: func(cs kubernetes.Interface, _ string) error {
|
||||||
_, err := createNode(cs, "node-added", nil)
|
_, err := createNode(cs, "node-added", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot create node: %v", err)
|
return fmt.Errorf("cannot create node: %v", err)
|
||||||
@ -1055,7 +1056,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "node gets taint removed",
|
name: "node gets taint removed",
|
||||||
init: func(cs kubernetes.Interface) error {
|
init: func(cs kubernetes.Interface, _ string) error {
|
||||||
node, err := createNode(cs, "node-tainted", nil)
|
node, err := createNode(cs, "node-tainted", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot create node: %v", err)
|
return fmt.Errorf("cannot create node: %v", err)
|
||||||
@ -1069,7 +1070,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
|||||||
pod: &pausePodConfig{
|
pod: &pausePodConfig{
|
||||||
Name: "pod-1",
|
Name: "pod-1",
|
||||||
},
|
},
|
||||||
update: func(cs kubernetes.Interface) error {
|
update: func(cs kubernetes.Interface, _ string) error {
|
||||||
taint := v1.Taint{Key: "test", Value: "test", Effect: v1.TaintEffectNoSchedule}
|
taint := v1.Taint{Key: "test", Value: "test", Effect: v1.TaintEffectNoSchedule}
|
||||||
if err := testutils.RemoveTaintOffNode(cs, "node-tainted", taint); err != nil {
|
if err := testutils.RemoveTaintOffNode(cs, "node-tainted", taint); err != nil {
|
||||||
return fmt.Errorf("cannot remove taint off node: %v", err)
|
return fmt.Errorf("cannot remove taint off node: %v", err)
|
||||||
@ -1077,6 +1078,32 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
|||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "other pod gets deleted",
|
||||||
|
init: func(cs kubernetes.Interface, ns string) error {
|
||||||
|
nodeResources := &v1.ResourceList{
|
||||||
|
v1.ResourcePods: *resource.NewQuantity(1, resource.DecimalSI),
|
||||||
|
}
|
||||||
|
_, err := createNode(cs, "node-scheduler-integration-test", nodeResources)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot create node: %v", err)
|
||||||
|
}
|
||||||
|
_, err = createPausePod(cs, initPausePod(&pausePodConfig{Name: "pod-to-be-deleted", Namespace: ns}))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot create pod: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
pod: &pausePodConfig{
|
||||||
|
Name: "pod-1",
|
||||||
|
},
|
||||||
|
update: func(cs kubernetes.Interface, ns string) error {
|
||||||
|
if err := deletePod(cs, "pod-to-be-deleted", ns); err != nil {
|
||||||
|
return fmt.Errorf("cannot delete pod: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
},
|
||||||
// TODO(#91111): Add more test cases.
|
// TODO(#91111): Add more test cases.
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
@ -1085,7 +1112,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
|||||||
defer testutils.CleanupTest(t, testCtx)
|
defer testutils.CleanupTest(t, testCtx)
|
||||||
|
|
||||||
if tt.init != nil {
|
if tt.init != nil {
|
||||||
if err := tt.init(testCtx.ClientSet); err != nil {
|
if err := tt.init(testCtx.ClientSet, testCtx.NS.Name); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1097,7 +1124,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
|
|||||||
if err := waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
if err := waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
||||||
t.Errorf("Pod %v got scheduled: %v", pod.Name, err)
|
t.Errorf("Pod %v got scheduled: %v", pod.Name, err)
|
||||||
}
|
}
|
||||||
if err := tt.update(testCtx.ClientSet); err != nil {
|
if err := tt.update(testCtx.ClientSet, testCtx.NS.Name); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if err := testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
if err := testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user