@@ -497,3 +497,113 @@ func assertRunningRejectedPolicyRequirement(t *testing.T, allowed bool, err erro
497
497
assertRunningRejected (t , allowed , err )
498
498
assert .IsType (t , PolicyRequirementError ("" ), err )
499
499
}
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