@@ -30,6 +30,268 @@ import (
30
30
"github.com/oracle/oci-go-sdk/v50/core"
31
31
)
32
32
33
+ func newNodeObj (name string , labels map [string ]string ) * v1.Node {
34
+ return & v1.Node {
35
+ ObjectMeta : metav1.ObjectMeta {
36
+ Name : name ,
37
+ Labels : labels ,
38
+ },
39
+ }
40
+ }
41
+
42
+ func Test_filterNodes (t * testing.T ) {
43
+ testCases := map [string ]struct {
44
+ nodes []* v1.Node
45
+ service * v1.Service
46
+ expected []* v1.Node
47
+ }{
48
+ "lb - no annotation" : {
49
+ nodes : []* v1.Node {
50
+ newNodeObj ("node1" , nil ),
51
+ newNodeObj ("node2" , nil ),
52
+ },
53
+ service : & v1.Service {
54
+ ObjectMeta : metav1.ObjectMeta {
55
+ Namespace : "kube-system" ,
56
+ Name : "testservice" ,
57
+ Annotations : map [string ]string {},
58
+ },
59
+ },
60
+ expected : []* v1.Node {
61
+ newNodeObj ("node1" , nil ),
62
+ newNodeObj ("node2" , nil ),
63
+ },
64
+ },
65
+ "nlb - no annotation" : {
66
+ nodes : []* v1.Node {
67
+ newNodeObj ("node1" , nil ),
68
+ newNodeObj ("node2" , nil ),
69
+ },
70
+ service : & v1.Service {
71
+ ObjectMeta : metav1.ObjectMeta {
72
+ Namespace : "kube-system" ,
73
+ Name : "testservice" ,
74
+ Annotations : map [string ]string {
75
+ ServiceAnnotationLoadBalancerType : "nlb" ,
76
+ },
77
+ },
78
+ },
79
+ expected : []* v1.Node {
80
+ newNodeObj ("node1" , nil ),
81
+ newNodeObj ("node2" , nil ),
82
+ },
83
+ },
84
+ "lb - empty annotation" : {
85
+ nodes : []* v1.Node {
86
+ newNodeObj ("node1" , nil ),
87
+ newNodeObj ("node2" , nil ),
88
+ },
89
+ service : & v1.Service {
90
+ ObjectMeta : metav1.ObjectMeta {
91
+ Namespace : "kube-system" ,
92
+ Name : "testservice" ,
93
+ Annotations : map [string ]string {
94
+ ServiceAnnotationLoadBalancerNodeFilter : "" ,
95
+ },
96
+ },
97
+ },
98
+ expected : []* v1.Node {
99
+ newNodeObj ("node1" , nil ),
100
+ newNodeObj ("node2" , nil ),
101
+ },
102
+ },
103
+ "nlb - empty annotation" : {
104
+ nodes : []* v1.Node {
105
+ newNodeObj ("node1" , nil ),
106
+ newNodeObj ("node2" , nil ),
107
+ },
108
+ service : & v1.Service {
109
+ ObjectMeta : metav1.ObjectMeta {
110
+ Namespace : "kube-system" ,
111
+ Name : "testservice" ,
112
+ Annotations : map [string ]string {
113
+ ServiceAnnotationLoadBalancerType : "nlb" ,
114
+ ServiceAnnotationNetworkLoadBalancerNodeFilter : "" ,
115
+ },
116
+ },
117
+ },
118
+ expected : []* v1.Node {
119
+ newNodeObj ("node1" , nil ),
120
+ newNodeObj ("node2" , nil ),
121
+ },
122
+ },
123
+ "lb - single selector select all" : {
124
+ nodes : []* v1.Node {
125
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
126
+ newNodeObj ("node2" , map [string ]string {"foo" : "bar" }),
127
+ },
128
+ service : & v1.Service {
129
+ ObjectMeta : metav1.ObjectMeta {
130
+ Namespace : "kube-system" ,
131
+ Name : "testservice" ,
132
+ Annotations : map [string ]string {
133
+ ServiceAnnotationLoadBalancerNodeFilter : "foo=bar" ,
134
+ },
135
+ },
136
+ },
137
+ expected : []* v1.Node {
138
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
139
+ newNodeObj ("node2" , map [string ]string {"foo" : "bar" }),
140
+ },
141
+ },
142
+ "nlb - single selector select all" : {
143
+ nodes : []* v1.Node {
144
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
145
+ newNodeObj ("node2" , map [string ]string {"foo" : "bar" }),
146
+ },
147
+ service : & v1.Service {
148
+ ObjectMeta : metav1.ObjectMeta {
149
+ Namespace : "kube-system" ,
150
+ Name : "testservice" ,
151
+ Annotations : map [string ]string {
152
+ ServiceAnnotationLoadBalancerType : "nlb" ,
153
+ ServiceAnnotationNetworkLoadBalancerNodeFilter : "foo=bar" ,
154
+ },
155
+ },
156
+ },
157
+ expected : []* v1.Node {
158
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
159
+ newNodeObj ("node2" , map [string ]string {"foo" : "bar" }),
160
+ },
161
+ },
162
+ "lb - single selector select some" : {
163
+ nodes : []* v1.Node {
164
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
165
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
166
+ },
167
+ service : & v1.Service {
168
+ ObjectMeta : metav1.ObjectMeta {
169
+ Namespace : "kube-system" ,
170
+ Name : "testservice" ,
171
+ Annotations : map [string ]string {
172
+ ServiceAnnotationLoadBalancerNodeFilter : "foo=bar" ,
173
+ },
174
+ },
175
+ },
176
+ expected : []* v1.Node {
177
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
178
+ },
179
+ },
180
+ "nlb - single selector select some" : {
181
+ nodes : []* v1.Node {
182
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
183
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
184
+ },
185
+ service : & v1.Service {
186
+ ObjectMeta : metav1.ObjectMeta {
187
+ Namespace : "kube-system" ,
188
+ Name : "testservice" ,
189
+ Annotations : map [string ]string {
190
+ ServiceAnnotationLoadBalancerType : "nlb" ,
191
+ ServiceAnnotationNetworkLoadBalancerNodeFilter : "foo=bar" ,
192
+ },
193
+ },
194
+ },
195
+ expected : []* v1.Node {
196
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
197
+ },
198
+ },
199
+ "lb - multi selector select all" : {
200
+ nodes : []* v1.Node {
201
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
202
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
203
+ },
204
+ service : & v1.Service {
205
+ ObjectMeta : metav1.ObjectMeta {
206
+ Namespace : "kube-system" ,
207
+ Name : "testservice" ,
208
+ Annotations : map [string ]string {
209
+ ServiceAnnotationLoadBalancerNodeFilter : "foo" ,
210
+ },
211
+ },
212
+ },
213
+ expected : []* v1.Node {
214
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
215
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
216
+ },
217
+ },
218
+ "nlb - multi selector select all" : {
219
+ nodes : []* v1.Node {
220
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
221
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
222
+ },
223
+ service : & v1.Service {
224
+ ObjectMeta : metav1.ObjectMeta {
225
+ Namespace : "kube-system" ,
226
+ Name : "testservice" ,
227
+ Annotations : map [string ]string {
228
+ ServiceAnnotationLoadBalancerType : "nlb" ,
229
+ ServiceAnnotationNetworkLoadBalancerNodeFilter : "foo" ,
230
+ },
231
+ },
232
+ },
233
+ expected : []* v1.Node {
234
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
235
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
236
+ },
237
+ },
238
+ "lb - multi selector select some" : {
239
+ nodes : []* v1.Node {
240
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
241
+ newNodeObj ("node2" , map [string ]string {"foo" : "joe" }),
242
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
243
+ },
244
+ service : & v1.Service {
245
+ ObjectMeta : metav1.ObjectMeta {
246
+ Namespace : "kube-system" ,
247
+ Name : "testservice" ,
248
+ Annotations : map [string ]string {
249
+ ServiceAnnotationLoadBalancerNodeFilter : "foo in (bar, baz)" ,
250
+ },
251
+ },
252
+ },
253
+ expected : []* v1.Node {
254
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
255
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
256
+ },
257
+ },
258
+ "nlb - multi selector select some" : {
259
+ nodes : []* v1.Node {
260
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
261
+ newNodeObj ("node2" , map [string ]string {"foo" : "joe" }),
262
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
263
+ },
264
+ service : & v1.Service {
265
+ ObjectMeta : metav1.ObjectMeta {
266
+ Namespace : "kube-system" ,
267
+ Name : "testservice" ,
268
+ Annotations : map [string ]string {
269
+ ServiceAnnotationLoadBalancerType : "nlb" ,
270
+ ServiceAnnotationNetworkLoadBalancerNodeFilter : "foo in (bar, baz)" ,
271
+ },
272
+ },
273
+ },
274
+ expected : []* v1.Node {
275
+ newNodeObj ("node1" , map [string ]string {"foo" : "bar" }),
276
+ newNodeObj ("node2" , map [string ]string {"foo" : "baz" }),
277
+ },
278
+ },
279
+ }
280
+
281
+ for name , tc := range testCases {
282
+ t .Run (name , func (t * testing.T ) {
283
+ nodes , err := filterNodes (tc .service , tc .nodes )
284
+ if err != nil {
285
+ t .Fatal (err )
286
+ }
287
+
288
+ if ! reflect .DeepEqual (nodes , tc .expected ) {
289
+ t .Errorf ("expected: %+v got %+v" , tc .expected , nodes )
290
+ }
291
+ })
292
+ }
293
+ }
294
+
33
295
func Test_getDefaultLBSubnets (t * testing.T ) {
34
296
type args struct {
35
297
subnet1 string
0 commit comments