44 "context"
55 "fmt"
66 "net"
7+ "net/http"
78 "strconv"
8- "strings"
99 "time"
1010
1111 g "github.com/onsi/ginkgo/v2"
@@ -14,11 +14,11 @@ import (
1414 corev1 "k8s.io/api/core/v1"
1515 rbacv1 "k8s.io/api/rbac/v1"
1616 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17+ "k8s.io/apimachinery/pkg/labels"
1718 "k8s.io/apimachinery/pkg/types"
1819 "k8s.io/apimachinery/pkg/util/intstr"
1920 "k8s.io/apimachinery/pkg/util/sets"
2021 "k8s.io/apimachinery/pkg/util/wait"
21- e2eoutput "k8s.io/kubernetes/test/e2e/framework/pod/output"
2222 "k8s.io/pod-security-admission/api"
2323 utilpointer "k8s.io/utils/pointer"
2424
@@ -832,77 +832,41 @@ const (
832832)
833833
834834func createRoute (oc * exutil.CLI , routeType routeType , routeName , serviceName , hostName , path string ) error {
835- var err error
836- switch routeType {
837- case routeTypeInsecure :
838- // --labels on `oc expose` up to 4.21 does not override the ones coming from service's selector,
839- // so we're labeling the router after creating it. https://issues.redhat.com/browse/OCPBUGS-74543
840- err = oc .AsAdmin ().Run ("expose" ).Args ("service" , serviceName , "--name" , routeName , "--hostname" , hostName , "--path" , path ).Execute ()
841- case routeTypePassthrough :
842- err = oc .AsAdmin ().Run ("create" ).Args ("route" , routeTypePassthrough , routeName , "--service" , serviceName , "--hostname" , hostName ).Execute ()
843- default :
844- err = oc .AsAdmin ().Run ("create" ).Args ("route" , string (routeType ), routeName , "--service" , serviceName , "--hostname" , hostName , "--path" , path ).Execute ()
835+ route := types.NamespacedName {
836+ Namespace : oc .Namespace (),
837+ Name : routeName ,
845838 }
846- if err != nil {
847- return err
848- }
849- return oc .AsAdmin ().Run ("label" ).Args ("route" , routeName , "select=haproxy-cfgmgr" ).Execute ()
839+ return createNamedRoute (context .Background (), oc , routeType , route , serviceName , hostName , path , nil , labels.Set {"select" : "haproxy-cfgmgr" })
850840}
851841
852842func readURL (ns , execPodName , host , abspath , ipaddr string ) (string , error ) {
853- host = exutil .IPUrl (host )
854- proto := "http"
855- port := 80
856- uri := fmt .Sprintf ("%s://%s:%d%s" , proto , host , port , abspath )
857- cmd := fmt .Sprintf ("curl -ksfL -m 5 --resolve %s:%d:%s %q" , host , port , ipaddr , uri )
858- output , err := e2eoutput .RunHostCmd (ns , execPodName , cmd )
843+ execPod := execPodRef {
844+ NamespacedName : types.NamespacedName {
845+ Namespace : ns ,
846+ Name : execPodName ,
847+ },
848+ ipAddress : ipaddr ,
849+ }
850+ secure := false
851+ code , output , err := execPodReadURL (execPod , host , secure , abspath )
859852 if err != nil {
860853 return "" , err
861854 }
862- return strings .TrimSpace (output ), nil
855+ if code == 0 || code >= 400 {
856+ return "" , fmt .Errorf ("request failed: response code: %d output: %s" , code , output )
857+ }
858+ return output , nil
863859}
864860
865861func waitForRouteToRespond (ns , execPodName , proto , host , abspath , ipaddr string , port int ) error {
866- // bracket IPv6 IPs when used as URI
867- host = exutil .IPUrl (host )
868- if port == 0 {
869- switch proto {
870- case "http" :
871- port = 80
872- case "https" :
873- port = 443
874- default :
875- port = 80
876- }
877- }
878- uri := fmt .Sprintf ("%s://%s:%d%s" , proto , host , port , abspath )
879- cmd := fmt .Sprintf (`
880- set -e
881- STOP=$(($(date '+%%s') + %d))
882- while [ $(date '+%%s') -lt $STOP ]; do
883- rc=0
884- code=$( curl -k -s -m 5 -o /dev/null -w '%%{http_code}\n' --resolve %s:%d:%s %q ) || rc=$?
885- if [[ "${rc:-0}" -eq 0 ]]; then
886- echo $code
887- if [[ $code -eq 200 ]]; then
888- exit 0
889- fi
890- if [[ $code -ne 503 ]]; then
891- exit 1
892- fi
893- else
894- echo "error ${rc}" 1>&2
895- fi
896- sleep 1
897- done
898- ` , timeoutSeconds , host , port , ipaddr , uri )
899- output , err := e2eoutput .RunHostCmd (ns , execPodName , cmd )
900- if err != nil {
901- return fmt .Errorf ("host command failed: %v\n %s" , err , output )
902- }
903- lines := strings .Split (strings .TrimSpace (output ), "\n " )
904- if lines [len (lines )- 1 ] != "200" {
905- return fmt .Errorf ("last response from server was not 200:\n %s" , output )
862+ execPod := execPodRef {
863+ NamespacedName : types.NamespacedName {
864+ Namespace : ns ,
865+ Name : execPodName ,
866+ },
867+ ipAddress : ipaddr ,
906868 }
907- return nil
869+ secure := proto == "https"
870+ _ , err := execPodWaitURL (context .Background (), execPod , host , secure , abspath , http .StatusOK , timeoutSeconds * time .Second )
871+ return err
908872}
0 commit comments