...
1
16
17 package tls
18
19 import (
20 "testing"
21 "time"
22
23 "sigs.k8s.io/gateway-api/conformance/utils/config"
24 "sigs.k8s.io/gateway-api/conformance/utils/http"
25 "sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
26 )
27
28
29
30
31
32
33 func MakeTLSRequestAndExpectEventuallyConsistentResponse(t *testing.T, r roundtripper.RoundTripper, timeoutConfig config.TimeoutConfig, gwAddr string, cPem, keyPem []byte, server string, expected http.ExpectedResponse) {
34 t.Helper()
35
36 req := http.MakeRequest(t, &expected, gwAddr, "HTTPS", "https")
37
38 WaitForConsistentTLSResponse(t, r, req, expected, timeoutConfig.RequiredConsecutiveSuccesses, timeoutConfig.MaxTimeToConsistency, cPem, keyPem, server)
39 }
40
41
42
43
44 func WaitForConsistentTLSResponse(t *testing.T, r roundtripper.RoundTripper, req roundtripper.Request, expected http.ExpectedResponse, threshold int, maxTimeToConsistency time.Duration, cPem, keyPem []byte, server string) {
45 http.AwaitConvergence(t, threshold, maxTimeToConsistency, func(elapsed time.Duration) bool {
46 req.KeyPem = keyPem
47 req.CertPem = cPem
48 req.Server = server
49
50 cReq, cRes, err := r.CaptureRoundTrip(req)
51 if err != nil {
52 t.Logf("Request failed, not ready yet: %v (after %v)", err.Error(), elapsed)
53 return false
54 }
55
56 if err := http.CompareRequest(t, &req, cReq, cRes, expected); err != nil {
57 t.Logf("Response expectation failed for request: %+v not ready yet: %v (after %v)", req, err, elapsed)
58 return false
59 }
60
61 return true
62 })
63 t.Logf("Request passed")
64 }
65
View as plain text