Skip to content

Commit ff1d6b3

Browse files
authored
Merge pull request kubernetes#92514 from nodo/scheduler-integration-test-cleanup
Use NodeWrapper to directly initialize nodes with labels
2 parents c5941e2 + 2e1042f commit ff1d6b3

File tree

9 files changed

+132
-175
lines changed

9 files changed

+132
-175
lines changed

pkg/scheduler/testing/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ go_library(
1919
"//pkg/scheduler/framework/v1alpha1:go_default_library",
2020
"//pkg/scheduler/util:go_default_library",
2121
"//staging/src/k8s.io/api/core/v1:go_default_library",
22+
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
2223
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
2324
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
2425
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",

pkg/scheduler/testing/wrappers.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ package testing
1919
import (
2020
"fmt"
2121

22-
"k8s.io/api/core/v1"
22+
v1 "k8s.io/api/core/v1"
23+
"k8s.io/apimachinery/pkg/api/resource"
2324
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2425
"k8s.io/apimachinery/pkg/types"
2526
)
@@ -362,7 +363,8 @@ type NodeWrapper struct{ v1.Node }
362363

363364
// MakeNode creates a Node wrapper.
364365
func MakeNode() *NodeWrapper {
365-
return &NodeWrapper{v1.Node{}}
366+
w := &NodeWrapper{v1.Node{}}
367+
return w.Capacity(nil)
366368
}
367369

368370
// Obj returns the inner Node.
@@ -390,3 +392,28 @@ func (n *NodeWrapper) Label(k, v string) *NodeWrapper {
390392
n.Labels[k] = v
391393
return n
392394
}
395+
396+
// Capacity sets the capacity and the allocatable resources of the inner node.
397+
// Each entry in `resources` corresponds to a resource name and its quantity.
398+
// By default, the capacity and allocatable number of pods are set to 32.
399+
func (n *NodeWrapper) Capacity(resources map[v1.ResourceName]string) *NodeWrapper {
400+
res := v1.ResourceList{
401+
v1.ResourcePods: resource.MustParse("32"),
402+
}
403+
for name, value := range resources {
404+
res[name] = resource.MustParse(value)
405+
}
406+
n.Status.Capacity, n.Status.Allocatable = res, res
407+
return n
408+
}
409+
410+
// Images sets the images of the inner node. Each entry in `images` corresponds
411+
// to an image name and its size in bytes.
412+
func (n *NodeWrapper) Images(images map[string]int64) *NodeWrapper {
413+
var containerImages []v1.ContainerImage
414+
for name, size := range images {
415+
containerImages = append(containerImages, v1.ContainerImage{Names: []string{name}, SizeBytes: size})
416+
}
417+
n.Status.Images = containerImages
418+
return n
419+
}

test/integration/scheduler/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ go_library(
8686
"//pkg/api/v1/pod:go_default_library",
8787
"//pkg/controller/disruption:go_default_library",
8888
"//pkg/scheduler:go_default_library",
89+
"//pkg/scheduler/testing:go_default_library",
8990
"//staging/src/k8s.io/api/core/v1:go_default_library",
9091
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
9192
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
92-
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
9393
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
9494
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
9595
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",

test/integration/scheduler/framework_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"testing"
2323
"time"
2424

25-
"k8s.io/api/core/v1"
25+
v1 "k8s.io/api/core/v1"
2626
"k8s.io/apimachinery/pkg/api/resource"
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
"k8s.io/apimachinery/pkg/runtime"
@@ -33,6 +33,7 @@ import (
3333
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder"
3434
frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime"
3535
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
36+
st "k8s.io/kubernetes/pkg/scheduler/testing"
3637
testutils "k8s.io/kubernetes/test/integration/util"
3738
)
3839

@@ -1130,7 +1131,7 @@ func TestBindPlugin(t *testing.T) {
11301131
defer testutils.CleanupTest(t, testCtx)
11311132

11321133
// Add a few nodes.
1133-
_, err := createNodes(testCtx.ClientSet, "test-node", nil, 2)
1134+
_, err := createNodes(testCtx.ClientSet, "test-node", st.MakeNode(), 2)
11341135
if err != nil {
11351136
t.Fatalf("Cannot create nodes: %v", err)
11361137
}
@@ -1776,12 +1777,12 @@ func TestPreemptWithPermitPlugin(t *testing.T) {
17761777
defer testutils.CleanupTest(t, testCtx)
17771778

17781779
// Add one node.
1779-
nodeRes := &v1.ResourceList{
1780-
v1.ResourcePods: *resource.NewQuantity(32, resource.DecimalSI),
1781-
v1.ResourceCPU: *resource.NewMilliQuantity(500, resource.DecimalSI),
1782-
v1.ResourceMemory: *resource.NewQuantity(500, resource.DecimalSI),
1780+
nodeRes := map[v1.ResourceName]string{
1781+
v1.ResourcePods: "32",
1782+
v1.ResourceCPU: "500m",
1783+
v1.ResourceMemory: "500",
17831784
}
1784-
_, err := createNodes(testCtx.ClientSet, "test-node", nodeRes, 1)
1785+
_, err := createNodes(testCtx.ClientSet, "test-node", st.MakeNode().Capacity(nodeRes), 1)
17851786
if err != nil {
17861787
t.Fatalf("Cannot create nodes: %v", err)
17871788
}
@@ -1841,7 +1842,7 @@ func initTestSchedulerForFrameworkTest(t *testing.T, testCtx *testutils.TestCont
18411842
go testCtx.Scheduler.Run(testCtx.Ctx)
18421843

18431844
if nodeCount > 0 {
1844-
_, err := createNodes(testCtx.ClientSet, "test-node", nil, nodeCount)
1845+
_, err := createNodes(testCtx.ClientSet, "test-node", st.MakeNode(), nodeCount)
18451846
if err != nil {
18461847
t.Fatalf("Cannot create nodes: %v", err)
18471848
}

test/integration/scheduler/predicates_test.go

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
v1 "k8s.io/api/core/v1"
2626
apierrors "k8s.io/apimachinery/pkg/api/errors"
27-
"k8s.io/apimachinery/pkg/api/resource"
2827
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2928
"k8s.io/apimachinery/pkg/util/wait"
3029
"k8s.io/client-go/kubernetes"
@@ -43,25 +42,12 @@ const pollInterval = 100 * time.Millisecond
4342
func TestInterPodAffinity(t *testing.T) {
4443
testCtx := initTest(t, "inter-pod-affinity")
4544
defer testutils.CleanupTest(t, testCtx)
46-
// Add a few nodes.
47-
nodes, err := createNodes(testCtx.ClientSet, "testnode", nil, 2)
45+
46+
// Add a few nodes with labels
47+
nodes, err := createNodes(testCtx.ClientSet, "testnode", st.MakeNode().Label("region", "r1").Label("zone", "z11"), 2)
4848
if err != nil {
4949
t.Fatalf("Cannot create nodes: %v", err)
5050
}
51-
// Add labels to the nodes.
52-
labels1 := map[string]string{
53-
"region": "r1",
54-
"zone": "z11",
55-
}
56-
for _, node := range nodes {
57-
// TODO(nodo): Use PodWrapper to directly initialize node with labels.
58-
if err = utils.AddLabelsToNode(testCtx.ClientSet, node.Name, labels1); err != nil {
59-
t.Fatalf("Cannot add labels to node: %v", err)
60-
}
61-
if err = waitForNodeLabels(testCtx.ClientSet, node.Name, labels1); err != nil {
62-
t.Fatalf("Adding labels to node didn't succeed: %v", err)
63-
}
64-
}
6551

6652
cs := testCtx.ClientSet
6753
podLabel := map[string]string{"service": "securityscan"}
@@ -886,7 +872,7 @@ func TestEvenPodsSpreadPredicate(t *testing.T) {
886872
ns := testCtx.NS.Name
887873
defer testutils.CleanupTest(t, testCtx)
888874
// Add 4 nodes.
889-
nodes, err := createNodes(cs, "node", nil, 4)
875+
nodes, err := createNodes(cs, "node", st.MakeNode(), 4)
890876
if err != nil {
891877
t.Fatalf("Cannot create nodes: %v", err)
892878
}
@@ -896,7 +882,6 @@ func TestEvenPodsSpreadPredicate(t *testing.T) {
896882
"zone": fmt.Sprintf("zone-%d", i/2),
897883
"node": node.Name,
898884
}
899-
// TODO(nodo): Use PodWrapper to directly initialize node with labels.
900885
if err = utils.AddLabelsToNode(cs, node.Name, labels); err != nil {
901886
t.Fatalf("Cannot add labels to node: %v", err)
902887
}
@@ -1051,7 +1036,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
10511036
Name: "pod-1",
10521037
},
10531038
update: func(cs kubernetes.Interface, _ string) error {
1054-
_, err := createNode(cs, "node-added", nil)
1039+
_, err := createNode(cs, st.MakeNode().Name("node-added").Obj())
10551040
if err != nil {
10561041
return fmt.Errorf("cannot create node: %v", err)
10571042
}
@@ -1061,7 +1046,7 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
10611046
{
10621047
name: "node gets taint removed",
10631048
init: func(cs kubernetes.Interface, _ string) error {
1064-
node, err := createNode(cs, "node-tainted", nil)
1049+
node, err := createNode(cs, st.MakeNode().Name("node-tainted").Obj())
10651050
if err != nil {
10661051
return fmt.Errorf("cannot create node: %v", err)
10671052
}
@@ -1085,10 +1070,8 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
10851070
{
10861071
name: "other pod gets deleted",
10871072
init: func(cs kubernetes.Interface, ns string) error {
1088-
nodeResources := &v1.ResourceList{
1089-
v1.ResourcePods: *resource.NewQuantity(1, resource.DecimalSI),
1090-
}
1091-
_, err := createNode(cs, "node-scheduler-integration-test", nodeResources)
1073+
nodeObject := st.MakeNode().Name("node-scheduler-integration-test").Capacity(map[v1.ResourceName]string{v1.ResourcePods: "1"}).Obj()
1074+
_, err := createNode(cs, nodeObject)
10921075
if err != nil {
10931076
return fmt.Errorf("cannot create node: %v", err)
10941077
}
@@ -1111,14 +1094,10 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
11111094
{
11121095
name: "pod with pod-affinity gets added",
11131096
init: func(cs kubernetes.Interface, _ string) error {
1114-
node, err := createNode(cs, "node-1", nil)
1097+
_, err := createNode(cs, st.MakeNode().Name("node-1").Label("region", "test").Obj())
11151098
if err != nil {
11161099
return fmt.Errorf("cannot create node: %v", err)
11171100
}
1118-
// TODO(nodo): Use PodWrapper to directly initialize node with labels.
1119-
if err := utils.AddLabelsToNode(cs, node.Name, map[string]string{"region": "test"}); err != nil {
1120-
return fmt.Errorf("cannot add labels to node: %v", err)
1121-
}
11221101
return nil
11231102
},
11241103
pod: &pausePodConfig{
@@ -1155,14 +1134,10 @@ func TestUnschedulablePodBecomesSchedulable(t *testing.T) {
11551134
{
11561135
name: "scheduled pod gets updated to match affinity",
11571136
init: func(cs kubernetes.Interface, ns string) error {
1158-
node, err := createNode(cs, "node-1", nil)
1137+
_, err := createNode(cs, st.MakeNode().Name("node-1").Label("region", "test").Obj())
11591138
if err != nil {
11601139
return fmt.Errorf("cannot create node: %v", err)
11611140
}
1162-
// TODO(nodo): Use PodWrapper to directly initialize node with labels.
1163-
if err := utils.AddLabelsToNode(cs, node.Name, map[string]string{"region": "test"}); err != nil {
1164-
return fmt.Errorf("cannot add labels to node: %v", err)
1165-
}
11661141
if _, err := createPausePod(cs, initPausePod(&pausePodConfig{Name: "pod-to-be-updated", Namespace: ns})); err != nil {
11671142
return fmt.Errorf("cannot create pod: %v", err)
11681143
}

0 commit comments

Comments
 (0)