@@ -20,6 +20,7 @@ package translator
2020import (
2121 "context"
2222 "testing"
23+ "time"
2324
2425 "github.com/go-logr/logr"
2526 "github.com/stretchr/testify/assert"
@@ -32,6 +33,7 @@ import (
3233 gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
3334 gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
3435
36+ adctypes "github.com/apache/apisix-ingress-controller/api/adc"
3537 "github.com/apache/apisix-ingress-controller/api/v1alpha1"
3638 apiv2 "github.com/apache/apisix-ingress-controller/api/v2"
3739 "github.com/apache/apisix-ingress-controller/internal/provider"
@@ -148,3 +150,162 @@ func TestTranslateHTTPRouteUpstreamScheme(t *testing.T) {
148150 })
149151 }
150152}
153+
154+ func TestAttachBackendTrafficPolicyHealthCheck (t * testing.T ) {
155+ trueVal := true
156+ falseVal := false
157+
158+ tests := []struct {
159+ name string
160+ policy * v1alpha1.BackendTrafficPolicy
161+ wantChecks * adctypes.UpstreamHealthCheck
162+ }{
163+ {
164+ name : "nil health check produces no checks" ,
165+ policy : & v1alpha1.BackendTrafficPolicy {},
166+ wantChecks : nil ,
167+ },
168+ {
169+ name : "active health check with all fields" ,
170+ policy : & v1alpha1.BackendTrafficPolicy {
171+ Spec : v1alpha1.BackendTrafficPolicySpec {
172+ HealthCheck : & v1alpha1.HealthCheck {
173+ Active : & v1alpha1.ActiveHealthCheck {
174+ Type : "http" ,
175+ Timeout : metav1.Duration {Duration : 3 * time .Second },
176+ HTTPPath : "/healthz" ,
177+ Concurrency : 10 ,
178+ Host : "example.com" ,
179+ Port : 8080 ,
180+ StrictTLS : & trueVal ,
181+ RequestHeaders : []string {"X-Custom: value" },
182+ Healthy : & v1alpha1.ActiveHealthCheckHealthy {
183+ Interval : metav1.Duration {Duration : 5 * time .Second },
184+ PassiveHealthCheckHealthy : v1alpha1.PassiveHealthCheckHealthy {
185+ HTTPCodes : []int {200 , 201 },
186+ Successes : 3 ,
187+ },
188+ },
189+ Unhealthy : & v1alpha1.ActiveHealthCheckUnhealthy {
190+ Interval : metav1.Duration {Duration : 2 * time .Second },
191+ PassiveHealthCheckUnhealthy : v1alpha1.PassiveHealthCheckUnhealthy {
192+ HTTPCodes : []int {500 , 503 },
193+ HTTPFailures : 5 ,
194+ TCPFailures : 2 ,
195+ Timeouts : 3 ,
196+ },
197+ },
198+ },
199+ },
200+ },
201+ },
202+ wantChecks : & adctypes.UpstreamHealthCheck {
203+ Active : & adctypes.UpstreamActiveHealthCheck {
204+ Type : "http" ,
205+ Timeout : 3 ,
206+ HTTPPath : "/healthz" ,
207+ Concurrency : 10 ,
208+ Host : "example.com" ,
209+ Port : 8080 ,
210+ HTTPSVerifyCertificate : true ,
211+ HTTPRequestHeaders : []string {"X-Custom: value" },
212+ Healthy : adctypes.UpstreamActiveHealthCheckHealthy {
213+ Interval : 5 ,
214+ UpstreamPassiveHealthCheckHealthy : adctypes.UpstreamPassiveHealthCheckHealthy {
215+ HTTPStatuses : []int {200 , 201 },
216+ Successes : 3 ,
217+ },
218+ },
219+ Unhealthy : adctypes.UpstreamActiveHealthCheckUnhealthy {
220+ Interval : 2 ,
221+ UpstreamPassiveHealthCheckUnhealthy : adctypes.UpstreamPassiveHealthCheckUnhealthy {
222+ HTTPStatuses : []int {500 , 503 },
223+ HTTPFailures : 5 ,
224+ TCPFailures : 2 ,
225+ Timeouts : 3 ,
226+ },
227+ },
228+ },
229+ },
230+ },
231+ {
232+ name : "strictTLS false disables certificate verification" ,
233+ policy : & v1alpha1.BackendTrafficPolicy {
234+ Spec : v1alpha1.BackendTrafficPolicySpec {
235+ HealthCheck : & v1alpha1.HealthCheck {
236+ Active : & v1alpha1.ActiveHealthCheck {
237+ StrictTLS : & falseVal ,
238+ Healthy : & v1alpha1.ActiveHealthCheckHealthy {
239+ Interval : metav1.Duration {Duration : 1 * time .Second },
240+ },
241+ },
242+ },
243+ },
244+ },
245+ wantChecks : & adctypes.UpstreamHealthCheck {
246+ Active : & adctypes.UpstreamActiveHealthCheck {
247+ Type : "http" ,
248+ HTTPSVerifyCertificate : false ,
249+ Healthy : adctypes.UpstreamActiveHealthCheckHealthy {
250+ Interval : 1 ,
251+ },
252+ },
253+ },
254+ },
255+ {
256+ name : "active and passive health checks together" ,
257+ policy : & v1alpha1.BackendTrafficPolicy {
258+ Spec : v1alpha1.BackendTrafficPolicySpec {
259+ HealthCheck : & v1alpha1.HealthCheck {
260+ Active : & v1alpha1.ActiveHealthCheck {
261+ Type : "tcp" ,
262+ Healthy : & v1alpha1.ActiveHealthCheckHealthy {
263+ Interval : metav1.Duration {Duration : 1 * time .Second },
264+ },
265+ },
266+ Passive : & v1alpha1.PassiveHealthCheck {
267+ Type : "http" ,
268+ Healthy : & v1alpha1.PassiveHealthCheckHealthy {
269+ HTTPCodes : []int {200 },
270+ Successes : 2 ,
271+ },
272+ Unhealthy : & v1alpha1.PassiveHealthCheckUnhealthy {
273+ HTTPCodes : []int {500 },
274+ HTTPFailures : 3 ,
275+ },
276+ },
277+ },
278+ },
279+ },
280+ wantChecks : & adctypes.UpstreamHealthCheck {
281+ Active : & adctypes.UpstreamActiveHealthCheck {
282+ Type : "tcp" ,
283+ HTTPSVerifyCertificate : true ,
284+ Healthy : adctypes.UpstreamActiveHealthCheckHealthy {
285+ Interval : 1 ,
286+ },
287+ },
288+ Passive : & adctypes.UpstreamPassiveHealthCheck {
289+ Type : "http" ,
290+ Healthy : adctypes.UpstreamPassiveHealthCheckHealthy {
291+ HTTPStatuses : []int {200 },
292+ Successes : 2 ,
293+ },
294+ Unhealthy : adctypes.UpstreamPassiveHealthCheckUnhealthy {
295+ HTTPStatuses : []int {500 },
296+ HTTPFailures : 3 ,
297+ },
298+ },
299+ },
300+ },
301+ }
302+
303+ translator := & Translator {Log : logr .Discard ()}
304+ for _ , tt := range tests {
305+ t .Run (tt .name , func (t * testing.T ) {
306+ ups := adctypes .NewDefaultUpstream ()
307+ translator .attachBackendTrafficPolicyToUpstream (tt .policy , ups )
308+ assert .Equal (t , tt .wantChecks , ups .Checks )
309+ })
310+ }
311+ }
0 commit comments