@@ -11,6 +11,7 @@ import (
11
11
"testing"
12
12
13
13
"github.com/stretchr/testify/require"
14
+ corev1 "k8s.io/api/core/v1"
14
15
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
16
"k8s.io/apimachinery/pkg/types"
16
17
"k8s.io/utils/ptr"
@@ -25,6 +26,7 @@ import (
25
26
"github.com/envoyproxy/gateway/internal/gatewayapi"
26
27
"github.com/envoyproxy/gateway/internal/gatewayapi/resource"
27
28
"github.com/envoyproxy/gateway/internal/logging"
29
+ "github.com/envoyproxy/gateway/internal/provider/kubernetes/test"
28
30
)
29
31
30
32
func TestAddGatewayClassFinalizer (t * testing.T ) {
@@ -1007,6 +1009,141 @@ func TestProcessSecurityPolicyObjectRefs(t *testing.T) {
1007
1009
}
1008
1010
}
1009
1011
1012
+ func TestProcessBackendRefs (t * testing.T ) {
1013
+ ns := "default"
1014
+ ctb := test .GetClusterTrustBundle ("fake-ctb" )
1015
+ secret := test .GetSecret (types.NamespacedName {Namespace : ns , Name : "fake-secret" })
1016
+ cm := & corev1.ConfigMap {
1017
+ ObjectMeta : metav1.ObjectMeta {
1018
+ Namespace : ns ,
1019
+ Name : "fake-cm" ,
1020
+ },
1021
+ Data : map [string ]string {
1022
+ "ca.crt" : "fake-ca-cert" ,
1023
+ },
1024
+ }
1025
+
1026
+ testCases := []struct {
1027
+ name string
1028
+ backend * egv1a1.Backend
1029
+ ctpShouldBeAdded bool
1030
+ secretShouldBeAdded bool
1031
+ configmapShouldBeAdded bool
1032
+ }{
1033
+ {
1034
+ name : "DynamicResolver with ClusterTrustBundle" ,
1035
+ backend : & egv1a1.Backend {
1036
+ ObjectMeta : metav1.ObjectMeta {
1037
+ Namespace : ns ,
1038
+ Name : "test-backend" ,
1039
+ },
1040
+ Spec : egv1a1.BackendSpec {
1041
+ Type : ptr .To (egv1a1 .BackendTypeDynamicResolver ),
1042
+ TLS : & egv1a1.BackendTLSSettings {
1043
+ CACertificateRefs : []gwapiv1.LocalObjectReference {
1044
+ {
1045
+ Kind : gwapiv1 .Kind ("ClusterTrustBundle" ),
1046
+ Name : gwapiv1 .ObjectName ("fake-ctb" ),
1047
+ },
1048
+ },
1049
+ },
1050
+ },
1051
+ },
1052
+ ctpShouldBeAdded : true ,
1053
+ },
1054
+ {
1055
+ name : "DynamicResolver with ConfigMap" ,
1056
+ backend : & egv1a1.Backend {
1057
+ ObjectMeta : metav1.ObjectMeta {
1058
+ Namespace : ns ,
1059
+ Name : "test-backend" ,
1060
+ },
1061
+ Spec : egv1a1.BackendSpec {
1062
+ Type : ptr .To (egv1a1 .BackendTypeDynamicResolver ),
1063
+ TLS : & egv1a1.BackendTLSSettings {
1064
+ CACertificateRefs : []gwapiv1.LocalObjectReference {
1065
+ {
1066
+ Kind : gwapiv1 .Kind ("ConfigMap" ),
1067
+ Name : gwapiv1 .ObjectName ("fake-cm" ),
1068
+ },
1069
+ },
1070
+ },
1071
+ },
1072
+ },
1073
+ configmapShouldBeAdded : true ,
1074
+ },
1075
+ {
1076
+ name : "DynamicResolver with Secret" ,
1077
+ backend : & egv1a1.Backend {
1078
+ ObjectMeta : metav1.ObjectMeta {
1079
+ Namespace : ns ,
1080
+ Name : "test-backend" ,
1081
+ },
1082
+ Spec : egv1a1.BackendSpec {
1083
+ Type : ptr .To (egv1a1 .BackendTypeDynamicResolver ),
1084
+ TLS : & egv1a1.BackendTLSSettings {
1085
+ CACertificateRefs : []gwapiv1.LocalObjectReference {
1086
+ {
1087
+ Kind : gwapiv1 .Kind ("Secret" ),
1088
+ Name : gwapiv1 .ObjectName ("fake-secret" ),
1089
+ },
1090
+ },
1091
+ },
1092
+ },
1093
+ },
1094
+ secretShouldBeAdded : true ,
1095
+ },
1096
+ }
1097
+
1098
+ for i := range testCases {
1099
+ tc := testCases [i ]
1100
+ // Run the test cases.
1101
+ t .Run (tc .name , func (t * testing.T ) {
1102
+ // Add objects referenced by test cases.
1103
+ objs := []client.Object {tc .backend , ctb , secret , cm }
1104
+ logger := logging .DefaultLogger (os .Stdout , egv1a1 .LogLevelInfo )
1105
+
1106
+ r := & gatewayAPIReconciler {
1107
+ log : logger ,
1108
+ classController : "some-gateway-class" ,
1109
+ }
1110
+
1111
+ r .client = fakeclient .NewClientBuilder ().
1112
+ WithScheme (envoygateway .GetScheme ()).
1113
+ WithObjects (objs ... ).
1114
+ Build ()
1115
+
1116
+ resourceTree := resource .NewResources ()
1117
+ resourceMap := newResourceMapping ()
1118
+ backend := tc .backend
1119
+ resourceMap .allAssociatedBackendRefs .Insert (gwapiv1.BackendObjectReference {
1120
+ Kind : gatewayapi .KindPtr (resource .KindBackend ),
1121
+ Namespace : gatewayapi .NamespacePtr (backend .Namespace ),
1122
+ Name : gwapiv1 .ObjectName (backend .Name ),
1123
+ })
1124
+
1125
+ r .processBackendRefs (t .Context (), resourceTree , resourceMap )
1126
+ if tc .ctpShouldBeAdded {
1127
+ require .Contains (t , resourceTree .ClusterTrustBundles , ctb )
1128
+ } else {
1129
+ require .NotContains (t , resourceTree .ClusterTrustBundles , ctb )
1130
+ }
1131
+
1132
+ if tc .secretShouldBeAdded {
1133
+ require .Contains (t , resourceTree .Secrets , secret )
1134
+ } else {
1135
+ require .NotContains (t , resourceTree .Secrets , secret )
1136
+ }
1137
+
1138
+ if tc .configmapShouldBeAdded {
1139
+ require .Contains (t , resourceTree .ConfigMaps , cm )
1140
+ } else {
1141
+ require .NotContains (t , resourceTree .ConfigMaps , cm )
1142
+ }
1143
+ })
1144
+ }
1145
+ }
1146
+
1010
1147
func setupReferenceGrantReconciler (objs []client.Object ) * gatewayAPIReconciler {
1011
1148
logger := logging .DefaultLogger (os .Stdout , egv1a1 .LogLevelInfo )
1012
1149
0 commit comments