Skip to content

Commit ba1e0d6

Browse files
test: backfill getAffectedNamespacesForAppliedto
* adds code coverage in networkpolicy package for networkPolicyController's getAffectedNamespacesForAppliedto Signed-off-by: Peter Tran <[email protected]>
1 parent f668339 commit ba1e0d6

File tree

1 file changed

+150
-0
lines changed

1 file changed

+150
-0
lines changed

pkg/controller/networkpolicy/clusternetworkpolicy_test.go

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package networkpolicy
1616

1717
import (
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

Comments
 (0)