1515package networkpolicy
1616
1717import (
18+ "errors"
1819 "fmt"
1920 "net"
2021 "testing"
@@ -26,11 +27,13 @@ import (
2627 "k8s.io/apimachinery/pkg/labels"
2728 "k8s.io/apimachinery/pkg/runtime"
2829 "k8s.io/apimachinery/pkg/util/sets"
30+ corelisters "k8s.io/client-go/listers/core/v1"
2931 "k8s.io/utils/ptr"
3032
3133 "antrea.io/antrea/multicluster/controllers/multicluster/common"
3234 "antrea.io/antrea/pkg/apis/controlplane"
3335 crdv1beta1 "antrea.io/antrea/pkg/apis/crd/v1beta1"
36+ crdv1b1listers "antrea.io/antrea/pkg/client/listers/crd/v1beta1"
3437 antreatypes "antrea.io/antrea/pkg/controller/types"
3538 "antrea.io/antrea/pkg/util/k8s"
3639)
@@ -2445,3 +2448,150 @@ func TestGetACNPsWithRulesMatchingLabelKeysAcrossNSUpdate(t *testing.T) {
24452448 })
24462449 }
24472450}
2451+
2452+ type mockCGLister struct {
2453+ }
2454+
2455+ func (m mockCGLister ) List (selector labels.Selector ) (ret []* crdv1beta1.ClusterGroup , err error ) {
2456+ return []* crdv1beta1.ClusterGroup {{}}, errors .New ("always-errors" )
2457+ }
2458+
2459+ func (m mockCGLister ) Get (name string ) (* crdv1beta1.ClusterGroup , error ) {
2460+ return & crdv1beta1.ClusterGroup {}, errors .New ("always-errors" )
2461+ }
2462+
2463+ type mockCGListerA struct {
2464+ }
2465+
2466+ var labelA = map [string ]string {"a" : "a" }
2467+ var labelB = map [string ]string {"b" : "b" }
2468+ var namespaceA = & v1.Namespace {
2469+ ObjectMeta : metav1.ObjectMeta {
2470+ Name : "namespace-a" ,
2471+ Labels : labelA ,
2472+ },
2473+ }
2474+ var namespaceB = & v1.Namespace {
2475+ ObjectMeta : metav1.ObjectMeta {
2476+ Name : "namespace-b" ,
2477+ Labels : labelB ,
2478+ },
2479+ }
2480+
2481+ func (m mockCGListerA ) List (selector labels.Selector ) (ret []* crdv1beta1.ClusterGroup , err error ) {
2482+ return []* crdv1beta1.ClusterGroup {
2483+ {
2484+ Spec : crdv1beta1.GroupSpec {
2485+ NamespaceSelector : & metav1.LabelSelector {
2486+ MatchLabels : labelA ,
2487+ },
2488+ },
2489+ }}, nil
2490+ }
2491+
2492+ func (m mockCGListerA ) Get (name string ) (* crdv1beta1.ClusterGroup , error ) {
2493+ if name == "has-pod-selector" {
2494+ return & crdv1beta1.ClusterGroup {
2495+ Spec : crdv1beta1.GroupSpec {
2496+ PodSelector : & metav1.LabelSelector {
2497+ MatchLabels : map [string ]string {"c" : "c" },
2498+ },
2499+ },
2500+ }, nil
2501+ }
2502+ return & crdv1beta1.ClusterGroup {
2503+ Spec : crdv1beta1.GroupSpec {
2504+ NamespaceSelector : & metav1.LabelSelector {
2505+ MatchLabels : labelA ,
2506+ },
2507+ },
2508+ }, nil
2509+ }
2510+
2511+ type mockNamespaceListerA struct {
2512+ }
2513+
2514+ func (m mockNamespaceListerA ) List (selector labels.Selector ) (ret []* v1.Namespace , err error ) {
2515+ return []* v1.Namespace {namespaceA }, nil
2516+ }
2517+
2518+ func (m mockNamespaceListerA ) Get (name string ) (* v1.Namespace , error ) {
2519+ return namespaceA , nil
2520+ }
2521+
2522+ type mockNamespaceListerB struct {
2523+ }
2524+
2525+ func (m mockNamespaceListerB ) List (selector labels.Selector ) (ret []* v1.Namespace , err error ) {
2526+ return []* v1.Namespace {namespaceA , namespaceB }, nil
2527+ }
2528+
2529+ func (m mockNamespaceListerB ) Get (name string ) (* v1.Namespace , error ) {
2530+ return namespaceA , nil
2531+ }
2532+
2533+ func TestGetAffectedNamespacesForAppliedTo (t * testing.T ) {
2534+ tests := []struct {
2535+ name string
2536+ appliedTo crdv1beta1.AppliedTo
2537+ cgLister crdv1b1listers.ClusterGroupLister
2538+ namespaceLister corelisters.NamespaceLister
2539+ want map [string ]labels.Set
2540+ }{
2541+ {
2542+ "empty appliedTo" ,
2543+ crdv1beta1.AppliedTo {},
2544+ nil ,
2545+ nil ,
2546+ map [string ]labels.Set {},
2547+ },
2548+ {
2549+ "match on appliedTo namespaceSelector" ,
2550+ crdv1beta1.AppliedTo {NamespaceSelector : & metav1.LabelSelector {MatchLabels : map [string ]string {"a" : "a" }}},
2551+ nil ,
2552+ mockNamespaceListerA {},
2553+ map [string ]labels.Set {"namespace-a" : labelA },
2554+ },
2555+ {
2556+ "cluster group lister errors" ,
2557+ crdv1beta1.AppliedTo {Group : "non-empty" },
2558+ mockCGLister {},
2559+ nil ,
2560+ map [string ]labels.Set {},
2561+ },
2562+ {
2563+ "matching namespace for group's namespaceSelector" ,
2564+ crdv1beta1.AppliedTo {Group : "non-empty" },
2565+ mockCGListerA {},
2566+ mockNamespaceListerA {},
2567+ map [string ]labels.Set {"namespace-a" : labelA },
2568+ },
2569+ {
2570+ "match all namespace for empty namespaceSelector" ,
2571+ crdv1beta1.AppliedTo {},
2572+ mockCGListerA {},
2573+ mockNamespaceListerB {},
2574+ map [string ]labels.Set {"namespace-a" : labelA , "namespace-b" : labelB },
2575+ },
2576+ {
2577+ "match all namespace when namespaceSeletor is nil but podSelector is not" ,
2578+ crdv1beta1.AppliedTo {Group : "has-pod-selector" },
2579+ mockCGListerA {},
2580+ mockNamespaceListerB {},
2581+ map [string ]labels.Set {"namespace-a" : labelA , "namespace-b" : labelB },
2582+ },
2583+ }
2584+ for _ , tt := range tests {
2585+ t .Run (tt .name , func (t * testing.T ) {
2586+ _ , npc := newController (nil , nil )
2587+ if tt .cgLister != nil {
2588+ npc .cgLister = tt .cgLister
2589+ }
2590+ if tt .namespaceLister != nil {
2591+ npc .namespaceLister = tt .namespaceLister
2592+ }
2593+ got := npc .getAffectedNamespacesForAppliedTo (tt .appliedTo )
2594+ assert .Equal (t , tt .want , got )
2595+ })
2596+ }
2597+ }
0 commit comments