@@ -497,3 +497,113 @@ func assertRunningRejectedPolicyRequirement(t *testing.T, allowed bool, err erro
497497 assertRunningRejected (t , allowed , err )
498498 assert .IsType (t , PolicyRequirementError ("" ), err )
499499}
500+
501+ func TestPolicyContextSetRejectInsecure (t * testing.T ) {
502+ pc , err := NewPolicyContext (& Policy {Default : PolicyRequirements {NewPRReject ()}})
503+ require .NoError (t , err )
504+ defer func () {
505+ err := pc .Destroy ()
506+ require .NoError (t , err )
507+ }()
508+
509+ // Test default value is false
510+ assert .False (t , pc .rejectInsecure )
511+
512+ // Test setting to true
513+ pc .SetRejectInsecure (true )
514+ assert .True (t , pc .rejectInsecure )
515+
516+ // Test setting back to false
517+ pc .SetRejectInsecure (false )
518+ assert .False (t , pc .rejectInsecure )
519+ }
520+
521+ func TestPolicyContextIsRunningImageAllowedWithRejectInsecure (t * testing.T ) {
522+ pc , err := NewPolicyContext (& Policy {
523+ Default : PolicyRequirements {NewPRReject ()},
524+ Transports : map [string ]PolicyTransportScopes {
525+ "docker" : {
526+ "docker.io/testing/manifest:insecureOnly" : {
527+ NewPRInsecureAcceptAnything (),
528+ },
529+ "docker.io/testing/manifest:insecureWithOther" : {
530+ NewPRInsecureAcceptAnything (),
531+ xNewPRSignedByKeyPath (SBKeyTypeGPGKeys , "fixtures/public-key.gpg" , NewPRMMatchRepository ()),
532+ },
533+ "docker.io/testing/manifest:signedOnly" : {
534+ xNewPRSignedByKeyPath (SBKeyTypeGPGKeys , "fixtures/public-key.gpg" , NewPRMMatchRepository ()),
535+ },
536+ },
537+ },
538+ })
539+ require .NoError (t , err )
540+ defer func () {
541+ err := pc .Destroy ()
542+ require .NoError (t , err )
543+ }()
544+
545+ // Test with rejectInsecure=false (default behavior)
546+ // insecureAcceptAnything should be accepted
547+ img := pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:insecureOnly" )
548+ res , err := pc .IsRunningImageAllowed (context .Background (), img )
549+ assertRunningAllowed (t , res , err )
550+
551+ // Test with rejectInsecure=true
552+ pc .SetRejectInsecure (true )
553+
554+ // insecureAcceptAnything only: should be rejected (empty requirements)
555+ img = pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:insecureOnly" )
556+ res , err = pc .IsRunningImageAllowed (context .Background (), img )
557+ assertRunningRejectedPolicyRequirement (t , res , err )
558+
559+ // insecureAcceptAnything + signed requirement: should use signed requirement
560+ img = pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:insecureWithOther" )
561+ res , err = pc .IsRunningImageAllowed (context .Background (), img )
562+ assertRunningAllowed (t , res , err )
563+
564+ // signed requirement only: should work normally
565+ img = pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:signedOnly" )
566+ res , err = pc .IsRunningImageAllowed (context .Background (), img )
567+ assertRunningAllowed (t , res , err )
568+
569+ // Test with unsigned image and insecureAcceptAnything + signed requirement
570+ img = pcImageMock (t , "fixtures/dir-img-unsigned" , "testing/manifest:insecureWithOther" )
571+ res , err = pc .IsRunningImageAllowed (context .Background (), img )
572+ assertRunningRejectedPolicyRequirement (t , res , err )
573+ }
574+
575+ func TestPolicyContextRejectInsecureFilteringLogic (t * testing.T ) {
576+ pc , err := NewPolicyContext (& Policy {
577+ Default : PolicyRequirements {NewPRReject ()},
578+ Transports : map [string ]PolicyTransportScopes {
579+ "docker" : {
580+ "docker.io/testing/manifest:multipleInsecure" : {
581+ NewPRInsecureAcceptAnything (),
582+ NewPRInsecureAcceptAnything (),
583+ NewPRReject (),
584+ },
585+ "docker.io/testing/manifest:allInsecure" : {
586+ NewPRInsecureAcceptAnything (),
587+ NewPRInsecureAcceptAnything (),
588+ },
589+ },
590+ },
591+ })
592+ require .NoError (t , err )
593+ defer func () {
594+ err := pc .Destroy ()
595+ require .NoError (t , err )
596+ }()
597+
598+ pc .SetRejectInsecure (true )
599+
600+ // Test filtering multiple insecureAcceptAnything requirements but keeping other requirements
601+ img := pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:multipleInsecure" )
602+ res , err := pc .IsRunningImageAllowed (context .Background (), img )
603+ assertRunningRejectedPolicyRequirement (t , res , err ) // Should fail because only prReject remains
604+
605+ // Test filtering all requirements results in empty requirements error
606+ img = pcImageMock (t , "fixtures/dir-img-valid" , "testing/manifest:allInsecure" )
607+ res , err = pc .IsRunningImageAllowed (context .Background (), img )
608+ assertRunningRejectedPolicyRequirement (t , res , err )
609+ }
0 commit comments