@@ -19,6 +19,8 @@ import (
19
19
. "github.com/onsi/gomega"
20
20
21
21
"github.com/projectcalico/libcalico-go/lib/backend/model"
22
+ "github.com/projectcalico/libcalico-go/lib/numorstring"
23
+
22
24
k8sapi "k8s.io/client-go/pkg/api/v1"
23
25
extensions "k8s.io/client-go/pkg/apis/extensions/v1beta1"
24
26
metav1 "k8s.io/client-go/pkg/apis/meta/v1"
@@ -267,6 +269,145 @@ var _ = Describe("Test NetworkPolicy conversion", func() {
267
269
Expect (len (pol .Value .(* model.Policy ).OutboundRules )).To (Equal (0 ))
268
270
})
269
271
272
+ It ("should parse a NetworkPolicy with multiple peers" , func () {
273
+ np := extensions.NetworkPolicy {
274
+ ObjectMeta : k8sapi.ObjectMeta {
275
+ Name : "testPolicy" ,
276
+ Namespace : "default" ,
277
+ },
278
+ Spec : extensions.NetworkPolicySpec {
279
+ PodSelector : metav1.LabelSelector {
280
+ MatchLabels : map [string ]string {"label" : "value" },
281
+ },
282
+ Ingress : []extensions.NetworkPolicyIngressRule {
283
+ extensions.NetworkPolicyIngressRule {
284
+ Ports : []extensions.NetworkPolicyPort {
285
+ extensions.NetworkPolicyPort {},
286
+ },
287
+ From : []extensions.NetworkPolicyPeer {
288
+ extensions.NetworkPolicyPeer {
289
+ PodSelector : & metav1.LabelSelector {
290
+ MatchLabels : map [string ]string {
291
+ "k" : "v" ,
292
+ },
293
+ },
294
+ },
295
+ extensions.NetworkPolicyPeer {
296
+ PodSelector : & metav1.LabelSelector {
297
+ MatchLabels : map [string ]string {
298
+ "k2" : "v2" ,
299
+ },
300
+ },
301
+ },
302
+ },
303
+ },
304
+ },
305
+ },
306
+ }
307
+
308
+ var pol * model.KVPair
309
+ var err error
310
+ By ("parsing the policy" , func () {
311
+ pol , err = c .networkPolicyToPolicy (& np )
312
+ Expect (err ).NotTo (HaveOccurred ())
313
+ Expect (pol .Key .(model.PolicyKey ).Name ).To (Equal ("np.projectcalico.org/default.testPolicy" ))
314
+ Expect (int (* pol .Value .(* model.Policy ).Order )).To (Equal (1000 ))
315
+ })
316
+
317
+ By ("having the correct endpoint selector" , func () {
318
+ Expect (pol .Value .(* model.Policy ).Selector ).To (Equal ("calico/k8s_ns == 'default' && label == 'value'" ))
319
+ })
320
+
321
+ By ("having the correct peer selectors" , func () {
322
+ Expect (len (pol .Value .(* model.Policy ).InboundRules )).To (Equal (2 ))
323
+ Expect (len (pol .Value .(* model.Policy ).OutboundRules )).To (Equal (0 ))
324
+ Expect (pol .Value .(* model.Policy ).InboundRules [0 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k == 'v'" ))
325
+ Expect (pol .Value .(* model.Policy ).InboundRules [1 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k2 == 'v2'" ))
326
+ })
327
+ })
328
+
329
+ It ("should parse a NetworkPolicy with multiple peers and ports" , func () {
330
+ tcp := k8sapi .ProtocolTCP
331
+ udp := k8sapi .ProtocolUDP
332
+ eighty := intstr .FromInt (80 )
333
+ ninety := intstr .FromInt (90 )
334
+
335
+ np := extensions.NetworkPolicy {
336
+ ObjectMeta : k8sapi.ObjectMeta {
337
+ Name : "testPolicy" ,
338
+ Namespace : "default" ,
339
+ },
340
+ Spec : extensions.NetworkPolicySpec {
341
+ PodSelector : metav1.LabelSelector {
342
+ MatchLabels : map [string ]string {"label" : "value" },
343
+ },
344
+ Ingress : []extensions.NetworkPolicyIngressRule {
345
+ extensions.NetworkPolicyIngressRule {
346
+ Ports : []extensions.NetworkPolicyPort {
347
+ extensions.NetworkPolicyPort {
348
+ Port : & ninety ,
349
+ Protocol : & udp ,
350
+ },
351
+ extensions.NetworkPolicyPort {
352
+ Port : & eighty ,
353
+ Protocol : & tcp ,
354
+ },
355
+ },
356
+ From : []extensions.NetworkPolicyPeer {
357
+ extensions.NetworkPolicyPeer {
358
+ PodSelector : & metav1.LabelSelector {
359
+ MatchLabels : map [string ]string {
360
+ "k" : "v" ,
361
+ },
362
+ },
363
+ },
364
+ extensions.NetworkPolicyPeer {
365
+ PodSelector : & metav1.LabelSelector {
366
+ MatchLabels : map [string ]string {
367
+ "k2" : "v2" ,
368
+ },
369
+ },
370
+ },
371
+ },
372
+ },
373
+ },
374
+ },
375
+ }
376
+
377
+ var pol * model.KVPair
378
+ var err error
379
+ By ("parsing the policy" , func () {
380
+ pol , err = c .networkPolicyToPolicy (& np )
381
+ Expect (err ).NotTo (HaveOccurred ())
382
+ Expect (pol .Key .(model.PolicyKey ).Name ).To (Equal ("np.projectcalico.org/default.testPolicy" ))
383
+ Expect (int (* pol .Value .(* model.Policy ).Order )).To (Equal (1000 ))
384
+ })
385
+
386
+ By ("having the correct endpoint selector" , func () {
387
+ Expect (pol .Value .(* model.Policy ).Selector ).To (Equal ("calico/k8s_ns == 'default' && label == 'value'" ))
388
+ })
389
+
390
+ By ("having the correct peer selectors" , func () {
391
+ eighty , _ := numorstring .PortFromString ("80" )
392
+ ninety , _ := numorstring .PortFromString ("90" )
393
+ Expect (len (pol .Value .(* model.Policy ).InboundRules )).To (Equal (4 ))
394
+ Expect (len (pol .Value .(* model.Policy ).OutboundRules )).To (Equal (0 ))
395
+
396
+ Expect (pol .Value .(* model.Policy ).InboundRules [0 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k == 'v'" ))
397
+ Expect (pol .Value .(* model.Policy ).InboundRules [0 ].DstPorts ).To (Equal ([]numorstring.Port {ninety }))
398
+
399
+ Expect (pol .Value .(* model.Policy ).InboundRules [1 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k2 == 'v2'" ))
400
+ Expect (pol .Value .(* model.Policy ).InboundRules [1 ].DstPorts ).To (Equal ([]numorstring.Port {ninety }))
401
+
402
+ Expect (pol .Value .(* model.Policy ).InboundRules [2 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k == 'v'" ))
403
+ Expect (pol .Value .(* model.Policy ).InboundRules [2 ].DstPorts ).To (Equal ([]numorstring.Port {eighty }))
404
+
405
+ Expect (pol .Value .(* model.Policy ).InboundRules [3 ].SrcSelector ).To (Equal ("calico/k8s_ns == 'default' && k2 == 'v2'" ))
406
+ Expect (pol .Value .(* model.Policy ).InboundRules [3 ].DstPorts ).To (Equal ([]numorstring.Port {eighty }))
407
+
408
+ })
409
+ })
410
+
270
411
It ("should parse a NetworkPolicy with empty podSelector" , func () {
271
412
np := extensions.NetworkPolicy {
272
413
ObjectMeta : k8sapi.ObjectMeta {
0 commit comments