@@ -26,11 +26,13 @@ import (
2626 kmmv1beta1 "github.com/rh-ecosystem-edge/kernel-module-management/api/v1beta1"
2727 "github.com/rh-ecosystem-edge/kernel-module-management/internal/client"
2828 "github.com/rh-ecosystem-edge/kernel-module-management/internal/constants"
29+ "github.com/rh-ecosystem-edge/kernel-module-management/internal/networkpolicy"
2930 "github.com/rh-ecosystem-edge/kernel-module-management/internal/node"
3031 "github.com/rh-ecosystem-edge/kernel-module-management/internal/utils"
3132 "go.uber.org/mock/gomock"
3233 appsv1 "k8s.io/api/apps/v1"
3334 v1 "k8s.io/api/core/v1"
35+ networkingv1 "k8s.io/api/networking/v1"
3436 resourcev1 "k8s.io/api/resource/v1"
3537 apierrors "k8s.io/apimachinery/pkg/api/errors"
3638 "k8s.io/apimachinery/pkg/api/resource"
@@ -69,7 +71,7 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
6971
7072 ctx := context .Background ()
7173
72- DescribeTable ("check error flows" , func (getDSError , getDCError , handleDRAError , gcError , handleDCError bool ) {
74+ DescribeTable ("check error flows" , func (getDSError , getDCError , handleNPError , handleDRAError , gcError , handleDCError bool ) {
7375 draDS := []appsv1.DaemonSet {{}}
7476 returnedError := fmt .Errorf ("some error" )
7577 if getDSError {
@@ -82,6 +84,11 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
8284 goto executeTestFunction
8385 }
8486 mockReconHelper .EXPECT ().getModuleDeviceClasses (ctx , mod .Name , mod .Namespace ).Return (nil , nil )
87+ if handleNPError {
88+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (returnedError )
89+ goto executeTestFunction
90+ }
91+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (nil )
8592 if handleDRAError {
8693 mockReconHelper .EXPECT ().handleDRA (ctx , mod , draDS ).Return (returnedError )
8794 goto executeTestFunction
@@ -106,19 +113,21 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
106113 Expect (err ).To (HaveOccurred ())
107114
108115 },
109- Entry ("getModuleDRADaemonSets failed" , true , false , false , false , false ),
110- Entry ("getModuleDeviceClasses failed" , false , true , false , false , false ),
111- Entry ("handleDRA failed" , false , false , true , false , false ),
112- Entry ("garbageCollectDRADaemonSets failed" , false , false , false , true , false ),
113- Entry ("handleDeviceClasses failed" , false , false , false , false , true ),
114- Entry ("moduleUpdateDRAStatus failed" , false , false , false , false , false ),
116+ Entry ("getModuleDRADaemonSets failed" , true , false , false , false , false , false ),
117+ Entry ("getModuleDeviceClasses failed" , false , true , false , false , false , false ),
118+ Entry ("handleDRANetworkPolicy failed" , false , false , true , false , false , false ),
119+ Entry ("handleDRA failed" , false , false , false , true , false , false ),
120+ Entry ("garbageCollectDRADaemonSets failed" , false , false , false , false , true , false ),
121+ Entry ("handleDeviceClasses failed" , false , false , false , false , false , true ),
122+ Entry ("moduleUpdateDRAStatus failed" , false , false , false , false , false , false ),
115123 )
116124
117125 It ("Good flow" , func () {
118126 draDS := []appsv1.DaemonSet {{}}
119127 gomock .InOrder (
120128 mockReconHelper .EXPECT ().getModuleDRADaemonSets (ctx , mod .Name , mod .Namespace ).Return (draDS , nil ),
121129 mockReconHelper .EXPECT ().getModuleDeviceClasses (ctx , mod .Name , mod .Namespace ).Return (nil , nil ),
130+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (nil ),
122131 mockReconHelper .EXPECT ().handleDRA (ctx , mod , draDS ).Return (nil ),
123132 mockReconHelper .EXPECT ().garbageCollectDRADaemonSets (ctx , mod , draDS ).Return (nil ),
124133 mockReconHelper .EXPECT ().handleDeviceClasses (ctx , mod , []resourcev1.DeviceClass (nil )).Return (nil ),
@@ -164,6 +173,7 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
164173 gomock .InOrder (
165174 mockReconHelper .EXPECT ().getModuleDRADaemonSets (ctx , mod .Name , mod .Namespace ).Return (nil , nil ),
166175 mockReconHelper .EXPECT ().getModuleDeviceClasses (ctx , mod .Name , mod .Namespace ).Return (nil , nil ),
176+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (nil ),
167177 mockReconHelper .EXPECT ().deleteDRAResources (ctx , mod .Name , mod .Namespace ).Return (nil ),
168178 mockReconHelper .EXPECT ().clearDRAStatus (ctx , mod ).Return (nil ),
169179 )
@@ -182,6 +192,7 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
182192 gomock .InOrder (
183193 mockReconHelper .EXPECT ().getModuleDRADaemonSets (ctx , mod .Name , mod .Namespace ).Return (draDS , nil ),
184194 mockReconHelper .EXPECT ().getModuleDeviceClasses (ctx , mod .Name , mod .Namespace ).Return (existingDCs , nil ),
195+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (nil ),
185196 mockReconHelper .EXPECT ().deleteDRAResources (ctx , mod .Name , mod .Namespace ).Return (nil ),
186197 mockReconHelper .EXPECT ().clearDRAStatus (ctx , mod ).Return (nil ),
187198 )
@@ -198,6 +209,7 @@ var _ = Describe("DRAReconciler_Reconcile", func() {
198209 gomock .InOrder (
199210 mockReconHelper .EXPECT ().getModuleDRADaemonSets (ctx , mod .Name , mod .Namespace ).Return (nil , nil ),
200211 mockReconHelper .EXPECT ().getModuleDeviceClasses (ctx , mod .Name , mod .Namespace ).Return (nil , nil ),
212+ mockReconHelper .EXPECT ().handleDRANetworkPolicy (ctx , mod ).Return (nil ),
201213 mockReconHelper .EXPECT ().deleteDRAResources (ctx , mod .Name , mod .Namespace ).Return (nil ),
202214 mockReconHelper .EXPECT ().clearDRAStatus (ctx , mod ).Return (fmt .Errorf ("some error" )),
203215 )
@@ -314,7 +326,7 @@ var _ = Describe("DRAReconciler_moduleUpdateDRAStatus", func() {
314326 clnt = client .NewMockClient (ctrl )
315327 statusWriter = client .NewMockStatusWriter (ctrl )
316328 mn = node .NewNode (clnt )
317- drh = newDRAReconcilerHelper (clnt , mn , nil )
329+ drh = newDRAReconcilerHelper (clnt , mn , nil , nil )
318330 })
319331
320332 ctx := context .Background ()
@@ -585,11 +597,19 @@ var _ = Describe("DRAReconciler_setDRAAsDesired", func() {
585597 err := dsc .setDRAAsDesired (context .Background (), & ds , & mod )
586598 Expect (err ).NotTo (HaveOccurred ())
587599
588- podLabels := map [string ]string {
600+ dsLabels := map [string ]string {
589601 constants .ModuleNameLabel : draModuleName ,
590602 constants .DaemonSetRole : constants .DRARoleLabelValue ,
591603 }
592604
605+ podLabels := map [string ]string {
606+ constants .ModuleNameLabel : draModuleName ,
607+ constants .DaemonSetRole : constants .DRARoleLabelValue ,
608+ "app.kubernetes.io/name" : "kmm" ,
609+ "app.kubernetes.io/component" : "dra" ,
610+ "app.kubernetes.io/part-of" : "kmm" ,
611+ }
612+
593613 expectedInitContainer := []v1.Container {
594614 {
595615 Args : args ,
@@ -618,7 +638,7 @@ var _ = Describe("DRAReconciler_setDRAAsDesired", func() {
618638 ObjectMeta : metav1.ObjectMeta {
619639 Name : dsName ,
620640 Namespace : namespace ,
621- Labels : podLabels ,
641+ Labels : dsLabels ,
622642 OwnerReferences : []metav1.OwnerReference {
623643 {
624644 APIVersion : mod .APIVersion ,
@@ -631,7 +651,7 @@ var _ = Describe("DRAReconciler_setDRAAsDesired", func() {
631651 },
632652 },
633653 Spec : appsv1.DaemonSetSpec {
634- Selector : & metav1.LabelSelector {MatchLabels : podLabels },
654+ Selector : & metav1.LabelSelector {MatchLabels : dsLabels },
635655 Template : v1.PodTemplateSpec {
636656 ObjectMeta : metav1.ObjectMeta {
637657 Labels : podLabels ,
@@ -1239,3 +1259,53 @@ var _ = Describe("DRAReconciler_deleteDRAResources", func() {
12391259 Expect (err .Error ()).To (ContainSubstring ("DeviceClasses" ))
12401260 })
12411261})
1262+
1263+ var _ = Describe ("draReconcilerHelper_handleDRANetworkPolicy" , func () {
1264+ var (
1265+ ctrl * gomock.Controller
1266+ mockNP * networkpolicy.MockNetworkPolicy
1267+ drh draReconcilerHelper
1268+ ctx context.Context
1269+ mod * kmmv1beta1.Module
1270+ )
1271+
1272+ BeforeEach (func () {
1273+ ctrl = gomock .NewController (GinkgoT ())
1274+ mockNP = networkpolicy .NewMockNetworkPolicy (ctrl )
1275+ ctx = context .Background ()
1276+ drh = draReconcilerHelper {
1277+ networkPolicyAPI : mockNP ,
1278+ }
1279+ mod = & kmmv1beta1.Module {
1280+ ObjectMeta : metav1.ObjectMeta {Namespace : namespace , Name : "dra-module" },
1281+ Spec : kmmv1beta1.ModuleSpec {
1282+ DRA : & kmmv1beta1.DRASpec {},
1283+ },
1284+ }
1285+ })
1286+
1287+ It ("should return nil when DRA is nil" , func () {
1288+ mod .Spec .DRA = nil
1289+ err := drh .handleDRANetworkPolicy (ctx , mod )
1290+ Expect (err ).NotTo (HaveOccurred ())
1291+ })
1292+
1293+ It ("should create the DRA NetworkPolicy" , func () {
1294+ policy := & networkingv1.NetworkPolicy {}
1295+ mockNP .EXPECT ().DRANetworkPolicy (mod .Namespace ).Return (policy )
1296+ mockNP .EXPECT ().CreateOrAddOwnerReference (ctx , policy , mod ).Return (nil )
1297+
1298+ err := drh .handleDRANetworkPolicy (ctx , mod )
1299+ Expect (err ).NotTo (HaveOccurred ())
1300+ })
1301+
1302+ It ("should return error if CreateOrAddOwnerReference fails" , func () {
1303+ policy := & networkingv1.NetworkPolicy {}
1304+ mockNP .EXPECT ().DRANetworkPolicy (mod .Namespace ).Return (policy )
1305+ mockNP .EXPECT ().CreateOrAddOwnerReference (ctx , policy , mod ).Return (fmt .Errorf ("some error" ))
1306+
1307+ err := drh .handleDRANetworkPolicy (ctx , mod )
1308+ Expect (err ).To (HaveOccurred ())
1309+ Expect (err .Error ()).To (ContainSubstring ("failed to ensure DRA NetworkPolicy" ))
1310+ })
1311+ })
0 commit comments