@@ -3,6 +3,7 @@ package constraint
3
3
import (
4
4
"context"
5
5
"errors"
6
+ "fmt"
6
7
"reflect"
7
8
"strings"
8
9
"testing"
@@ -14,9 +15,12 @@ import (
14
15
"github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
15
16
constraintstatusv1beta1 "github.com/open-policy-agent/gatekeeper/v3/apis/status/v1beta1"
16
17
celSchema "github.com/open-policy-agent/gatekeeper/v3/pkg/drivers/k8scel/schema"
18
+ "github.com/open-policy-agent/gatekeeper/v3/pkg/drivers/k8scel/transform"
17
19
"github.com/open-policy-agent/gatekeeper/v3/pkg/metrics"
18
20
"github.com/open-policy-agent/gatekeeper/v3/pkg/target"
19
21
"github.com/open-policy-agent/gatekeeper/v3/pkg/util"
22
+ admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
23
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
20
24
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21
25
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
22
26
"k8s.io/utils/ptr"
@@ -619,6 +623,104 @@ func TestReportErrorOnConstraintStatus(t *testing.T) {
619
623
}
620
624
}
621
625
626
+ func TestV1beta1ToV1 (t * testing.T ) {
627
+ tests := []struct {
628
+ name string
629
+ v1beta1Obj * admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding
630
+ expectedObj * admissionregistrationv1.ValidatingAdmissionPolicyBinding
631
+ expectedError error
632
+ }{
633
+ {
634
+ name : "valid conversion" ,
635
+ v1beta1Obj : & admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding {
636
+ ObjectMeta : metav1.ObjectMeta {
637
+ Name : "test-binding" ,
638
+ },
639
+ Spec : admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec {
640
+ PolicyName : "test-policy" ,
641
+ ParamRef : & admissionregistrationv1beta1.ParamRef {
642
+ Name : "test-param" ,
643
+ },
644
+ ValidationActions : []admissionregistrationv1beta1.ValidationAction {
645
+ admissionregistrationv1beta1 .Deny ,
646
+ admissionregistrationv1beta1 .Warn ,
647
+ },
648
+ MatchResources : & admissionregistrationv1beta1.MatchResources {
649
+ ObjectSelector : & metav1.LabelSelector {
650
+ MatchLabels : map [string ]string {"key" : "value" },
651
+ },
652
+ NamespaceSelector : & metav1.LabelSelector {
653
+ MatchLabels : map [string ]string {"key" : "value" },
654
+ },
655
+ },
656
+ },
657
+ },
658
+ expectedObj : & admissionregistrationv1.ValidatingAdmissionPolicyBinding {
659
+ ObjectMeta : metav1.ObjectMeta {
660
+ Name : "test-binding" ,
661
+ },
662
+ Spec : admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec {
663
+ PolicyName : "test-policy" ,
664
+ ParamRef : & admissionregistrationv1.ParamRef {
665
+ Name : "test-param" ,
666
+ ParameterNotFoundAction : ptr.To [admissionregistrationv1.ParameterNotFoundActionType ](admissionregistrationv1 .AllowAction ),
667
+ },
668
+ ValidationActions : []admissionregistrationv1.ValidationAction {
669
+ admissionregistrationv1 .Deny ,
670
+ admissionregistrationv1 .Warn ,
671
+ },
672
+ MatchResources : & admissionregistrationv1.MatchResources {
673
+ ObjectSelector : & metav1.LabelSelector {
674
+ MatchLabels : map [string ]string {"key" : "value" },
675
+ },
676
+ NamespaceSelector : & metav1.LabelSelector {
677
+ MatchLabels : map [string ]string {"key" : "value" },
678
+ },
679
+ },
680
+ },
681
+ },
682
+ expectedError : nil ,
683
+ },
684
+ {
685
+ name : "unrecognized enforcement action" ,
686
+ v1beta1Obj : & admissionregistrationv1beta1.ValidatingAdmissionPolicyBinding {
687
+ ObjectMeta : metav1.ObjectMeta {
688
+ Name : "test-binding" ,
689
+ },
690
+ Spec : admissionregistrationv1beta1.ValidatingAdmissionPolicyBindingSpec {
691
+ PolicyName : "test-policy" ,
692
+ ParamRef : & admissionregistrationv1beta1.ParamRef {
693
+ Name : "test-param" ,
694
+ },
695
+ ValidationActions : []admissionregistrationv1beta1.ValidationAction {
696
+ "unknown" ,
697
+ },
698
+ },
699
+ },
700
+ expectedObj : nil ,
701
+ expectedError : fmt .Errorf ("%w: unrecognized enforcement action unknown, must be `warn` or `deny`" , transform .ErrBadEnforcementAction ),
702
+ },
703
+ }
704
+
705
+ for _ , tt := range tests {
706
+ t .Run (tt .name , func (t * testing.T ) {
707
+ obj , err := v1beta1ToV1 (tt .v1beta1Obj )
708
+ if err != nil && tt .expectedError == nil {
709
+ t .Fatalf ("expected no error, got %v" , err )
710
+ }
711
+ if err == nil && tt .expectedError != nil {
712
+ t .Fatalf ("expected error %v, got none" , tt .expectedError )
713
+ }
714
+ if err != nil && tt .expectedError != nil && err .Error () != tt .expectedError .Error () {
715
+ t .Fatalf ("expected error %v, got %v" , tt .expectedError , err )
716
+ }
717
+ if ! reflect .DeepEqual (obj , tt .expectedObj ) {
718
+ t .Errorf ("expected object %v, got %v" , tt .expectedObj , obj )
719
+ }
720
+ })
721
+ }
722
+ }
723
+
622
724
type fakeWriter struct {
623
725
updateErr error
624
726
}
0 commit comments