@@ -27,42 +27,71 @@ import (
27
27
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
28
28
)
29
29
30
- func TestNodeLabelPresence (t * testing.T ) {
31
- label := map [string ]string {"foo" : "bar" , "bar" : "foo" }
30
+ func TestValidateNodeLabelArgs (t * testing.T ) {
31
+ // "bar" exists in both present and absent labels therefore validatio should fail.
32
+ args := & runtime.Unknown {Raw : []byte (`{"presentLabels" : ["foo", "bar"], "absentLabels" : ["bar", "baz"]}` )}
33
+ _ , err := New (args , nil )
34
+ if err == nil {
35
+ t .Fatal ("Plugin initialization should fail." )
36
+ }
37
+ }
38
+
39
+ func TestNodeLabelFilter (t * testing.T ) {
40
+ label := map [string ]string {"foo" : "any value" , "bar" : "any value" }
41
+ var pod * v1.Pod
32
42
tests := []struct {
33
43
name string
34
- pod * v1.Pod
35
44
rawArgs string
36
45
res framework.Code
37
46
}{
38
47
{
39
- name : "label does not match, presence true " ,
40
- rawArgs : `{"labels " : ["baz"], "presence" : true }` ,
48
+ name : "present label does not match" ,
49
+ rawArgs : `{"presentLabels " : ["baz"]}` ,
41
50
res : framework .UnschedulableAndUnresolvable ,
42
51
},
43
52
{
44
- name : "label does not match, presence false " ,
45
- rawArgs : `{"labels " : ["baz"], "presence" : false }` ,
53
+ name : "absent label does not match" ,
54
+ rawArgs : `{"absentLabels " : ["baz"]}` ,
46
55
res : framework .Success ,
47
56
},
48
57
{
49
- name : "one label matches, presence true" ,
50
- rawArgs : `{"labels" : ["foo", "baz"], "presence" : true}` ,
58
+ name : "one of two present labels matches" ,
59
+ rawArgs : `{"presentLabels" : ["foo", "baz"]}` ,
60
+ res : framework .UnschedulableAndUnresolvable ,
61
+ },
62
+ {
63
+ name : "one of two absent labels matches" ,
64
+ rawArgs : `{"absentLabels" : ["foo", "baz"]}` ,
65
+ res : framework .UnschedulableAndUnresolvable ,
66
+ },
67
+ {
68
+ name : "all present abels match" ,
69
+ rawArgs : `{"presentLabels" : ["foo", "bar"]}` ,
70
+ res : framework .Success ,
71
+ },
72
+ {
73
+ name : "all absent labels match" ,
74
+ rawArgs : `{"absentLabels" : ["foo", "bar"]}` ,
75
+ res : framework .UnschedulableAndUnresolvable ,
76
+ },
77
+ {
78
+ name : "both present and absent label matches" ,
79
+ rawArgs : `{"presentLabels" : ["foo"], "absentLabels" : ["bar"]}` ,
51
80
res : framework .UnschedulableAndUnresolvable ,
52
81
},
53
82
{
54
- name : "one label matches, presence false " ,
55
- rawArgs : `{"labels " : ["foo", "baz" ], "presence " : false }` ,
83
+ name : "neither present nor absent label matches " ,
84
+ rawArgs : `{"presentLabels " : ["foz" ], "absentLabels " : ["baz"] }` ,
56
85
res : framework .UnschedulableAndUnresolvable ,
57
86
},
58
87
{
59
- name : "all labels match, presence true " ,
60
- rawArgs : `{"labels " : ["foo", "bar" ], "presence " : true }` ,
88
+ name : "present label matches and absent label doesn't match " ,
89
+ rawArgs : `{"presentLabels " : ["foo"], "absentLabels " : ["baz"] }` ,
61
90
res : framework .Success ,
62
91
},
63
92
{
64
- name : "all labels match, presence false " ,
65
- rawArgs : `{"labels " : ["foo", "bar" ], "presence " : false }` ,
93
+ name : "present label doesn't match and absent label matches " ,
94
+ rawArgs : `{"presentLabels " : ["foz" ], "absentLabels " : ["bar"] }` ,
66
95
res : framework .UnschedulableAndUnresolvable ,
67
96
},
68
97
}
@@ -79,7 +108,7 @@ func TestNodeLabelPresence(t *testing.T) {
79
108
t .Fatalf ("Failed to create plugin: %v" , err )
80
109
}
81
110
82
- status := p .(framework.FilterPlugin ).Filter (context .TODO (), nil , test . pod , nodeInfo )
111
+ status := p .(framework.FilterPlugin ).Filter (context .TODO (), nil , pod , nodeInfo )
83
112
if status .Code () != test .res {
84
113
t .Errorf ("Status mismatch. got: %v, want: %v" , status .Code (), test .res )
85
114
}
0 commit comments