@@ -365,6 +365,102 @@ func (s *testSuite) TestGetPolicySyncMsgFromPoliciesDoesntDowngradeInvalidVersio
365365 s .Equal (policyversion .CurrentVersion ().String (), policySync .GetPolicies ()[0 ].GetPolicyVersion ())
366366}
367367
368+ func (s * testSuite ) TestGetPolicySyncMsgFromPoliciesStripsExcludeByKind () {
369+ kindExclusion := & storage.Exclusion {
370+ Name : "skip-cronjobs" ,
371+ Matcher : & storage.Exclusion_ExcludeByKind_ {
372+ ExcludeByKind : & storage.Exclusion_ExcludeByKind {
373+ Kinds : []storage.Exclusion_WorkloadKind {storage .Exclusion_CRON_JOB },
374+ },
375+ },
376+ }
377+ nameExclusion := & storage.Exclusion {
378+ Name : "skip-web" ,
379+ Matcher : & storage.Exclusion_Deployment_ {
380+ Deployment : & storage.Exclusion_Deployment {Name : "web" },
381+ },
382+ }
383+ imageExclusion := & storage.Exclusion {
384+ Name : "skip-image" ,
385+ Image : & storage.Exclusion_Image {Name : "stackrox.io" },
386+ }
387+ imageAndKindExclusion := & storage.Exclusion {
388+ Name : "skip-image-and-jobs" ,
389+ Image : & storage.Exclusion_Image {Name : "example.io" },
390+ Matcher : & storage.Exclusion_ExcludeByKind_ {
391+ ExcludeByKind : & storage.Exclusion_ExcludeByKind {
392+ Kinds : []storage.Exclusion_WorkloadKind {storage .Exclusion_JOB },
393+ },
394+ },
395+ }
396+ imageAndDeploymentExclusion := & storage.Exclusion {
397+ Name : "skip-image-and-web" ,
398+ Image : & storage.Exclusion_Image {Name : "nginx" },
399+ Matcher : & storage.Exclusion_Deployment_ {
400+ Deployment : & storage.Exclusion_Deployment {Name : "web-image" },
401+ },
402+ }
403+ policy := & storage.Policy {
404+ Name : "test-policy" ,
405+ Exclusions : []* storage.Exclusion {
406+ kindExclusion ,
407+ nameExclusion ,
408+ imageExclusion ,
409+ imageAndKindExclusion ,
410+ imageAndDeploymentExclusion ,
411+ },
412+ }
413+
414+ s .Run ("without capability strips kind items and keeps others" , func () {
415+ original := policy .CloneVT ()
416+ msg , err := (& sensorConnection {}).getPolicySyncMsgFromPolicies ([]* storage.Policy {policy })
417+ s .Require ().NoError (err )
418+
419+ synced := msg .GetPolicySync ().GetPolicies ()
420+ s .Require ().Len (synced , 1 )
421+ got := synced [0 ].GetExclusions ()
422+ s .Require ().Len (got , 3 )
423+ s .Equal ("skip-web" , got [0 ].GetName ())
424+ s .Equal ("web" , got [0 ].GetDeployment ().GetName ())
425+ s .Equal ("skip-image" , got [1 ].GetName ())
426+ s .Equal ("stackrox.io" , got [1 ].GetImage ().GetName ())
427+ s .Equal ("skip-image-and-web" , got [2 ].GetName ())
428+ s .Equal ("nginx" , got [2 ].GetImage ().GetName ())
429+ s .Equal ("web-image" , got [2 ].GetDeployment ().GetName ())
430+ protoassert .Equal (s .T (), original , policy )
431+ })
432+
433+ s .Run ("with capability keeps kind items" , func () {
434+ conn := & sensorConnection {
435+ capabilities : set .NewSet (centralsensor .WorkloadKindExclusionCap ),
436+ }
437+ msg , err := conn .getPolicySyncMsgFromPolicies ([]* storage.Policy {policy })
438+ s .Require ().NoError (err )
439+
440+ got := msg .GetPolicySync ().GetPolicies ()[0 ].GetExclusions ()
441+ s .Require ().Len (got , 5 )
442+ s .NotNil (got [0 ].GetExcludeByKind ())
443+ s .NotNil (got [3 ].GetExcludeByKind ())
444+ s .Equal (storage .Exclusion_JOB , got [3 ].GetExcludeByKind ().GetKinds ()[0 ])
445+ s .Equal ("example.io" , got [3 ].GetImage ().GetName ())
446+ s .Equal ("web-image" , got [4 ].GetDeployment ().GetName ())
447+ })
448+
449+ s .Run ("later capable sensor still sees original kind items" , func () {
450+ // PreparePoliciesAndBroadcast reuses the same slice across connections.
451+ input := []* storage.Policy {policy }
452+ _ , err := (& sensorConnection {}).getPolicySyncMsgFromPolicies (input )
453+ s .Require ().NoError (err )
454+
455+ capable := & sensorConnection {
456+ capabilities : set .NewSet (centralsensor .WorkloadKindExclusionCap ),
457+ }
458+ msg , err := capable .getPolicySyncMsgFromPolicies (input )
459+ s .Require ().NoError (err )
460+ s .NotNil (msg .GetPolicySync ().GetPolicies ()[0 ].GetExclusions ()[0 ].GetExcludeByKind ())
461+ })
462+ }
463+
368464func (s * testSuite ) TestSendsAuditLogSyncMessageIfEnabledOnRun () {
369465 ctx := context .Background ()
370466 clusterID := "this-cluster"
0 commit comments