@@ -29,31 +29,55 @@ import (
2929
3030func TestUpdateCachedPredicateItem (t * testing.T ) {
3131 tests := []struct {
32- name string
33- pod * v1.Pod
34- predicateKey string
35- nodeName string
36- fit bool
37- reasons []algorithm.PredicateFailureReason
38- equivalenceHash uint64
39- expectCacheItem HostPredicate
32+ name string
33+ pod * v1.Pod
34+ predicateKey string
35+ nodeName string
36+ fit bool
37+ reasons []algorithm.PredicateFailureReason
38+ equivalenceHash uint64
39+ expectPredicateMap bool
40+ expectCacheItem HostPredicate
4041 }{
4142 {
42- name : "test 1" ,
43- pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
44- predicateKey : "GeneralPredicates" ,
45- nodeName : "node1" ,
46- fit : true ,
47- equivalenceHash : 123 ,
43+ name : "test 1" ,
44+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
45+ predicateKey : "GeneralPredicates" ,
46+ nodeName : "node1" ,
47+ fit : true ,
48+ equivalenceHash : 123 ,
49+ expectPredicateMap : false ,
4850 expectCacheItem : HostPredicate {
4951 Fit : true ,
5052 },
5153 },
54+ {
55+ name : "test 2" ,
56+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
57+ predicateKey : "GeneralPredicates" ,
58+ nodeName : "node2" ,
59+ fit : false ,
60+ equivalenceHash : 123 ,
61+ expectPredicateMap : true ,
62+ expectCacheItem : HostPredicate {
63+ Fit : false ,
64+ },
65+ },
5266 }
5367 for _ , test := range tests {
5468 // this case does not need to calculate equivalence hash, just pass an empty function
5569 fakeGetEquivalencePodFunc := func (pod * v1.Pod ) interface {} { return nil }
5670 ecache := NewEquivalenceCache (fakeGetEquivalencePodFunc )
71+ if test .expectPredicateMap {
72+ ecache .algorithmCache [test .nodeName ] = newAlgorithmCache ()
73+ predicateItem := HostPredicate {
74+ Fit : true ,
75+ }
76+ ecache .algorithmCache [test .nodeName ].predicatesCache .Add (test .predicateKey ,
77+ PredicateMap {
78+ test .equivalenceHash : predicateItem ,
79+ })
80+ }
5781 ecache .UpdateCachedPredicateItem (test .pod , test .nodeName , test .predicateKey , test .fit , test .reasons , test .equivalenceHash )
5882
5983 value , ok := ecache .algorithmCache [test .nodeName ].predicatesCache .Get (test .predicateKey )
@@ -73,28 +97,82 @@ type predicateItemType struct {
7397 reasons []algorithm.PredicateFailureReason
7498}
7599
76- func TestInvalidateCachedPredicateItem (t * testing.T ) {
100+ func TestCachedPredicateItem (t * testing.T ) {
77101 tests := []struct {
78- name string
79- pod * v1.Pod
80- nodeName string
81- predicateKey string
82- equivalenceHash uint64
83- cachedItem predicateItemType
84- expectedInvalid bool
85- expectedPredicateItem predicateItemType
102+ name string
103+ pod * v1.Pod
104+ nodeName string
105+ predicateKey string
106+ equivalenceHashForUpdatePredicate uint64
107+ equivalenceHashForCalPredicate uint64
108+ cachedItem predicateItemType
109+ expectedInvalidPredicateKey bool
110+ expectedInvalidEquivalenceHash bool
111+ expectedPredicateItem predicateItemType
86112 }{
87113 {
88- name : "test 1" ,
89- pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
90- nodeName : "node1" ,
91- equivalenceHash : 123 ,
92- predicateKey : "GeneralPredicates" ,
114+ name : "test 1" ,
115+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
116+ nodeName : "node1" ,
117+ equivalenceHashForUpdatePredicate : 123 ,
118+ equivalenceHashForCalPredicate : 123 ,
119+ predicateKey : "GeneralPredicates" ,
93120 cachedItem : predicateItemType {
94121 fit : false ,
95122 reasons : []algorithm.PredicateFailureReason {predicates .ErrPodNotFitsHostPorts },
96123 },
97- expectedInvalid : true ,
124+ expectedInvalidPredicateKey : true ,
125+ expectedPredicateItem : predicateItemType {
126+ fit : false ,
127+ reasons : []algorithm.PredicateFailureReason {},
128+ },
129+ },
130+ {
131+ name : "test 2" ,
132+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
133+ nodeName : "node2" ,
134+ equivalenceHashForUpdatePredicate : 123 ,
135+ equivalenceHashForCalPredicate : 123 ,
136+ predicateKey : "GeneralPredicates" ,
137+ cachedItem : predicateItemType {
138+ fit : true ,
139+ },
140+ expectedInvalidPredicateKey : false ,
141+ expectedPredicateItem : predicateItemType {
142+ fit : true ,
143+ reasons : []algorithm.PredicateFailureReason {},
144+ },
145+ },
146+ {
147+ name : "test 3" ,
148+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
149+ nodeName : "node3" ,
150+ equivalenceHashForUpdatePredicate : 123 ,
151+ equivalenceHashForCalPredicate : 123 ,
152+ predicateKey : "GeneralPredicates" ,
153+ cachedItem : predicateItemType {
154+ fit : false ,
155+ reasons : []algorithm.PredicateFailureReason {predicates .ErrPodNotFitsHostPorts },
156+ },
157+ expectedInvalidPredicateKey : false ,
158+ expectedPredicateItem : predicateItemType {
159+ fit : false ,
160+ reasons : []algorithm.PredicateFailureReason {predicates .ErrPodNotFitsHostPorts },
161+ },
162+ },
163+ {
164+ name : "test 4" ,
165+ pod : & v1.Pod {ObjectMeta : metav1.ObjectMeta {Name : "testPod" }},
166+ nodeName : "node4" ,
167+ equivalenceHashForUpdatePredicate : 123 ,
168+ equivalenceHashForCalPredicate : 456 ,
169+ predicateKey : "GeneralPredicates" ,
170+ cachedItem : predicateItemType {
171+ fit : false ,
172+ reasons : []algorithm.PredicateFailureReason {predicates .ErrPodNotFitsHostPorts },
173+ },
174+ expectedInvalidPredicateKey : false ,
175+ expectedInvalidEquivalenceHash : true ,
98176 expectedPredicateItem : predicateItemType {
99177 fit : false ,
100178 reasons : []algorithm.PredicateFailureReason {},
@@ -107,18 +185,24 @@ func TestInvalidateCachedPredicateItem(t *testing.T) {
107185 fakeGetEquivalencePodFunc := func (pod * v1.Pod ) interface {} { return nil }
108186 ecache := NewEquivalenceCache (fakeGetEquivalencePodFunc )
109187 // set cached item to equivalence cache
110- ecache .UpdateCachedPredicateItem (test .pod , test .nodeName , test .predicateKey , test .cachedItem .fit , test .cachedItem .reasons , test .equivalenceHash )
188+ ecache .UpdateCachedPredicateItem (test .pod , test .nodeName , test .predicateKey , test .cachedItem .fit , test .cachedItem .reasons , test .equivalenceHashForUpdatePredicate )
111189 // if we want to do invalid, invalid the cached item
112- if test .expectedInvalid {
190+ if test .expectedInvalidPredicateKey {
113191 predicateKeys := sets .NewString ()
114192 predicateKeys .Insert (test .predicateKey )
115193 ecache .InvalidateCachedPredicateItem (test .nodeName , predicateKeys )
116194 }
117195 // calculate predicate with equivalence cache
118- fit , reasons , invalid := ecache .PredicateWithECache (test .pod , test .nodeName , test .predicateKey , test .equivalenceHash )
119- // returned invalid should match expectedInvalid
120- if invalid != test .expectedInvalid {
121- t .Errorf ("Failed : %s, expected invalid: %v, but got: %v" , test .name , test .expectedInvalid , invalid )
196+ fit , reasons , invalid := ecache .PredicateWithECache (test .pod , test .nodeName , test .predicateKey , test .equivalenceHashForCalPredicate )
197+ // returned invalid should match expectedInvalidPredicateKey or expectedInvalidEquivalenceHash
198+ if test .equivalenceHashForUpdatePredicate != test .equivalenceHashForCalPredicate {
199+ if invalid != test .expectedInvalidEquivalenceHash {
200+ t .Errorf ("Failed : %s when using invalid equivalenceHash, expected invalid: %v, but got: %v" , test .name , test .expectedInvalidEquivalenceHash , invalid )
201+ }
202+ } else {
203+ if invalid != test .expectedInvalidPredicateKey {
204+ t .Errorf ("Failed : %s, expected invalid: %v, but got: %v" , test .name , test .expectedInvalidPredicateKey , invalid )
205+ }
122206 }
123207 // returned predicate result should match expected predicate item
124208 if fit != test .expectedPredicateItem .fit {
0 commit comments